Introduction
Introduction Statistics Contact Development Disclaimer Help
dmenu-tmenu-20240811-475d809.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dmenu-tmenu-20240811-475d809.diff (3229B)
---
1 From a90fe0dcad642e4c314d08a86f0848c7c5bc87cb Mon Sep 17 00:00:00 2001
2 From: Robert Bilski <[email protected]>
3 Date: Sun, 11 Aug 2024 16:27:58 +0200
4 Subject: [PATCH] Update tmenu patch
5
6 ---
7 config.def.h | 3 +++
8 dmenu.1 | 3 +++
9 dmenu.c | 25 +++++++++++++++++++------
10 3 files changed, 25 insertions(+), 6 deletions(-)
11
12 diff --git a/config.def.h b/config.def.h
13 index 1edb647..805d8c4 100644
14 --- a/config.def.h
15 +++ b/config.def.h
16 @@ -21,3 +21,6 @@ static unsigned int lines = 0;
17 * for example: " /?\"&[]"
18 */
19 static const char worddelimiters[] = " ";
20 +
21 +/* delimiter for tmenu */
22 +static char valuedelimiter = '\t';
23 diff --git a/dmenu.1 b/dmenu.1
24 index 323f93c..fb22ed3 100644
25 --- a/dmenu.1
26 +++ b/dmenu.1
27 @@ -47,6 +47,9 @@ is faster, but will lock up X until stdin reaches end\…
28 .B \-i
29 dmenu matches menu items case insensitively.
30 .TP
31 +.BI \-d " tmenu delimiter"
32 +when used in a line, the value after the delimiter will be displayed. W…
33 +.TP
34 .BI \-l " lines"
35 dmenu lists items vertically, with the given number of lines.
36 .TP
37 diff --git a/dmenu.c b/dmenu.c
38 index 40f93e0..a456425 100644
39 --- a/dmenu.c
40 +++ b/dmenu.c
41 @@ -28,7 +28,7 @@
42 enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes…
43
44 struct item {
45 - char *text;
46 + char *text, *value;
47 struct item *left, *right;
48 int out;
49 };
50 @@ -103,8 +103,8 @@ cleanup(void)
51 XUngrabKey(dpy, AnyKey, AnyModifier, root);
52 for (i = 0; i < SchemeLast; i++)
53 free(scheme[i]);
54 - for (i = 0; items && items[i].text; ++i)
55 - free(items[i].text);
56 + for (i = 0; items && items[i].value; ++i)
57 + free(items[i].value);
58 free(items);
59 drw_free(drw);
60 XSync(dpy, False);
61 @@ -489,7 +489,7 @@ insert:
62 break;
63 case XK_Return:
64 case XK_KP_Enter:
65 - puts((sel && !(ev->state & ShiftMask)) ? sel->text : te…
66 + puts((sel && !(ev->state & ShiftMask)) ? sel->value : t…
67 if (!(ev->state & ControlMask)) {
68 cleanup();
69 exit(0);
70 @@ -564,11 +564,22 @@ readstdin(void)
71 if (!(items[i].text = strdup(line)))
72 die("strdup:");
73
74 + if (!(items[i].value = strdup(line)))
75 + die("strdup:");
76 +
77 + if ((items[i].text = strchr(items[i].value, valuedelimi…
78 + items[i].text[0] = '\0';
79 + items[i].text++;
80 + } else {
81 + items[i].text = items[i].value;
82 + }
83 items[i].out = 0;
84 }
85 free(line);
86 - if (items)
87 + if (items) {
88 items[i].text = NULL;
89 + items[i].value = NULL;
90 + }
91 lines = MIN(lines, i);
92 }
93
94 @@ -715,7 +726,7 @@ setup(void)
95 static void
96 usage(void)
97 {
98 - die("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m…
99 + die("usage: dmenu [-bfiv] [-d tmenu-delim] [-l lines] [-p promp…
100 " [-nb color] [-nf color] [-sb color] [-sf colo…
101 }
102
103 @@ -740,6 +751,8 @@ main(int argc, char *argv[])
104 } else if (i + 1 == argc)
105 usage();
106 /* these options take one argument */
107 + else if (!strcmp(argv[i], "-d")) /* delimiter for tme…
108 + valuedelimiter = argv[++i][0];
109 else if (!strcmp(argv[i], "-l")) /* number of lines i…
110 lines = atoi(argv[++i]);
111 else if (!strcmp(argv[i], "-m"))
112 --
113 2.46.0
114
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.