dmenu-tsv-alt-5.3.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dmenu-tsv-alt-5.3.diff (3540B) | |
--- | |
1 From abc8bfeaaa5e62ce957d8a33ad1f5ca7c793513e Mon Sep 17 00:00:00 2001 | |
2 From: Max Schillinger <[email protected]> | |
3 Date: Sat, 13 Jul 2024 21:06:57 +0200 | |
4 Subject: [PATCH] tsv-alt patch for dmenu 5.3 | |
5 | |
6 --- | |
7 config.def.h | 5 +++++ | |
8 dmenu.1 | 6 +++++- | |
9 dmenu.c | 21 ++++++++++++++------- | |
10 3 files changed, 24 insertions(+), 8 deletions(-) | |
11 | |
12 diff --git a/config.def.h b/config.def.h | |
13 index 1edb647..bd0fcef 100644 | |
14 --- a/config.def.h | |
15 +++ b/config.def.h | |
16 @@ -21,3 +21,8 @@ static unsigned int lines = 0; | |
17 * for example: " /?\"&[]" | |
18 */ | |
19 static const char worddelimiters[] = " "; | |
20 + | |
21 +/* tsv-alt: reverse the order of tab separation. | |
22 + * 0 = display<TAB>output. 1 = output<TAB>display | |
23 + * can be reversed with -r as well */ | |
24 +static int revtab = 0; | |
25 diff --git a/dmenu.1 b/dmenu.1 | |
26 index 323f93c..e767276 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 [ \-bfirv ] | |
35 .RB [ \-l | |
36 .IR lines ] | |
37 .RB [ \-m | |
38 @@ -80,6 +80,10 @@ prints version information to stdout, then exits. | |
39 .TP | |
40 .BI \-w " windowid" | |
41 embed into windowid. | |
42 +.TP | |
43 +.B \-r | |
44 +tsv-alt: reverse the behavior of tab separation. | |
45 +.TP | |
46 .SH USAGE | |
47 dmenu is completely controlled by the keyboard. Items are selected usi… | |
48 arrow keys, page up, page down, home, and end. | |
49 diff --git a/dmenu.c b/dmenu.c | |
50 index 40f93e0..bee6b19 100644 | |
51 --- a/dmenu.c | |
52 +++ b/dmenu.c | |
53 @@ -29,6 +29,7 @@ enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast };… | |
54 | |
55 struct item { | |
56 char *text; | |
57 + char *otext; | |
58 struct item *left, *right; | |
59 int out; | |
60 }; | |
61 @@ -104,7 +105,7 @@ cleanup(void) | |
62 for (i = 0; i < SchemeLast; i++) | |
63 free(scheme[i]); | |
64 for (i = 0; items && items[i].text; ++i) | |
65 - free(items[i].text); | |
66 + free(revtab ? items[i].otext : items[i].text); | |
67 free(items); | |
68 drw_free(drw); | |
69 XSync(dpy, False); | |
70 @@ -489,7 +490,7 @@ insert: | |
71 break; | |
72 case XK_Return: | |
73 case XK_KP_Enter: | |
74 - puts((sel && !(ev->state & ShiftMask)) ? sel->text : te… | |
75 + puts((sel && !(ev->state & ShiftMask)) ? sel->otext : t… | |
76 if (!(ev->state & ControlMask)) { | |
77 cleanup(); | |
78 exit(0); | |
79 @@ -548,7 +549,7 @@ paste(void) | |
80 static void | |
81 readstdin(void) | |
82 { | |
83 - char *line = NULL; | |
84 + char *line = NULL, *tmp; | |
85 size_t i, itemsiz = 0, linesiz = 0; | |
86 ssize_t len; | |
87 | |
88 @@ -561,14 +562,18 @@ readstdin(void) | |
89 } | |
90 if (line[len - 1] == '\n') | |
91 line[len - 1] = '\0'; | |
92 - if (!(items[i].text = strdup(line))) | |
93 + if (!(items[i].text = items[i].otext = strdup(line))) | |
94 die("strdup:"); | |
95 | |
96 + if ((tmp = strchr(items[i].text, '\t'))) { | |
97 + *tmp++ = '\0'; | |
98 + revtab ? (items[i].text = tmp) : (items[i].otex… | |
99 + } | |
100 items[i].out = 0; | |
101 } | |
102 free(line); | |
103 if (items) | |
104 - items[i].text = NULL; | |
105 + items[i].text = items[i].otext = NULL; | |
106 lines = MIN(lines, i); | |
107 } | |
108 | |
109 @@ -715,7 +720,7 @@ setup(void) | |
110 static void | |
111 usage(void) | |
112 { | |
113 - die("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m… | |
114 + die("usage: dmenu [-bfirv] [-l lines] [-p prompt] [-fn font] [-… | |
115 " [-nb color] [-nf color] [-sb color] [-sf colo… | |
116 } | |
117 | |
118 @@ -737,7 +742,9 @@ main(int argc, char *argv[]) | |
119 else if (!strcmp(argv[i], "-i")) { /* case-insensitive … | |
120 fstrncmp = strncasecmp; | |
121 fstrstr = cistrstr; | |
122 - } else if (i + 1 == argc) | |
123 + } else if (!strcmp(argv[i], "-r")) /* reverse the tab s… | |
124 + revtab = (!revtab); | |
125 + else if (i + 1 == argc) | |
126 usage(); | |
127 /* these options take one argument */ | |
128 else if (!strcmp(argv[i], "-l")) /* number of lines i… | |
129 -- | |
130 2.45.2 | |
131 |