Introduction
Introduction Statistics Contact Development Disclaimer Help
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
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.