no -m, cleanup
This commit is contained in:
		
							parent
							
								
									3a60b19514
								
							
						
					
					
						commit
						bb3e33def3
					
				
							
								
								
									
										17
									
								
								dmenu.1
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								dmenu.1
									
									
									
									
									
								
							| @ -8,8 +8,6 @@ dmenu \- dynamic menu | |||||||
| .RB [ \-i ] | .RB [ \-i ] | ||||||
| .RB [ \-l | .RB [ \-l | ||||||
| .IR lines ] | .IR lines ] | ||||||
| .RB [ \-m |  | ||||||
| .IR monitor ] |  | ||||||
| .RB [ \-p | .RB [ \-p | ||||||
| .IR prompt ] | .IR prompt ] | ||||||
| .RB [ \-fn | .RB [ \-fn | ||||||
| @ -58,9 +56,6 @@ dmenu matches menu items case insensitively. | |||||||
| .BI \-l " lines" | .BI \-l " lines" | ||||||
| dmenu lists items vertically, with the given number of lines. | dmenu lists items vertically, with the given number of lines. | ||||||
| .TP | .TP | ||||||
| .BI \-m " monitor" |  | ||||||
| dmenu appears on the given Xinerama screen. |  | ||||||
| .TP |  | ||||||
| .BI \-p " prompt" | .BI \-p " prompt" | ||||||
| defines the prompt to be displayed to the left of the input field. | defines the prompt to be displayed to the left of the input field. | ||||||
| .TP | .TP | ||||||
| @ -86,23 +81,23 @@ defines the selected foreground color. | |||||||
| prints version information to stdout, 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 (arrow keys, page up/down, home and end), the | ||||||
| following keys are recognized: | following keys are recognized: | ||||||
| .TP | .TP | ||||||
| .B Tab (Control\-i) | .B Tab (Ctrl\-i) | ||||||
| Copy the selected item to the input field. | Copy the selected item to the input field. | ||||||
| .TP | .TP | ||||||
| .B Return (Control\-j) | .B Return (Ctrl\-j) | ||||||
| Confirm selection.  Prints the selected item to stdout and exits, returning | Confirm selection.  Prints the selected item to stdout and exits, returning | ||||||
| success. | success. | ||||||
| .TP | .TP | ||||||
| .B Shift\-Return (Control\-Shift\-j) | .B Shift\-Return (Ctrl\-Shift\-j) | ||||||
| Confirm input.  Prints the input text to stdout and exits, returning success. | Confirm input.  Prints the input text to stdout and exits, returning success. | ||||||
| .TP | .TP | ||||||
| .B Escape (Control\-c) | .B Escape (Ctrl\-c) | ||||||
| Exit without selecting an item, returning failure. | Exit without selecting an item, returning failure. | ||||||
| .TP | .TP | ||||||
| .B Control\-y | .B Ctrl\-y | ||||||
| Paste the current X selection into the input field. | Paste the current X selection into the input field. | ||||||
| .SH SEE ALSO | .SH SEE ALSO | ||||||
| .BR dwm (1) | .BR dwm (1) | ||||||
|  | |||||||
							
								
								
									
										35
									
								
								dmenu.c
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								dmenu.c
									
									
									
									
									
								
							| @ -36,13 +36,12 @@ static void paste(void); | |||||||
| static void readstdin(void); | static void readstdin(void); | ||||||
| static void run(void); | static void run(void); | ||||||
| static void setup(void); | static void setup(void); | ||||||
|  | static void usage(void); | ||||||
| 
 | 
 | ||||||
| static char text[BUFSIZ] = ""; | static char text[BUFSIZ] = ""; | ||||||
| static int bh, mw, mh; | static int bh, mw, mh; | ||||||
| static int inputw; | static int inputw, promptw; | ||||||
| static int lines = 0; | static int lines = 0; | ||||||
| static int monitor = -1; |  | ||||||
| static int promptw; |  | ||||||
| static size_t cursor = 0; | static size_t cursor = 0; | ||||||
| static const char *font = NULL; | static const char *font = NULL; | ||||||
| static const char *prompt = NULL; | static const char *prompt = NULL; | ||||||
| @ -70,7 +69,7 @@ main(int argc, char *argv[]) { | |||||||
| 	for(i = 1; i < argc; i++) | 	for(i = 1; i < argc; i++) | ||||||
| 		/* single flags */ | 		/* single flags */ | ||||||
| 		if(!strcmp(argv[i], "-v")) { | 		if(!strcmp(argv[i], "-v")) { | ||||||
| 			fputs("dmenu-"VERSION", © 2006-2011 dmenu engineers, see LICENSE for details\n", stdout); | 			puts("dmenu-"VERSION", © 2006-2011 dmenu engineers, see LICENSE for details"); | ||||||
| 			exit(EXIT_SUCCESS); | 			exit(EXIT_SUCCESS); | ||||||
| 		} | 		} | ||||||
| 		else if(!strcmp(argv[i], "-b")) | 		else if(!strcmp(argv[i], "-b")) | ||||||
| @ -80,12 +79,10 @@ main(int argc, char *argv[]) { | |||||||
| 		else if(!strcmp(argv[i], "-i")) | 		else if(!strcmp(argv[i], "-i")) | ||||||
| 			fstrncmp = strncasecmp; | 			fstrncmp = strncasecmp; | ||||||
| 		else if(i+1 == argc) | 		else if(i+1 == argc) | ||||||
| 			goto usage; | 			usage(); | ||||||
| 		/* double flags */ | 		/* double flags */ | ||||||
| 		else if(!strcmp(argv[i], "-l")) | 		else if(!strcmp(argv[i], "-l")) | ||||||
| 			lines = atoi(argv[++i]); | 			lines = atoi(argv[++i]); | ||||||
| 		else if(!strcmp(argv[i], "-m")) |  | ||||||
| 			monitor = atoi(argv[++i]); |  | ||||||
| 		else if(!strcmp(argv[i], "-p")) | 		else if(!strcmp(argv[i], "-p")) | ||||||
| 			prompt = argv[++i]; | 			prompt = argv[++i]; | ||||||
| 		else if(!strcmp(argv[i], "-fn")) | 		else if(!strcmp(argv[i], "-fn")) | ||||||
| @ -99,7 +96,7 @@ main(int argc, char *argv[]) { | |||||||
| 		else if(!strcmp(argv[i], "-sf")) | 		else if(!strcmp(argv[i], "-sf")) | ||||||
| 			selfgcolor = argv[++i]; | 			selfgcolor = argv[++i]; | ||||||
| 		else | 		else | ||||||
| 			goto usage; | 			usage(); | ||||||
| 
 | 
 | ||||||
| 	dc = initdc(); | 	dc = initdc(); | ||||||
| 	initfont(dc, font); | 	initfont(dc, font); | ||||||
| @ -114,12 +111,8 @@ main(int argc, char *argv[]) { | |||||||
| 	} | 	} | ||||||
| 	setup(); | 	setup(); | ||||||
| 	run(); | 	run(); | ||||||
| 	return EXIT_FAILURE; |  | ||||||
| 
 | 
 | ||||||
| usage: | 	return EXIT_FAILURE;  /* should not reach */ | ||||||
| 	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; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
| @ -452,7 +445,7 @@ readstdin(void) { | |||||||
| 	char buf[sizeof text], *p, *maxstr = NULL; | 	char buf[sizeof text], *p, *maxstr = NULL; | ||||||
| 	size_t i, max = 0, size = 0; | 	size_t i, max = 0, size = 0; | ||||||
| 
 | 
 | ||||||
| 	for(i = 0; fgets(buf, sizeof buf, stdin); items[++i].text = NULL) { | 	for(i = 0; fgets(buf, sizeof buf, stdin); i++) { | ||||||
| 		if(i+1 >= size / sizeof *items) | 		if(i+1 >= size / sizeof *items) | ||||||
| 			if(!(items = realloc(items, (size += BUFSIZ)))) | 			if(!(items = realloc(items, (size += BUFSIZ)))) | ||||||
| 				eprintf("cannot realloc %u bytes:", size); | 				eprintf("cannot realloc %u bytes:", size); | ||||||
| @ -463,6 +456,8 @@ readstdin(void) { | |||||||
| 		if(strlen(items[i].text) > max) | 		if(strlen(items[i].text) > max) | ||||||
| 			max = strlen(maxstr = items[i].text); | 			max = strlen(maxstr = items[i].text); | ||||||
| 	} | 	} | ||||||
|  | 	if(items) | ||||||
|  | 		items[i].text = NULL; | ||||||
| 	inputw = maxstr ? textw(dc, maxstr) : 0; | 	inputw = maxstr ? textw(dc, maxstr) : 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -519,8 +514,7 @@ setup(void) { | |||||||
| 
 | 
 | ||||||
| 		XQueryPointer(dc->dpy, root, &dw, &dw, &x, &y, &di, &di, &du); | 		XQueryPointer(dc->dpy, root, &dw, &dw, &x, &y, &di, &di, &du); | ||||||
| 		for(i = 0; i < n-1; i++) | 		for(i = 0; i < n-1; i++) | ||||||
| 			if((monitor == info[i].screen_number) | 			if(INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height)) | ||||||
| 			|| (monitor < 0 && INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height))) |  | ||||||
| 				break; | 				break; | ||||||
| 		x = info[i].x_org; | 		x = info[i].x_org; | ||||||
| 		y = info[i].y_org + (topbar ? 0 : info[i].height - mh); | 		y = info[i].y_org + (topbar ? 0 : info[i].height - mh); | ||||||
| @ -534,8 +528,8 @@ setup(void) { | |||||||
| 		y = topbar ? 0 : DisplayHeight(dc->dpy, screen) - mh; | 		y = topbar ? 0 : DisplayHeight(dc->dpy, screen) - mh; | ||||||
| 		mw = DisplayWidth(dc->dpy, screen); | 		mw = DisplayWidth(dc->dpy, screen); | ||||||
| 	} | 	} | ||||||
| 	inputw = MIN(inputw, mw/3); |  | ||||||
| 	promptw = prompt ? textw(dc, prompt) : 0; | 	promptw = prompt ? textw(dc, prompt) : 0; | ||||||
|  | 	inputw = MIN(inputw, mw/3); | ||||||
| 	match(False); | 	match(False); | ||||||
| 
 | 
 | ||||||
| 	/* menu window */ | 	/* menu window */ | ||||||
| @ -551,3 +545,10 @@ setup(void) { | |||||||
| 	resizedc(dc, mw, mh); | 	resizedc(dc, mw, mh); | ||||||
| 	drawmenu(); | 	drawmenu(); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | usage(void) { | ||||||
|  | 	fputs("usage: dmenu [-b] [-f] [-i] [-l lines] [-p prompt] [-fn font]\n" | ||||||
|  | 	      "             [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr); | ||||||
|  | 	exit(EXIT_FAILURE); | ||||||
|  | } | ||||||
|  | |||||||
							
								
								
									
										22
									
								
								draw.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								draw.c
									
									
									
									
									
								
							| @ -9,21 +9,17 @@ | |||||||
| 
 | 
 | ||||||
| #define MAX(a, b)  ((a) > (b) ? (a) : (b)) | #define MAX(a, b)  ((a) > (b) ? (a) : (b)) | ||||||
| #define MIN(a, b)  ((a) < (b) ? (a) : (b)) | #define MIN(a, b)  ((a) < (b) ? (a) : (b)) | ||||||
| #define DEFFONT    "fixed" | #define DEFAULTFN  "fixed" | ||||||
| 
 | 
 | ||||||
| static Bool loadfont(DC *dc, const char *fontstr); | static Bool loadfont(DC *dc, const char *fontstr); | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
| drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsigned long color) { | drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsigned long color) { | ||||||
| 	XRectangle r; |  | ||||||
| 
 |  | ||||||
| 	r.x = dc->x + x; |  | ||||||
| 	r.y = dc->y + y; |  | ||||||
| 	r.width  = fill ? w : w-1; |  | ||||||
| 	r.height = fill ? h : h-1; |  | ||||||
| 
 |  | ||||||
| 	XSetForeground(dc->dpy, dc->gc, color); | 	XSetForeground(dc->dpy, dc->gc, color); | ||||||
| 	(fill ? XFillRectangles : XDrawRectangles)(dc->dpy, dc->canvas, dc->gc, &r, 1); | 	if(fill) | ||||||
|  | 		XFillRectangle(dc->dpy, dc->canvas, dc->gc, dc->x + x, dc->y + y, w, h); | ||||||
|  | 	else | ||||||
|  | 		XDrawRectangle(dc->dpy, dc->canvas, dc->gc, dc->x + x, dc->y + y, w-1, h-1); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
| @ -65,7 +61,7 @@ eprintf(const char *fmt, ...) { | |||||||
| 	vfprintf(stderr, fmt, ap); | 	vfprintf(stderr, fmt, ap); | ||||||
| 	va_end(ap); | 	va_end(ap); | ||||||
| 
 | 
 | ||||||
| 	if(fmt[strlen(fmt)-1] == ':') { | 	if(fmt[0] != '\0' && fmt[strlen(fmt)-1] == ':') { | ||||||
| 		fputc(' ', stderr); | 		fputc(' ', stderr); | ||||||
| 		perror(NULL); | 		perror(NULL); | ||||||
| 	} | 	} | ||||||
| @ -113,11 +109,11 @@ initdc(void) { | |||||||
| 
 | 
 | ||||||
| void | void | ||||||
| initfont(DC *dc, const char *fontstr) { | initfont(DC *dc, const char *fontstr) { | ||||||
| 	if(!loadfont(dc, fontstr ? fontstr : DEFFONT)) { | 	if(!loadfont(dc, fontstr ? fontstr : DEFAULTFN)) { | ||||||
| 		if(fontstr != NULL) | 		if(fontstr != NULL) | ||||||
| 			fprintf(stderr, "cannot load font '%s'\n", fontstr); | 			fprintf(stderr, "cannot load font '%s'\n", fontstr); | ||||||
| 		if(fontstr == NULL || !loadfont(dc, DEFFONT)) | 		if(fontstr == NULL || !loadfont(dc, DEFAULTFN)) | ||||||
| 			eprintf("cannot load font '%s'\n", DEFFONT); | 			eprintf("cannot load font '%s'\n", DEFAULTFN); | ||||||
| 	} | 	} | ||||||
| 	dc->font.height = dc->font.ascent + dc->font.descent; | 	dc->font.height = dc->font.ascent + dc->font.descent; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user