diff options
Diffstat (limited to 'patches/dmenu-rejectnomatch-4.7.diff')
-rw-r--r-- | patches/dmenu-rejectnomatch-4.7.diff | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/patches/dmenu-rejectnomatch-4.7.diff b/patches/dmenu-rejectnomatch-4.7.diff deleted file mode 100644 index 329ab1d..0000000 --- a/patches/dmenu-rejectnomatch-4.7.diff +++ /dev/null @@ -1,82 +0,0 @@ -diff --git a/dmenu.1 b/dmenu.1 -index 9eab758..61084ab 100644 ---- a/dmenu.1 -+++ b/dmenu.1 -@@ -3,7 +3,7 @@ - dmenu \- dynamic menu - .SH SYNOPSIS - .B dmenu --.RB [ \-bfiv ] -+.RB [ \-bfirv ] - .RB [ \-l - .IR lines ] - .RB [ \-m -@@ -47,6 +47,9 @@ X until stdin reaches end\-of\-file. - .B \-i - dmenu matches menu items case insensitively. - .TP -+.B \-r -+dmenu will reject any input which would result in no matching option left. -+.TP - .BI \-l " lines" - dmenu lists items vertically, with the given number of lines. - .TP -diff --git a/dmenu.c b/dmenu.c -index d605ab4..7505278 100644 ---- a/dmenu.c -+++ b/dmenu.c -@@ -38,6 +38,7 @@ static char *embed; - static int bh, mw, mh; - static int inputw = 0, promptw; - static int lrpad; /* sum of left and right padding */ -+static int reject_no_match = 0; - static size_t cursor; - static struct item *items = NULL; - static struct item *matches, *matchend; -@@ -268,12 +269,26 @@ insert(const char *str, ssize_t n) - { - if (strlen(text) + n > sizeof text - 1) - return; -+ -+ static char last[BUFSIZ] = ""; -+ if(reject_no_match) { -+ /* store last text value in case we need to revert it */ -+ memcpy(last, text, BUFSIZ); -+ } -+ - /* move existing text out of the way, insert new text, and update cursor */ - memmove(&text[cursor + n], &text[cursor], sizeof text - cursor - MAX(n, 0)); - if (n > 0) - memcpy(&text[cursor], str, n); - cursor += n; - match(); -+ -+ if(!matches && reject_no_match) { -+ /* revert to last text value if theres no match */ -+ memcpy(text, last, BUFSIZ); -+ cursor -= n; -+ match(); -+ } - } - - static size_t -@@ -636,7 +651,7 @@ setup(void) - static void - usage(void) - { -- fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" -+ fputs("usage: dmenu [-bfirv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" - " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); - exit(1); - } -@@ -659,7 +674,9 @@ main(int argc, char *argv[]) - else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ - fstrncmp = strncasecmp; - fstrstr = cistrstr; -- } else if (i + 1 == argc) -+ } else if (!strcmp(argv[i], "-r")) /* reject input which results in no match */ -+ reject_no_match = 1; -+ else if (i + 1 == argc) - usage(); - /* these options take one argument */ - else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */ |