From 65aad46129921ce5824dee14e50ef8bfed350a26 Mon Sep 17 00:00:00 2001 From: zachir Date: Mon, 13 Sep 2021 22:02:26 -0500 Subject: dmenu: complete rebase, add new patches plus fix old ones (no xresources) --- patches/dmenu-separator-20210904-d78ff08.diff | 103 ++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 patches/dmenu-separator-20210904-d78ff08.diff (limited to 'patches/dmenu-separator-20210904-d78ff08.diff') diff --git a/patches/dmenu-separator-20210904-d78ff08.diff b/patches/dmenu-separator-20210904-d78ff08.diff new file mode 100644 index 0000000..25e1fb3 --- /dev/null +++ b/patches/dmenu-separator-20210904-d78ff08.diff @@ -0,0 +1,103 @@ +diff --git a/dmenu.1 b/dmenu.1 +index f9e0db7..af3a6f5 100644 +--- a/dmenu.1 ++++ b/dmenu.1 +@@ -22,6 +22,10 @@ dmenu \- dynamic menu + .IR color ] + .RB [ \-w + .IR windowid ] ++.RB [ \-d ++.IR separator ] ++.RB [ \-D ++.IR separator ] + .P + .BR dmenu_run " ..." + .SH DESCRIPTION +@@ -83,6 +87,14 @@ prints version information to stdout, then exits. + .TP + .BI \-w " windowid" + embed into windowid. ++.TP ++.BI \-d " separator" ++separate the input into two halves on the first occurrence of the given charcter. ++Display only the first half in dmenu and print the second half to stdout upon selection. ++Appending '|' to the separator reverses the display/printing order. ++.TP ++.BI \-D " separator" ++same as \-d but separate based on the last occurrence. + .SH USAGE + dmenu is completely controlled by the keyboard. Items are selected using the + arrow keys, page up, page down, home, and end. +diff --git a/dmenu.c b/dmenu.c +index 98507d9..2ac2c9a 100644 +--- a/dmenu.c ++++ b/dmenu.c +@@ -30,12 +30,16 @@ enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */ + + struct item { + char *text; ++ char *text_output; + struct item *left, *right; + int out; + }; + + static char text[BUFSIZ] = ""; + static char *embed; ++static char separator; ++static int separator_greedy; ++static int separator_reverse; + static int bh, mw, mh; + static int inputw = 0, promptw; + static int lrpad; /* sum of left and right padding */ +@@ -473,7 +477,7 @@ insert: + break; + case XK_Return: + case XK_KP_Enter: +- puts((sel && !(ev->state & ShiftMask)) ? sel->text : text); ++ puts((sel && !(ev->state & ShiftMask)) ? sel->text_output : text); + if (!(ev->state & ControlMask)) { + cleanup(); + exit(0); +@@ -545,6 +549,18 @@ readstdin(void) + *p = '\0'; + if (!(items[i].text = strdup(buf))) + die("cannot strdup %u bytes:", strlen(buf) + 1); ++ if (separator && (p = (separator_greedy) ? ++ strrchr(items[i].text, separator) : strchr(items[i].text, separator))) { ++ *p = '\0'; ++ items[i].text_output = ++p; ++ } else { ++ items[i].text_output = items[i].text; ++ } ++ if (separator_reverse) { ++ char *tmp = items[i].text; ++ items[i].text = items[i].text_output; ++ items[i].text_output = tmp; ++ } + items[i].out = 0; + drw_font_getexts(drw->fonts, buf, strlen(buf), &tmpmax, NULL); + if (tmpmax > inputw) { +@@ -700,8 +716,9 @@ setup(void) + static void + usage(void) + { +- fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" +- " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); ++ fputs("usage: dmenu [-bfinv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" ++ " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n" ++ " [-d separator] [-D separator]\n", stderr); + exit(1); + } + +@@ -744,6 +761,11 @@ main(int argc, char *argv[]) + colors[SchemeSel][ColFg] = argv[++i]; + else if (!strcmp(argv[i], "-w")) /* embedding window id */ + embed = argv[++i]; ++ else if (!strcmp(argv[i], "-d") || !strcmp(argv[i], "-D")) { /* field separator */ ++ separator_reverse = (*(argv[i+1]+1) == '|'); ++ separator_greedy = !strcmp(argv[i], "-D"); ++ separator = *argv[++i]; ++ } + else + usage(); + -- cgit v1.2.3