Introduction
Introduction Statistics Contact Development Disclaimer Help
dmenu-prefixcompletion-4.6.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dmenu-prefixcompletion-4.6.diff (2428B)
---
1 From 7ef1d5edfd6bd9c932452ac2fb2010c8e0d8c1c7 Mon Sep 17 00:00:00 2001
2 From: Felix Van der Jeugt <[email protected]>
3 Date: Wed, 19 Oct 2016 22:18:21 +0200
4 Subject: [PATCH] tabcomplete with longest common prefix
5
6 ---
7 dmenu.c | 30 +++++++++++++-----------------
8 1 file changed, 13 insertions(+), 17 deletions(-)
9
10 diff --git a/dmenu.c b/dmenu.c
11 index 9278e91..40e717c 100644
12 --- a/dmenu.c
13 +++ b/dmenu.c
14 @@ -218,7 +218,7 @@ match(void)
15 char buf[sizeof text], *s;
16 int i, tokc = 0;
17 size_t len, textsize;
18 - struct item *item, *lprefix, *lsubstr, *prefixend, *substrend;
19 + struct item *item, *lprefix, *prefixend;
20
21 strcpy(buf, text);
22 /* separate input text into tokens to be matched individually */
23 @@ -227,7 +227,7 @@ match(void)
24 die("cannot realloc %u bytes:", tokn * sizeof *…
25 len = tokc ? strlen(tokv[0]) : 0;
26
27 - matches = lprefix = lsubstr = matchend = prefixend = substrend …
28 + matches = lprefix = matchend = prefixend = NULL;
29 textsize = strlen(text);
30 for (item = items; item && item->text; item++) {
31 for (i = 0; i < tokc; i++)
32 @@ -240,8 +240,6 @@ match(void)
33 appenditem(item, &matches, &matchend);
34 else if (!fstrncmp(tokv[0], item->text, len))
35 appenditem(item, &lprefix, &prefixend);
36 - else
37 - appenditem(item, &lsubstr, &substrend);
38 }
39 if (lprefix) {
40 if (matches) {
41 @@ -251,14 +249,6 @@ match(void)
42 matches = lprefix;
43 matchend = prefixend;
44 }
45 - if (lsubstr) {
46 - if (matches) {
47 - matchend->right = lsubstr;
48 - lsubstr->left = matchend;
49 - } else
50 - matches = lsubstr;
51 - matchend = substrend;
52 - }
53 curr = sel = matches;
54 calcoffsets();
55 }
56 @@ -292,6 +282,7 @@ keypress(XKeyEvent *ev)
57 {
58 char buf[32];
59 int len;
60 + struct item * item;
61 KeySym ksym = NoSymbol;
62 Status status;
63
64 @@ -447,12 +438,17 @@ keypress(XKeyEvent *ev)
65 }
66 break;
67 case XK_Tab:
68 - if (!sel)
69 - return;
70 - strncpy(text, sel->text, sizeof text - 1);
71 + if (!matches) break; /* cannot complete no matches */
72 + strncpy(text, matches->text, sizeof text - 1);
73 text[sizeof text - 1] = '\0';
74 - cursor = strlen(text);
75 - match();
76 + len = cursor = strlen(text); /* length of longest commo…
77 + for (item = matches; item && item->text; item = item->r…
78 + cursor = 0;
79 + while (cursor < len && text[cursor] == item->te…
80 + cursor++;
81 + len = cursor;
82 + }
83 + memset(text + len, '\0', strlen(text) - len);
84 break;
85 }
86 drawmenu();
87 --
88 2.10.1
89
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.