sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit cf4ca09a829c698f69ca1c906a32d7846d986a1e
parent 33a9daa11903d18a04f9a739404d8269c6dabc0f
Author: Felix Van der Jeugt <felix.vanderjeugt@gmail.com>
Date:   Tue, 12 Feb 2019 14:53:54 +0100

add dmenu 4.9 prefixcompletion patch and fix my nick

Diffstat:
Atools.suckless.org/dmenu/patches/prefix-completion/dmenu-prefixcompletion-4.9.diff | 93+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtools.suckless.org/dmenu/patches/prefix-completion/index.md | 3++-
2 files changed, 95 insertions(+), 1 deletion(-)

diff --git a/tools.suckless.org/dmenu/patches/prefix-completion/dmenu-prefixcompletion-4.9.diff b/tools.suckless.org/dmenu/patches/prefix-completion/dmenu-prefixcompletion-4.9.diff @@ -0,0 +1,93 @@ +From 2874b35e41a85731df8c7583f76c71eb249d3dfd Mon Sep 17 00:00:00 2001 +From: Felix Van der Jeugt <felix.vanderjeugt@gmail.com> +Date: Wed, 19 Oct 2016 22:18:21 +0200 +Subject: [PATCH] tabcomplete with longest common prefix + +when hitting tab, the current input will be set to the longest common prefix +of the current selection instead of the first item of the selection +--- + dmenu.c | 32 ++++++++++++++------------------ + 1 file changed, 14 insertions(+), 18 deletions(-) + +diff --git a/dmenu.c b/dmenu.c +index f803149..4bb1c23 100644 +--- a/dmenu.c ++++ b/dmenu.c +@@ -219,7 +219,7 @@ match(void) + char buf[sizeof text], *s; + int i, tokc = 0; + size_t len, textsize; +- struct item *item, *lprefix, *lsubstr, *prefixend, *substrend; ++ struct item *item, *lprefix, *prefixend; + + strcpy(buf, text); + /* separate input text into tokens to be matched individually */ +@@ -228,8 +228,8 @@ match(void) + die("cannot realloc %u bytes:", tokn * sizeof *tokv); + len = tokc ? strlen(tokv[0]) : 0; + +- matches = lprefix = lsubstr = matchend = prefixend = substrend = NULL; +- textsize = strlen(text) + 1; ++ matches = lprefix = matchend = prefixend = NULL; ++ textsize = strlen(text); + for (item = items; item && item->text; item++) { + for (i = 0; i < tokc; i++) + if (!fstrstr(item->text, tokv[i])) +@@ -241,8 +241,6 @@ match(void) + appenditem(item, &matches, &matchend); + else if (!fstrncmp(tokv[0], item->text, len)) + appenditem(item, &lprefix, &prefixend); +- else +- appenditem(item, &lsubstr, &substrend); + } + if (lprefix) { + if (matches) { +@@ -252,14 +250,6 @@ match(void) + matches = lprefix; + matchend = prefixend; + } +- if (lsubstr) { +- if (matches) { +- matchend->right = lsubstr; +- lsubstr->left = matchend; +- } else +- matches = lsubstr; +- matchend = substrend; +- } + curr = sel = matches; + calcoffsets(); + } +@@ -309,6 +299,7 @@ keypress(XKeyEvent *ev) + { + char buf[32]; + int len; ++ struct item * item; + KeySym ksym; + Status status; + +@@ -487,12 +478,17 @@ insert: + } + break; + case XK_Tab: +- if (!sel) +- return; +- strncpy(text, sel->text, sizeof text - 1); ++ if (!matches) break; /* cannot complete no matches */ ++ strncpy(text, matches->text, sizeof text - 1); + text[sizeof text - 1] = '\0'; +- cursor = strlen(text); +- match(); ++ len = cursor = strlen(text); /* length of longest common prefix */ ++ for (item = matches; item && item->text; item = item->right) { ++ cursor = 0; ++ while (cursor < len && text[cursor] == item->text[cursor]) ++ cursor++; ++ len = cursor; ++ } ++ memset(text + len, '\0', strlen(text) - len); + break; + } + +-- +2.20.1 + diff --git a/tools.suckless.org/dmenu/patches/prefix-completion/index.md b/tools.suckless.org/dmenu/patches/prefix-completion/index.md @@ -19,11 +19,12 @@ Download * For 4.6: [dmenu-prefixcompletion-4.6.diff](dmenu-prefixcompletion-4.6.diff) * For 4.7: [dmenu-prefixcompletion-4.7.diff](dmenu-prefixcompletion-4.7.diff) * For 4.8: [dmenu-prefixcompletion-4.8.diff](dmenu-prefixcompletion-4.8.diff) +* For 4.9: [dmenu-prefixcompletion-4.8.diff](dmenu-prefixcompletion-4.9.diff) * [dmenu-prefixcompletion-flag-4.9.diff](dmenu-prefixcompletion-flag-4.9.diff) Authors ------- -* noctua +* ninewise * Martin Tournoij <martin@arp242.net> – `-x` patch.