commit e0e6b071c63f960c398b43b2fbf0dec66a9b3ab6
parent cd3b4915c3358b93f8dbff531bff82c0cd833c0b
Author: Connor Lane Smith <cls@lubutu.com>
Date:   Sun,  8 May 2011 15:15:24 +0100

fast grab patch (thanks Rob)
Diffstat:
Mdmenu.1 | 22+++++++++++++---------
Mdmenu.c | 18++++++++++++++----
2 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/dmenu.1 b/dmenu.1 @@ -4,6 +4,7 @@ dmenu \- dynamic menu .SH SYNOPSIS .B dmenu .RB [ \-b ] +.RB [ \-f ] .RB [ \-i ] .RB [ \-l .IR lines ] @@ -32,9 +33,9 @@ is a dynamic menu for X, originally designed for .BR dwm (1). It manages huge numbers of user-defined menu items efficiently. .P -dmenu reads a list of newline-separated items from standard input and creates a -menu. When the user selects an item or enters any text and presses Return, -their choice is printed to standard output and dmenu terminates. +dmenu reads a list of newline-separated items from stdin and creates a menu. +When the user selects an item or enters any text and presses Return, their +choice is printed to stdout and dmenu terminates. .P .B dmenu_run is a dmenu script used by dwm which lists programs in the user's PATH and @@ -47,6 +48,10 @@ is a program used by dmenu_run to find and cache a list of executables. .B \-b dmenu appears at the bottom of the screen. .TP +.B \-f +dmenu grabs the keyboard before reading stdin. This is faster, but may lock up +X if stdin is from a terminal. +.TP .B \-i dmenu matches menu items case insensitively. .TP @@ -66,7 +71,7 @@ defines the font or font set used. defines the normal background color. .IR #RGB , .IR #RRGGBB , -and color names are supported. +and X color names are supported. .TP .BI \-nf " color" defines the normal foreground color. @@ -78,7 +83,7 @@ defines the selected background color. defines the selected foreground color. .TP .B \-v -prints version information to standard output, then exits. +prints version information to stdout, then exits. .SH USAGE dmenu is completely controlled by the keyboard. Besides standard Unix line editing and item selection (Up/Down/Left/Right, PageUp/PageDown, Home/End), the @@ -88,12 +93,11 @@ following keys are recognized: Copy the selected item to the input field. .TP .B Return (Control\-j) -Confirm selection. Prints the selected item to standard output and exits, -returning success. +Confirm selection. Prints the selected item to stdout and exits, returning +success. .TP .B Shift\-Return (Control\-Shift\-j) -Confirm input. Prints the input text to standard output and exits, returning -success. +Confirm input. Prints the input text to stdout and exits, returning success. .TP .B Escape (Control\-c) Exit without selecting an item, returning failure. diff --git a/dmenu.c b/dmenu.c @@ -64,6 +64,7 @@ static int (*fstrncmp)(const char *, const char *, size_t) = strncmp; int main(int argc, char *argv[]) { + Bool fast = False; int i; progname = "dmenu"; @@ -77,6 +78,8 @@ main(int argc, char *argv[]) { topbar = False; else if(!strcmp(argv[i], "-i")) fstrncmp = strncasecmp; + else if(!strcmp(argv[i], "-f")) + fast = True; else if(i == argc-1) goto usage; /* double flags */ @@ -101,13 +104,21 @@ main(int argc, char *argv[]) { dc = initdc(); initfont(dc, font); - readstdin(); - setup(); + + if(fast) { + setup(); + readstdin(); + } + else { + readstdin(); + setup(); + } + match(); run(); return EXIT_FAILURE; usage: - fputs("usage: dmenu [-b] [-i] [-l lines] [-m monitor] [-p prompt] [-fn font]\n" + fputs("usage: dmenu [-b] [-f] [-i] [-l lines] [-m monitor] [-p prompt] [-fn font]\n" " [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr); return EXIT_FAILURE; } @@ -530,5 +541,4 @@ setup(void) { inputw = MIN(inputw, mw/3); promptw = prompt ? textw(dc, prompt) : 0; XMapRaised(dc->dpy, win); - match(); }