dmenu-instant-5.3.diff (2522B)
1 From 26b302783a16dc2aa19451d9ba4515c8484f4a05 Mon Sep 17 00:00:00 2001 2 From: Max Schillinger <maxschillinger@web.de> 3 Date: Tue, 27 Aug 2024 16:19:41 +0200 4 Subject: [PATCH] Instant mode 5 6 Add '-n' flag to select the only (remaining) entry automatically. 7 --- 8 config.def.h | 1 + 9 dmenu.1 | 5 ++++- 10 dmenu.c | 13 +++++++++++-- 11 3 files changed, 16 insertions(+), 3 deletions(-) 12 13 diff --git a/config.def.h b/config.def.h 14 index 1edb647..7e6f1ed 100644 15 --- a/config.def.h 16 +++ b/config.def.h 17 @@ -1,6 +1,7 @@ 18 /* See LICENSE file for copyright and license details. */ 19 /* Default settings; can be overriden by command line. */ 20 21 +static int instant = 0; /* -n option; if 1, select single entry automatically */ 22 static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */ 23 /* -fn option overrides fonts[0]; default X11 font or font set */ 24 static const char *fonts[] = { 25 diff --git a/dmenu.1 b/dmenu.1 26 index 323f93c..29bdf7f 100644 27 --- a/dmenu.1 28 +++ b/dmenu.1 29 @@ -3,7 +3,7 @@ 30 dmenu \- dynamic menu 31 .SH SYNOPSIS 32 .B dmenu 33 -.RB [ \-bfiv ] 34 +.RB [ \-bfinv ] 35 .RB [ \-l 36 .IR lines ] 37 .RB [ \-m 38 @@ -47,6 +47,9 @@ is faster, but will lock up X until stdin reaches end\-of\-file. 39 .B \-i 40 dmenu matches menu items case insensitively. 41 .TP 42 +.B \-n 43 +dmenu instantly selects if only one match. 44 +.TP 45 .BI \-l " lines" 46 dmenu lists items vertically, with the given number of lines. 47 .TP 48 diff --git a/dmenu.c b/dmenu.c 49 index 40f93e0..92d5154 100644 50 --- a/dmenu.c 51 +++ b/dmenu.c 52 @@ -277,6 +277,13 @@ match(void) 53 matchend = substrend; 54 } 55 curr = sel = matches; 56 + 57 + if (instant && matches && matches==matchend && !lsubstr) { 58 + puts(matches->text); 59 + cleanup(); 60 + exit(0); 61 + } 62 + 63 calcoffsets(); 64 } 65 66 @@ -715,7 +722,7 @@ setup(void) 67 static void 68 usage(void) 69 { 70 - die("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" 71 + die("usage: dmenu [-bfinv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" 72 " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]"); 73 } 74 75 @@ -737,7 +744,9 @@ main(int argc, char *argv[]) 76 else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ 77 fstrncmp = strncasecmp; 78 fstrstr = cistrstr; 79 - } else if (i + 1 == argc) 80 + } else if (!strcmp(argv[i], "-n")) /* instant select only match */ 81 + instant = 1; 82 + else if (i + 1 == argc) 83 usage(); 84 /* these options take one argument */ 85 else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */ 86 -- 87 2.46.0 88