summaryrefslogtreecommitdiff
path: root/patches
diff options
context:
space:
mode:
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.diff184
-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
+