dmenu-printinputtext-20190822-bbc464d.diff (2502B)
1 From fb5db7880838c7691fb789b7f204906a1539e833 Mon Sep 17 00:00:00 2001 2 From: efe <efe@efe.kim> 3 Date: Wed, 22 Aug 2018 20:22:04 -0400 4 Subject: [PATCH] print input text patch for dmenu 5 6 --- 7 dmenu.1 | 8 ++++++-- 8 dmenu.c | 10 ++++++++-- 9 2 files changed, 14 insertions(+), 4 deletions(-) 10 11 diff --git a/dmenu.1 b/dmenu.1 12 index c065087..8d6f155 100644 13 --- a/dmenu.1 14 +++ b/dmenu.1 15 @@ -3,7 +3,7 @@ 16 dmenu \- dynamic menu 17 .SH SYNOPSIS 18 .B dmenu 19 -.RB [ \-bfiv ] 20 +.RB [ \-bfitv ] 21 .RB [ \-l 22 .IR lines ] 23 .RB [ \-m 24 @@ -75,6 +75,9 @@ defines the selected background color. 25 .BI \-sf " color" 26 defines the selected foreground color. 27 .TP 28 +.B \-t 29 +Return key prints input text instead of selection. 30 +.TP 31 .B \-v 32 prints version information to stdout, then exits. 33 .TP 34 @@ -89,13 +92,14 @@ Copy the selected item to the input field. 35 .TP 36 .B Return 37 Confirm selection. Prints the selected item to stdout and exits, returning 38 -success. 39 +success. If \-t option is given it confirms input instead of selection. 40 .TP 41 .B Ctrl-Return 42 Confirm selection. Prints the selected item to stdout and continues. 43 .TP 44 .B Shift\-Return 45 Confirm input. Prints the input text to stdout and exits, returning success. 46 +If \-t option is given it confirms selection instead of input. 47 .TP 48 .B Escape 49 Exit without selecting an item, returning failure. 50 diff --git a/dmenu.c b/dmenu.c 51 index 5c835dd..9abb7ce 100644 52 --- a/dmenu.c 53 +++ b/dmenu.c 54 @@ -46,6 +46,7 @@ static struct item *items = NULL; 55 static struct item *matches, *matchend; 56 static struct item *prev, *curr, *next, *sel; 57 static int mon = -1, screen; 58 +static int use_text_input = 0; 59 60 static Atom clip, utf8; 61 static Display *dpy; 62 @@ -466,7 +467,10 @@ insert: 63 break; 64 case XK_Return: 65 case XK_KP_Enter: 66 - puts((sel && !(ev->state & ShiftMask)) ? sel->text : text); 67 + if (use_text_input) 68 + puts((sel && (ev->state & ShiftMask)) ? sel->text : text); 69 + else 70 + puts((sel && !(ev->state & ShiftMask)) ? sel->text : text); 71 if (!(ev->state & ControlMask)) { 72 cleanup(); 73 exit(0); 74 @@ -707,7 +711,9 @@ main(int argc, char *argv[]) 75 else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ 76 fstrncmp = strncasecmp; 77 fstrstr = cistrstr; 78 - } else if (i + 1 == argc) 79 + } else if (!strcmp(argv[i], "-t")) /* favors text input over selection */ 80 + use_text_input = 1; 81 + else if (i + 1 == argc) 82 usage(); 83 /* these options take one argument */ 84 else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */ 85 -- 86 2.11.0 87