dmenu-printindex-5.0.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dmenu-printindex-5.0.diff (2374B)
---
1 From e5a1ce7fca66c1d991f41df421bb7f1a4a3a8c45 Mon Sep 17 00:00:00 2001
2 From: Jackson Abascal <jacksonabascal@gmail.com>
3 Date: Mon, 26 Apr 2021 15:39:29 -0400
4 Subject: [PATCH] gives dmenu the ability to print the index of matched text
5 instead of the text itself
6
7 ---
8 dmenu.1 | 3 +++
9 dmenu.c | 13 +++++++++++--
10 2 files changed, 14 insertions(+), 2 deletions(-)
11
12 diff --git a/dmenu.1 b/dmenu.1
13 index 323f93c..b3c5f13 100644
14 --- a/dmenu.1
15 +++ b/dmenu.1
16 @@ -47,6 +47,9 @@ is faster, but will lock up X until stdin reaches end\-of\-file.
17 .B \-i
18 dmenu matches menu items case insensitively.
19 .TP
20 +.B \-ix
21 +dmenu prints the index of matched text instead of the text itself.
22 +.TP
23 .BI \-l " lines"
24 dmenu lists items vertically, with the given number of lines.
25 .TP
26 diff --git a/dmenu.c b/dmenu.c
27 index 65f25ce..172a2b4 100644
28 --- a/dmenu.c
29 +++ b/dmenu.c
30 @@ -32,6 +32,7 @@ struct item {
31 char *text;
32 struct item *left, *right;
33 int out;
34 + int index;
35 };
36
37 static char text[BUFSIZ] = "";
38 @@ -44,6 +45,7 @@ static struct item *items = NULL;
39 static struct item *matches, *matchend;
40 static struct item *prev, *curr, *next, *sel;
41 static int mon = -1, screen;
42 +static int print_index = 0;
43
44 static Atom clip, utf8;
45 static Display *dpy;
46 @@ -464,7 +466,11 @@ insert:
47 break;
48 case XK_Return:
49 case XK_KP_Enter:
50 - puts((sel && !(ev->state & ShiftMask)) ? sel->text : text);
51 + if (print_index)
52 + printf("%d\n", (sel && !(ev->state & ShiftMask)) ? sel->index : -1);
53 + else
54 + puts((sel && !(ev->state & ShiftMask)) ? sel->text : text);
55 +
56 if (!(ev->state & ControlMask)) {
57 cleanup();
58 exit(0);
59 @@ -535,6 +541,7 @@ readstdin(void)
60 if (!(items[i].text = strdup(buf)))
61 die("cannot strdup %u bytes:", strlen(buf) + 1);
62 items[i].out = 0;
63 + items[i].index = i;
64 drw_font_getexts(drw->fonts, buf, strlen(buf), &tmpmax, NULL);
65 if (tmpmax > inputw) {
66 inputw = tmpmax;
67 @@ -712,7 +719,9 @@ main(int argc, char *argv[])
68 else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
69 fstrncmp = strncasecmp;
70 fstrstr = cistrstr;
71 - } else if (i + 1 == argc)
72 + } else if (!strcmp(argv[i], "-ix")) /* adds ability to return index in list */
73 + print_index = 1;
74 + else if (i + 1 == argc)
75 usage();
76 /* these options take one argument */
77 else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */
78 --
79 2.31.1
80