fast grab patch (thanks Rob)

This commit is contained in:
Connor Lane Smith 2011-05-08 15:15:24 +01:00
parent cd3b4915c3
commit e0e6b071c6
2 changed files with 27 additions and 13 deletions

22
dmenu.1
View file

@ -4,6 +4,7 @@ dmenu \- dynamic menu
.SH SYNOPSIS .SH SYNOPSIS
.B dmenu .B dmenu
.RB [ \-b ] .RB [ \-b ]
.RB [ \-f ]
.RB [ \-i ] .RB [ \-i ]
.RB [ \-l .RB [ \-l
.IR lines ] .IR lines ]
@ -32,9 +33,9 @@ is a dynamic menu for X, originally designed for
.BR dwm (1). .BR dwm (1).
It manages huge numbers of user-defined menu items efficiently. It manages huge numbers of user-defined menu items efficiently.
.P .P
dmenu reads a list of newline-separated items from standard input and creates a dmenu reads a list of newline-separated items from stdin and creates a menu.
menu. When the user selects an item or enters any text and presses Return, When the user selects an item or enters any text and presses Return, their
their choice is printed to standard output and dmenu terminates. choice is printed to stdout and dmenu terminates.
.P .P
.B dmenu_run .B dmenu_run
is a dmenu script used by dwm which lists programs in the user's PATH and 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 .B \-b
dmenu appears at the bottom of the screen. dmenu appears at the bottom of the screen.
.TP .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 .B \-i
dmenu matches menu items case insensitively. dmenu matches menu items case insensitively.
.TP .TP
@ -66,7 +71,7 @@ defines the font or font set used.
defines the normal background color. defines the normal background color.
.IR #RGB , .IR #RGB ,
.IR #RRGGBB , .IR #RRGGBB ,
and color names are supported. and X color names are supported.
.TP .TP
.BI \-nf " color" .BI \-nf " color"
defines the normal foreground color. defines the normal foreground color.
@ -78,7 +83,7 @@ defines the selected background color.
defines the selected foreground color. defines the selected foreground color.
.TP .TP
.B \-v .B \-v
prints version information to standard output, then exits. prints version information to stdout, then exits.
.SH USAGE .SH USAGE
dmenu is completely controlled by the keyboard. Besides standard Unix line dmenu is completely controlled by the keyboard. Besides standard Unix line
editing and item selection (Up/Down/Left/Right, PageUp/PageDown, Home/End), the 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. Copy the selected item to the input field.
.TP .TP
.B Return (Control\-j) .B Return (Control\-j)
Confirm selection. Prints the selected item to standard output and exits, Confirm selection. Prints the selected item to stdout and exits, returning
returning success. success.
.TP .TP
.B Shift\-Return (Control\-Shift\-j) .B Shift\-Return (Control\-Shift\-j)
Confirm input. Prints the input text to standard output and exits, returning Confirm input. Prints the input text to stdout and exits, returning success.
success.
.TP .TP
.B Escape (Control\-c) .B Escape (Control\-c)
Exit without selecting an item, returning failure. Exit without selecting an item, returning failure.

14
dmenu.c
View file

@ -64,6 +64,7 @@ static int (*fstrncmp)(const char *, const char *, size_t) = strncmp;
int int
main(int argc, char *argv[]) { main(int argc, char *argv[]) {
Bool fast = False;
int i; int i;
progname = "dmenu"; progname = "dmenu";
@ -77,6 +78,8 @@ main(int argc, char *argv[]) {
topbar = False; topbar = False;
else if(!strcmp(argv[i], "-i")) else if(!strcmp(argv[i], "-i"))
fstrncmp = strncasecmp; fstrncmp = strncasecmp;
else if(!strcmp(argv[i], "-f"))
fast = True;
else if(i == argc-1) else if(i == argc-1)
goto usage; goto usage;
/* double flags */ /* double flags */
@ -101,13 +104,21 @@ main(int argc, char *argv[]) {
dc = initdc(); dc = initdc();
initfont(dc, font); initfont(dc, font);
if(fast) {
setup();
readstdin();
}
else {
readstdin(); readstdin();
setup(); setup();
}
match();
run(); run();
return EXIT_FAILURE; return EXIT_FAILURE;
usage: 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); " [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr);
return EXIT_FAILURE; return EXIT_FAILURE;
} }
@ -530,5 +541,4 @@ setup(void) {
inputw = MIN(inputw, mw/3); inputw = MIN(inputw, mw/3);
promptw = prompt ? textw(dc, prompt) : 0; promptw = prompt ? textw(dc, prompt) : 0;
XMapRaised(dc->dpy, win); XMapRaised(dc->dpy, win);
match();
} }