Introduction
Introduction Statistics Contact Development Disclaimer Help
dmenu-prefixcompletion-flag-4.9.diff - sites - public wiki contents of suckless…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dmenu-prefixcompletion-flag-4.9.diff (3607B)
---
1 diff --git i/config.def.h w/config.def.h
2 index 1edb647..5d312d2 100644
3 --- i/config.def.h
4 +++ w/config.def.h
5 @@ -21,3 +21,8 @@ static unsigned int lines = 0;
6 * for example: " /?\"&[]"
7 */
8 static const char worddelimiters[] = " ";
9 +
10 +/*
11 + * Use prefix matching by default; can be inverted with the -x flag.
12 + */
13 +static int use_prefix = 1;
14 diff --git i/dmenu.1 w/dmenu.1
15 index 323f93c..429fdfa 100644
16 --- i/dmenu.1
17 +++ w/dmenu.1
18 @@ -3,7 +3,7 @@
19 dmenu \- dynamic menu
20 .SH SYNOPSIS
21 .B dmenu
22 -.RB [ \-bfiv ]
23 +.RB [ \-bfivx ]
24 .RB [ \-l
25 .IR lines ]
26 .RB [ \-m
27 @@ -78,6 +78,9 @@ defines the selected foreground color.
28 .B \-v
29 prints version information to stdout, then exits.
30 .TP
31 +.B \-x
32 +Invert prefix matching setting.
33 +.TP
34 .BI \-w " windowid"
35 embed into windowid.
36 .SH USAGE
37 diff --git i/dmenu.c w/dmenu.c
38 index 6b8f51b..3cef454 100644
39 --- i/dmenu.c
40 +++ w/dmenu.c
41 @@ -228,8 +228,13 @@ match(void)
42 die("cannot realloc %u bytes:", tokn * sizeof *…
43 len = tokc ? strlen(tokv[0]) : 0;
44
45 - matches = lprefix = lsubstr = matchend = prefixend = substrend …
46 - textsize = strlen(text) + 1;
47 + if (use_prefix) {
48 + matches = lprefix = matchend = prefixend = NULL;
49 + textsize = strlen(text);
50 + } else {
51 + matches = lprefix = lsubstr = matchend = prefixend = su…
52 + textsize = strlen(text) + 1;
53 + }
54 for (item = items; item && item->text; item++) {
55 for (i = 0; i < tokc; i++)
56 if (!fstrstr(item->text, tokv[i]))
57 @@ -241,7 +246,7 @@ match(void)
58 appenditem(item, &matches, &matchend);
59 else if (!fstrncmp(tokv[0], item->text, len))
60 appenditem(item, &lprefix, &prefixend);
61 - else
62 + else if (!use_prefix)
63 appenditem(item, &lsubstr, &substrend);
64 }
65 if (lprefix) {
66 @@ -252,7 +257,7 @@ match(void)
67 matches = lprefix;
68 matchend = prefixend;
69 }
70 - if (lsubstr) {
71 + if (!use_prefix && lsubstr) {
72 if (matches) {
73 matchend->right = lsubstr;
74 lsubstr->left = matchend;
75 @@ -260,6 +265,7 @@ match(void)
76 matches = lsubstr;
77 matchend = substrend;
78 }
79 +
80 curr = sel = matches;
81 calcoffsets();
82 }
83 @@ -309,6 +315,7 @@ keypress(XKeyEvent *ev)
84 {
85 char buf[32];
86 int len;
87 + struct item * item;
88 KeySym ksym;
89 Status status;
90
91 @@ -487,12 +494,17 @@ insert:
92 }
93 break;
94 case XK_Tab:
95 - if (!sel)
96 - return;
97 - strncpy(text, sel->text, sizeof text - 1);
98 + if (!matches) break; /* cannot complete no matches */
99 + strncpy(text, matches->text, sizeof text - 1);
100 text[sizeof text - 1] = '\0';
101 - cursor = strlen(text);
102 - match();
103 + len = cursor = strlen(text); /* length of longest commo…
104 + for (item = matches; item && item->text; item = item->r…
105 + cursor = 0;
106 + while (cursor < len && text[cursor] == item->te…
107 + cursor++;
108 + len = cursor;
109 + }
110 + memset(text + len, '\0', strlen(text) - len);
111 break;
112 }
113
114 @@ -682,7 +694,7 @@ setup(void)
115 static void
116 usage(void)
117 {
118 - fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] […
119 + fputs("usage: dmenu [-bfivx] [-l lines] [-p prompt] [-fn font] …
120 " [-nb color] [-nf color] [-sb color] [-sf co…
121 exit(1);
122 }
123 @@ -705,7 +717,9 @@ main(int argc, char *argv[])
124 else if (!strcmp(argv[i], "-i")) { /* case-insensitive …
125 fstrncmp = strncasecmp;
126 fstrstr = cistrstr;
127 - } else if (i + 1 == argc)
128 + } else if (!strcmp(argv[i], "-x")) /* invert use_pref…
129 + use_prefix = !use_prefix;
130 + else if (i + 1 == argc)
131 usage();
132 /* these options take one argument */
133 else if (!strcmp(argv[i], "-l")) /* number of lines i…
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.