dmenu-instant-20160702-3c91eed.diff - sites - public wiki contents of suckless.… | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dmenu-instant-20160702-3c91eed.diff (2048B) | |
--- | |
1 diff --git a/config.def.h b/config.def.h | |
2 index dcffd38..a42d28b 100644 | |
3 --- a/config.def.h | |
4 +++ b/config.def.h | |
5 @@ -1,6 +1,7 @@ | |
6 /* See LICENSE file for copyright and license details. */ | |
7 /* Default settings; can be overriden by command line. */ | |
8 | |
9 +static int instant = 0; | |
10 static int topbar = 1; /* -b option; if 0, dmenu … | |
11 /* -fn option overrides fonts[0]; default X11 font or font set */ | |
12 static const char *fonts[] = { | |
13 diff --git a/dmenu.1 b/dmenu.1 | |
14 index d3ab805..8806d4d 100644 | |
15 --- a/dmenu.1 | |
16 +++ b/dmenu.1 | |
17 @@ -6,6 +6,7 @@ dmenu \- dynamic menu | |
18 .RB [ \-b ] | |
19 .RB [ \-f ] | |
20 .RB [ \-i ] | |
21 +.RB [ \-n ] | |
22 .RB [ \-l | |
23 .RB [ \-m | |
24 .IR monitor ] | |
25 @@ -48,6 +49,9 @@ X until stdin reaches end\-of\-file. | |
26 .B \-i | |
27 dmenu matches menu items case insensitively. | |
28 .TP | |
29 +.B \-n | |
30 +dmenu instantly selects if only one match. | |
31 +.TP | |
32 .BI \-l " lines" | |
33 dmenu lists items vertically, with the given number of lines. | |
34 .TP | |
35 diff --git a/dmenu.c b/dmenu.c | |
36 index e0c2f80..f079479 100644 | |
37 --- a/dmenu.c | |
38 +++ b/dmenu.c | |
39 @@ -250,6 +250,13 @@ match(void) | |
40 matchend = substrend; | |
41 } | |
42 curr = sel = matches; | |
43 + | |
44 + if(instant && matches && matches==matchend && !lsubstr) { | |
45 + puts(matches->text); | |
46 + cleanup(); | |
47 + exit(0); | |
48 + } | |
49 + | |
50 calcoffsets(); | |
51 } | |
52 | |
53 @@ -610,7 +617,7 @@ setup(void) | |
54 static void | |
55 usage(void) | |
56 { | |
57 - fputs("usage: dmenu [-b] [-f] [-i] [-l lines] [-p prompt] [-fn … | |
58 + fputs("usage: dmenu [-b] [-f] [-i] [-n] [-l lines] [-p prompt] … | |
59 " [-nb color] [-nf color] [-sb color] [-sf co… | |
60 exit(1); | |
61 } | |
62 @@ -632,7 +639,9 @@ main(int argc, char *argv[]) | |
63 else if (!strcmp(argv[i], "-i")) { /* case-insensitive … | |
64 fstrncmp = strncasecmp; | |
65 fstrstr = cistrstr; | |
66 - } else if (i + 1 == argc) | |
67 + } else if (!strcmp(argv[i], "-n")) /* instant select only match */ | |
68 + instant = 1; | |
69 + else if (i + 1 == argc) | |
70 usage(); | |
71 /* these options take one argument */ | |
72 else if (!strcmp(argv[i], "-l")) /* number of lines i… |