dmenu-tsv-alt-5.3.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dmenu-tsv-alt-5.3.diff (3540B)
---
1 From abc8bfeaaa5e62ce957d8a33ad1f5ca7c793513e Mon Sep 17 00:00:00 2001
2 From: Max Schillinger <maxschillinger@web.de>
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 using the
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 }; /* color schemes */
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 : text);
75 + puts((sel && !(ev->state & ShiftMask)) ? sel->otext : text);
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].otext = tmp);
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 monitor]\n"
114 + die("usage: dmenu [-bfirv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
115 " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]");
116 }
117
118 @@ -737,7 +742,9 @@ main(int argc, char *argv[])
119 else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
120 fstrncmp = strncasecmp;
121 fstrstr = cistrstr;
122 - } else if (i + 1 == argc)
123 + } else if (!strcmp(argv[i], "-r")) /* reverse the tab separation */
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 in vertical list */
129 --
130 2.45.2
131