fast grab patch (thanks Rob)
This commit is contained in:
		
							
								
								
									
										22
									
								
								dmenu.1
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								dmenu.1
									
									
									
									
									
								
							@ -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.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										18
									
								
								dmenu.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								dmenu.c
									
									
									
									
									
								
							@ -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);
 | 
				
			||||||
	readstdin();
 | 
					
 | 
				
			||||||
	setup();
 | 
						if(fast) {
 | 
				
			||||||
 | 
							setup();
 | 
				
			||||||
 | 
							readstdin();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							readstdin();
 | 
				
			||||||
 | 
							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();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user