diff options
author | zachir <zachir@librem.one> | 2023-02-21 14:30:34 -0600 |
---|---|---|
committer | zachir <zachir@librem.one> | 2023-02-21 14:30:34 -0600 |
commit | ee4eee0e05b567fe72f94eabcec9656a096625bc (patch) | |
tree | af857dbbee2fae2f7ff2674750c0871b24c753b5 /patches | |
parent | 0e8723fdc24c099954f6356f22d1a1df47eddb20 (diff) | |
parent | 96e4a549ce8b3da7d5d339a94487bb2849520ae7 (diff) |
merge master to version 5.25.2
Diffstat (limited to 'patches')
-rw-r--r-- | patches/dmenu-center-5.2.diff (renamed from patches/dmenu-center-20200111-8cd37e1.diff) | 34 | ||||
-rw-r--r-- | patches/dmenu-fuzzyhighlight-caseinsensitive-4.9.diff (renamed from patches/dmenu-fuzzyhighlight-4.9.diff) | 60 | ||||
-rw-r--r-- | patches/dmenu-lineheight-5.2.diff (renamed from patches/dmenu-lineheight-5.0.diff) | 22 | ||||
-rw-r--r-- | patches/dmenu-mousesupport-5.2.diff (renamed from patches/dmenu-mousesupport-5.1.diff) | 8 | ||||
-rw-r--r-- | patches/dmenu-mousesupporthoverbgcol-5.0.diff | 184 | ||||
-rw-r--r-- | patches/dmenu-separator-5.2.patch (renamed from patches/dmenu-separator-20210904-d78ff08.diff) | 76 |
6 files changed, 114 insertions, 270 deletions
diff --git a/patches/dmenu-center-20200111-8cd37e1.diff b/patches/dmenu-center-5.2.diff index af249a6..9401dc5 100644 --- a/patches/dmenu-center-20200111-8cd37e1.diff +++ b/patches/dmenu-center-5.2.diff @@ -1,14 +1,3 @@ -From 8cd37e1ab9e7cb025224aeb3543f1a5be8bceb93 Mon Sep 17 00:00:00 2001 -From: Nihal Jere <nihal@nihaljere.xyz> -Date: Sat, 11 Jan 2020 21:16:08 -0600 -Subject: [PATCH] center patch now has adjustable minimum width - ---- - config.def.h | 2 ++ - dmenu.1 | 3 +++ - dmenu.c | 39 ++++++++++++++++++++++++++++++++------- - 3 files changed, 37 insertions(+), 7 deletions(-) - diff --git a/config.def.h b/config.def.h index 1edb647..88ef264 100644 --- a/config.def.h @@ -37,10 +26,10 @@ index 323f93c..c036baa 100644 dmenu grabs the keyboard before reading stdin if not reading from a tty. This is faster, but will lock up X until stdin reaches end\-of\-file. diff --git a/dmenu.c b/dmenu.c -index 65f25ce..041c7f8 100644 +index 27b7a30..427fb04 100644 --- a/dmenu.c +++ b/dmenu.c -@@ -89,6 +89,15 @@ calcoffsets(void) +@@ -96,6 +96,15 @@ calcoffsets(void) break; } @@ -56,7 +45,7 @@ index 65f25ce..041c7f8 100644 static void cleanup(void) { -@@ -611,6 +620,7 @@ setup(void) +@@ -636,6 +645,7 @@ setup(void) bh = drw->fonts->h + 2; lines = MAX(lines, 0); mh = (lines + 1) * bh; @@ -64,8 +53,8 @@ index 65f25ce..041c7f8 100644 #ifdef XINERAMA i = 0; if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) { -@@ -637,9 +647,16 @@ setup(void) - if (INTERSECT(x, y, 1, 1, info[i])) +@@ -662,9 +672,16 @@ setup(void) + if (INTERSECT(x, y, 1, 1, info[i]) != 0) break; - x = info[i].x_org; @@ -84,7 +73,7 @@ index 65f25ce..041c7f8 100644 XFree(info); } else #endif -@@ -647,11 +664,17 @@ setup(void) +@@ -672,9 +689,16 @@ setup(void) if (!XGetWindowAttributes(dpy, parentwin, &wa)) die("could not get embedding window attributes: 0x%lx", parentwin); @@ -102,11 +91,9 @@ index 65f25ce..041c7f8 100644 + mw = wa.width; + } } -- promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0; - inputw = MIN(inputw, mw/3); - match(); - -@@ -709,6 +732,8 @@ main(int argc, char *argv[]) + promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0; + inputw = mw / 3; /* input width: ~33% of monitor width */ +@@ -733,6 +757,8 @@ main(int argc, char *argv[]) topbar = 0; else if (!strcmp(argv[i], "-f")) /* grabs keyboard before reading stdin */ fast = 1; @@ -115,6 +102,3 @@ index 65f25ce..041c7f8 100644 else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ fstrncmp = strncasecmp; fstrstr = cistrstr; --- -2.24.1 - diff --git a/patches/dmenu-fuzzyhighlight-4.9.diff b/patches/dmenu-fuzzyhighlight-caseinsensitive-4.9.diff index 58d5c6f..026b3d2 100644 --- a/patches/dmenu-fuzzyhighlight-4.9.diff +++ b/patches/dmenu-fuzzyhighlight-caseinsensitive-4.9.diff @@ -1,10 +1,19 @@ -Author: Chris Noxz <chris@noxz.tech> -note: This patch is meant to be used together with fuzzymatch +From 2de2780bef245ae44d677abd20c589160f0d984b Mon Sep 17 00:00:00 2001 +From: Oleh Kopeykin <olehkopeykin@yandex.by> +Date: Sun, 5 Feb 2023 01:15:35 +0300 +Subject: [PATCH] Adds the fuzzyhighlight patch -diff -upN dmenu-4.9/config.def.h dmenu-4.9-fuzzyhighlight/config.def.h ---- dmenu-4.9/config.def.h 2019-02-02 13:55:02.000000000 +0100 -+++ dmenu-4.9-fuzzyhighlight/config.def.h 2020-04-04 10:26:36.990890854 +0200 -@@ -11,6 +11,8 @@ static const char *colors[SchemeLast][2] +--- + config.def.h | 2 ++ + dmenu.1 | 20 ++++++++++++++++++ + dmenu.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++--- + 3 files changed, 76 insertions(+), 3 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 51612b9..0103bda 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -12,6 +12,8 @@ static const char *colors[SchemeLast][2] = { /* fg bg */ [SchemeNorm] = { "#bbbbbb", "#222222" }, [SchemeSel] = { "#eeeeee", "#005577" }, @@ -13,9 +22,10 @@ diff -upN dmenu-4.9/config.def.h dmenu-4.9-fuzzyhighlight/config.def.h [SchemeOut] = { "#000000", "#00ffff" }, }; /* -l option; if nonzero, dmenu uses vertical list with given number of lines */ -diff -upN dmenu-4.9/dmenu.1 dmenu-4.9-fuzzyhighlight/dmenu.1 ---- dmenu-4.9/dmenu.1 2019-02-02 13:55:02.000000000 +0100 -+++ dmenu-4.9-fuzzyhighlight/dmenu.1 2020-04-04 10:30:16.430054933 +0200 +diff --git a/dmenu.1 b/dmenu.1 +index 323f93c..472b179 100644 +--- a/dmenu.1 ++++ b/dmenu.1 @@ -20,6 +20,14 @@ dmenu \- dynamic menu .IR color ] .RB [ \-sf @@ -50,10 +60,11 @@ diff -upN dmenu-4.9/dmenu.1 dmenu-4.9-fuzzyhighlight/dmenu.1 .B \-v prints version information to stdout, then exits. .TP -diff -upN dmenu-4.9/dmenu.c dmenu-4.9-fuzzyhighlight/dmenu.c ---- dmenu-4.9/dmenu.c 2019-02-02 13:55:02.000000000 +0100 -+++ dmenu-4.9-fuzzyhighlight/dmenu.c 2020-04-04 10:27:43.888026309 +0200 -@@ -26,7 +26,9 @@ +diff --git a/dmenu.c b/dmenu.c +index 96ddc98..442d707 100644 +--- a/dmenu.c ++++ b/dmenu.c +@@ -27,7 +27,9 @@ #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) /* enums */ @@ -64,7 +75,7 @@ diff -upN dmenu-4.9/dmenu.c dmenu-4.9-fuzzyhighlight/dmenu.c struct item { char *text; -@@ -113,9 +115,49 @@ cistrstr(const char *s, const char *sub) +@@ -115,9 +117,47 @@ cistrstr(const char *s, const char *sub) return NULL; } @@ -82,19 +93,17 @@ diff -upN dmenu-4.9/dmenu.c dmenu-4.9-fuzzyhighlight/dmenu.c + ? SchemeSelHighlight + : SchemeNormHighlight]); + for (i = 0, highlight = item->text; *highlight && text[i];) { -+ if (*highlight == text[i]) { ++ if (!fstrncmp(&text[i], highlight, 1)) { ++ c = highlight[1]; ++ highlight[1] = '\0'; ++ + /* get indentation */ -+ c = *highlight; -+ *highlight = '\0'; + indent = TEXTW(item->text); -+ *highlight = c; + + /* highlight character */ -+ c = highlight[1]; -+ highlight[1] = '\0'; + drw_text( + drw, -+ x + indent - (lrpad / 2), ++ x + indent - lrpad, + y, + MIN(maxw - indent, TEXTW(highlight) - lrpad), + bh, 0, highlight, 0 @@ -114,7 +123,7 @@ diff -upN dmenu-4.9/dmenu.c dmenu-4.9-fuzzyhighlight/dmenu.c if (item == sel) drw_setscheme(drw, scheme[SchemeSel]); else if (item->out) -@@ -123,7 +165,9 @@ drawitem(struct item *item, int x, int y +@@ -125,7 +165,9 @@ drawitem(struct item *item, int x, int y, int w) else drw_setscheme(drw, scheme[SchemeNorm]); @@ -125,7 +134,7 @@ diff -upN dmenu-4.9/dmenu.c dmenu-4.9-fuzzyhighlight/dmenu.c } static void -@@ -683,7 +727,8 @@ static void +@@ -770,7 +812,8 @@ static void usage(void) { fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" @@ -135,7 +144,7 @@ diff -upN dmenu-4.9/dmenu.c dmenu-4.9-fuzzyhighlight/dmenu.c exit(1); } -@@ -724,6 +769,14 @@ main(int argc, char *argv[]) +@@ -813,6 +856,14 @@ main(int argc, char *argv[]) colors[SchemeSel][ColBg] = argv[++i]; else if (!strcmp(argv[i], "-sf")) /* selected foreground color */ colors[SchemeSel][ColFg] = argv[++i]; @@ -150,3 +159,6 @@ diff -upN dmenu-4.9/dmenu.c dmenu-4.9-fuzzyhighlight/dmenu.c else if (!strcmp(argv[i], "-w")) /* embedding window id */ embed = argv[++i]; else +-- +2.39.1 + diff --git a/patches/dmenu-lineheight-5.0.diff b/patches/dmenu-lineheight-5.2.diff index 3b0df3d..a5e8468 100644 --- a/patches/dmenu-lineheight-5.0.diff +++ b/patches/dmenu-lineheight-5.2.diff @@ -52,10 +52,10 @@ index 323f93c..f2a82b4 100644 dmenu is displayed on the monitor number supplied. Monitor numbers are starting from 0. diff --git a/dmenu.c b/dmenu.c -index 65f25ce..f2a4047 100644 +index e7be8af..82b204b 100644 --- a/dmenu.c +++ b/dmenu.c -@@ -131,7 +131,7 @@ drawmenu(void) +@@ -148,7 +148,7 @@ drawmenu(void) { unsigned int curpos; struct item *item; @@ -64,7 +64,7 @@ index 65f25ce..f2a4047 100644 drw_setscheme(drw, scheme[SchemeNorm]); drw_rect(drw, 0, 0, mw, mh, 1, 1); -@@ -148,7 +148,7 @@ drawmenu(void) +@@ -165,7 +165,7 @@ drawmenu(void) curpos = TEXTW(text) - TEXTW(&text[cursor]); if ((curpos += lrpad / 2 - 1) < w) { drw_setscheme(drw, scheme[SchemeNorm]); @@ -73,7 +73,7 @@ index 65f25ce..f2a4047 100644 } if (lines > 0) { -@@ -609,6 +609,7 @@ setup(void) +@@ -630,6 +630,7 @@ setup(void) /* calculate menu geometry */ bh = drw->fonts->h + 2; @@ -81,16 +81,16 @@ index 65f25ce..f2a4047 100644 lines = MAX(lines, 0); mh = (lines + 1) * bh; #ifdef XINERAMA -@@ -689,7 +690,7 @@ setup(void) +@@ -710,7 +711,7 @@ setup(void) static void usage(void) { -- fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" -+ fputs("usage: dmenu [-bfiv] [-l lines] [-h height] [-p prompt] [-fn font] [-m monitor]\n" - " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); - exit(1); +- die("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" ++ die("usage: dmenu [-bfiv] [-l lines] [-h height] [-p prompt] [-fn font] [-m monitor]\n" + " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]"); } -@@ -717,6 +718,10 @@ main(int argc, char *argv[]) + +@@ -737,6 +738,10 @@ main(int argc, char *argv[]) /* these options take one argument */ else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */ lines = atoi(argv[++i]); @@ -102,5 +102,5 @@ index 65f25ce..f2a4047 100644 mon = atoi(argv[++i]); else if (!strcmp(argv[i], "-p")) /* adds prompt to left of input field */ -- -2.29.2 +2.38.1 diff --git a/patches/dmenu-mousesupport-5.1.diff b/patches/dmenu-mousesupport-5.2.diff index 49824ba..eaacea4 100644 --- a/patches/dmenu-mousesupport-5.1.diff +++ b/patches/dmenu-mousesupport-5.2.diff @@ -1,8 +1,8 @@ diff --git a/dmenu.c b/dmenu.c -index d95e6c6..75a79d0 100644 +index 7cf253b..d276a94 100644 --- a/dmenu.c +++ b/dmenu.c -@@ -518,6 +518,119 @@ draw: +@@ -528,6 +528,119 @@ draw: drawmenu(); } @@ -122,7 +122,7 @@ index d95e6c6..75a79d0 100644 static void paste(void) { -@@ -579,6 +692,9 @@ run(void) +@@ -582,6 +695,9 @@ run(void) break; cleanup(); exit(1); @@ -132,7 +132,7 @@ index d95e6c6..75a79d0 100644 case Expose: if (ev.xexpose.count == 0) drw_map(drw, win, 0, 0, mw, mh); -@@ -676,7 +792,8 @@ setup(void) +@@ -679,7 +795,8 @@ setup(void) /* create menu window */ swa.override_redirect = True; swa.background_pixel = scheme[SchemeNorm][ColBg].pixel; diff --git a/patches/dmenu-mousesupporthoverbgcol-5.0.diff b/patches/dmenu-mousesupporthoverbgcol-5.0.diff deleted file mode 100644 index 1fb7d41..0000000 --- a/patches/dmenu-mousesupporthoverbgcol-5.0.diff +++ /dev/null @@ -1,184 +0,0 @@ -Only in .: config.h -diff -up ../dmenu-5.0/dmenu.c ./dmenu.c ---- ../dmenu-5.0/dmenu.c Wed Sep 2 18:37:07 2020 -+++ ./dmenu.c Wed Nov 4 15:25:27 2020 -@@ -501,6 +501,156 @@ draw: - } - - static void -+buttonpress(XEvent *e) -+{ -+ struct item *item; -+ XButtonPressedEvent *ev = &e->xbutton; -+ int x = 0, y = 0, h = bh, w; -+ -+ if (ev->window != win) -+ return; -+ -+ /* right-click: exit */ -+ if (ev->button == Button3) -+ exit(1); -+ -+ if (prompt && *prompt) -+ x += promptw; -+ -+ /* input field */ -+ w = (lines > 0 || !matches) ? mw - x : inputw; -+ -+ /* left-click on input: clear input, -+ * NOTE: if there is no left-arrow the space for < is reserved so -+ * add that to the input width */ -+ if (ev->button == Button1 && -+ ((lines <= 0 && ev->x >= 0 && ev->x <= x + w + -+ ((!prev || !curr->left) ? TEXTW("<") : 0)) || -+ (lines > 0 && ev->y >= y && ev->y <= y + h))) { -+ insert(NULL, -cursor); -+ drawmenu(); -+ return; -+ } -+ /* middle-mouse click: paste selection */ -+ if (ev->button == Button2) { -+ XConvertSelection(dpy, (ev->state & ShiftMask) ? clip : XA_PRIMARY, -+ utf8, utf8, win, CurrentTime); -+ drawmenu(); -+ return; -+ } -+ /* scroll up */ -+ if (ev->button == Button4 && prev) { -+ sel = curr = prev; -+ calcoffsets(); -+ drawmenu(); -+ return; -+ } -+ /* scroll down */ -+ if (ev->button == Button5 && next) { -+ sel = curr = next; -+ calcoffsets(); -+ drawmenu(); -+ return; -+ } -+ if (ev->button != Button1) -+ return; -+ /* disabled below, needs to be fixed */ -+ /* -+ if (ev->state & ~ControlMask) -+ return; -+ */ -+ if (lines > 0) { -+ /* vertical list: (ctrl)left-click on item */ -+ w = mw - x; -+ for (item = curr; item != next; item = item->right) { -+ y += h; -+ if (ev->y >= y && ev->y <= (y + h)) { -+ puts(item->text); -+ if (!(ev->state & ControlMask)) -+ exit(0); -+ sel = item; -+ if (sel) { -+ sel->out = 1; -+ drawmenu(); -+ } -+ return; -+ } -+ } -+ } else if (matches) { -+ /* left-click on left arrow */ -+ x += inputw; -+ w = TEXTW("<"); -+ if (prev && curr->left) { -+ if (ev->x >= x && ev->x <= x + w) { -+ sel = curr = prev; -+ calcoffsets(); -+ drawmenu(); -+ return; -+ } -+ } -+ /* horizontal list: (ctrl)left-click on item */ -+ for (item = curr; item != next; item = item->right) { -+ x += w; -+ w = MIN(TEXTW(item->text), mw - x - TEXTW(">")); -+ if (ev->x >= x && ev->x <= x + w) { -+ puts(item->text); -+ if (!(ev->state & ControlMask)) -+ exit(0); -+ sel = item; -+ if (sel) { -+ sel->out = 1; -+ drawmenu(); -+ } -+ return; -+ } -+ } -+ /* left-click on right arrow */ -+ w = TEXTW(">"); -+ x = mw - w; -+ if (next && ev->x >= x && ev->x <= x + w) { -+ sel = curr = next; -+ calcoffsets(); -+ drawmenu(); -+ return; -+ } -+ } -+} -+ -+static void -+mousemove(XEvent *e) -+{ -+ struct item *item; -+ XPointerMovedEvent *ev = &e->xmotion; -+ int x = 0, y = 0, h = bh, w; -+ -+ if (lines > 0) { -+ w = mw - x; -+ for (item = curr; item != next; item = item->right) { -+ y += h; -+ if (ev->y >= y && ev->y <= (y + h)) { -+ sel = item; -+ calcoffsets(); -+ drawmenu(); -+ return; -+ } -+ } -+ } else if (matches) { -+ x += inputw; -+ w = TEXTW("<"); -+ for (item = curr; item != next; item = item->right) { -+ x += w; -+ w = MIN(TEXTW(item->text), mw - x - TEXTW(">")); -+ if (ev->x >= x && ev->x <= x + w) { -+ sel = item; -+ calcoffsets(); -+ drawmenu(); -+ return; -+ } -+ } -+ } -+} -+ -+static void - paste(void) - { - char *p, *q; -@@ -561,6 +711,12 @@ run(void) - break; - cleanup(); - exit(1); -+ case ButtonPress: -+ buttonpress(&ev); -+ break; -+ case MotionNotify: -+ mousemove(&ev); -+ break; - case Expose: - if (ev.xexpose.count == 0) - drw_map(drw, win, 0, 0, mw, mh); -@@ -658,7 +814,8 @@ setup(void) - /* create menu window */ - swa.override_redirect = True; - swa.background_pixel = scheme[SchemeNorm][ColBg].pixel; -- swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask; -+ swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask | -+ ButtonPressMask | PointerMotionMask; - win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0, - CopyFromParent, CopyFromParent, CopyFromParent, - CWOverrideRedirect | CWBackPixel | CWEventMask, &swa); diff --git a/patches/dmenu-separator-20210904-d78ff08.diff b/patches/dmenu-separator-5.2.patch index be30420..09f41cb 100644 --- a/patches/dmenu-separator-20210904-d78ff08.diff +++ b/patches/dmenu-separator-5.2.patch @@ -1,3 +1,13 @@ +From db596234b244382e984228791e840190d82967ea Mon Sep 17 00:00:00 2001 +From: NRK <nrk@disroot.org> +Date: Fri, 3 Sep 2021 11:11:14 +0600 +Subject: [PATCH] patch: seperator + +--- + dmenu.1 | 12 ++++++++++++ + dmenu.c | 31 +++++++++++++++++++++++++++---- + 2 files changed, 39 insertions(+), 4 deletions(-) + diff --git a/dmenu.1 b/dmenu.1 index 323f93c..d511148 100644 --- a/dmenu.1 @@ -29,10 +39,10 @@ index 323f93c..d511148 100644 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..82227c8 100644 +index 7cf253b..a8eb321 100644 --- a/dmenu.c +++ b/dmenu.c -@@ -30,12 +30,16 @@ enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */ +@@ -30,12 +30,15 @@ enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */ struct item { char *text; @@ -43,13 +53,21 @@ index 98507d9..82227c8 100644 static char text[BUFSIZ] = ""; static char *embed; -+static char separator; -+static int separator_greedy; -+static int separator_reverse; ++static char separator, separator_reverse; ++static char * (*sepchr)(const char *, int); static int bh, mw, mh; static int inputw = 0, promptw; static int lrpad; /* sum of left and right padding */ -@@ -473,7 +477,7 @@ insert: +@@ -105,7 +108,7 @@ cleanup(void) + for (i = 0; i < SchemeLast; i++) + free(scheme[i]); + for (i = 0; items && items[i].text; ++i) +- free(items[i].text); ++ free(separator_reverse ? items[i].text_output : items[i].text); + free(items); + drw_free(drw); + XSync(dpy, False); +@@ -490,7 +493,7 @@ insert: break; case XK_Return: case XK_KP_Enter: @@ -58,12 +76,21 @@ index 98507d9..82227c8 100644 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))) { +@@ -549,7 +552,7 @@ paste(void) + static void + readstdin(void) + { +- char *line = NULL; ++ char *p, *line = NULL; + size_t i, junk, size = 0; + ssize_t len; + +@@ -561,6 +564,19 @@ readstdin(void) + if (line[len - 1] == '\n') + line[len - 1] = '\0'; + items[i].text = line; ++ ++ if (separator && (p = sepchr(items[i].text, separator)) != NULL) { + *p = '\0'; + items[i].text_output = ++p; + } else { @@ -74,28 +101,33 @@ index 98507d9..82227c8 100644 + items[i].text = items[i].text_output; + items[i].text_output = p; + } ++ items[i].out = 0; - drw_font_getexts(drw->fonts, buf, strlen(buf), &tmpmax, NULL); - if (tmpmax > inputw) { -@@ -701,7 +717,8 @@ static void + } + if (items) +@@ -711,7 +727,8 @@ 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); -+ " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n" -+ " [-d separator] [-D separator]\n", stderr); - exit(1); + die("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" +- " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]"); ++ " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n" ++ " [-d separator] [-D separator]"); } -@@ -744,6 +761,11 @@ main(int argc, char *argv[]) + int +@@ -753,6 +770,12 @@ 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") || /* field separator */ -+ (separator_greedy = !strcmp(argv[i], "-D"))) { ++ !strcmp(argv[i], "-D")) { ++ sepchr = argv[i][1] == 'D' ? strrchr : strchr; + separator = argv[++i][0]; + separator_reverse = argv[i][1] == '|'; + } else usage(); +-- +2.35.1 + |