mirror of
				https://github.com/tiyn/dmenu.git
				synced 2025-10-31 03:01:20 +01:00 
			
		
		
		
	password
This commit is contained in:
		
							
								
								
									
										88
									
								
								dmenu-password-4.9.diff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								dmenu-password-4.9.diff
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | |||||||
|  | diff -up dmenu-4.9/dmenu.1 dmenu-4.9-orig/dmenu.1 | ||||||
|  | --- dmenu-4.9/dmenu.1	2019-09-25 12:55:42.666319316 -0600 | ||||||
|  | +++ dmenu-4.9-orig/dmenu.1	2019-09-25 12:48:38.848249931 -0600 | ||||||
|  | @@ -3,7 +3,7 @@ | ||||||
|  |  dmenu \- dynamic menu | ||||||
|  |  .SH SYNOPSIS | ||||||
|  |  .B dmenu | ||||||
|  | +.RB [ \-bfivP ] | ||||||
|  | -.RB [ \-bfiv ] | ||||||
|  |  .RB [ \-l | ||||||
|  |  .IR lines ] | ||||||
|  |  .RB [ \-m | ||||||
|  | @@ -47,9 +47,6 @@ is faster, but will lock up X until stdi | ||||||
|  |  .B \-i | ||||||
|  |  dmenu matches menu items case insensitively. | ||||||
|  |  .TP | ||||||
|  | +.B \-P | ||||||
|  | +dmenu will not directly display the keyboard input, but instead replace it with dots. All data from stdin will be ignored. | ||||||
|  | +.TP | ||||||
|  |  .BI \-l " lines" | ||||||
|  |  dmenu lists items vertically, with the given number of lines. | ||||||
|  |  .TP | ||||||
|  | diff -up dmenu-4.9/dmenu.c dmenu-4.9-orig/dmenu.c | ||||||
|  | --- dmenu-4.9/dmenu.c	2019-09-25 12:48:55.756173240 -0600 | ||||||
|  | +++ dmenu-4.9-orig/dmenu.c	2019-09-25 12:48:38.848249931 -0600 | ||||||
|  | @@ -37,7 +37,7 @@ struct item { | ||||||
|  |  static char text[BUFSIZ] = ""; | ||||||
|  |  static char *embed; | ||||||
|  |  static int bh, mw, mh; | ||||||
|  | +static int inputw = 0, promptw, passwd = 0; | ||||||
|  | -static int inputw = 0, promptw; | ||||||
|  |  static int lrpad; /* sum of left and right padding */ | ||||||
|  |  static size_t cursor; | ||||||
|  |  static struct item *items = NULL; | ||||||
|  | @@ -132,7 +132,6 @@ drawmenu(void) | ||||||
|  |  	unsigned int curpos; | ||||||
|  |  	struct item *item; | ||||||
|  |  	int x = 0, y = 0, w; | ||||||
|  | + char *censort; | ||||||
|  |  | ||||||
|  |  	drw_setscheme(drw, scheme[SchemeNorm]); | ||||||
|  |  	drw_rect(drw, 0, 0, mw, mh, 1, 1); | ||||||
|  | @@ -144,12 +143,7 @@ drawmenu(void) | ||||||
|  |  	/* draw input field */ | ||||||
|  |  	w = (lines > 0 || !matches) ? mw - x : inputw; | ||||||
|  |  	drw_setscheme(drw, scheme[SchemeNorm]); | ||||||
|  | +	if (passwd) { | ||||||
|  | +	        censort = ecalloc(1, sizeof(text)); | ||||||
|  | +		memset(censort, '.', strlen(text)); | ||||||
|  | +		drw_text(drw, x, 0, w, bh, lrpad / 2, censort, 0); | ||||||
|  | +		free(censort); | ||||||
|  | +	} else drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); | ||||||
|  | -	drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); | ||||||
|  |  | ||||||
|  |  	curpos = TEXTW(text) - TEXTW(&text[cursor]); | ||||||
|  |  	if ((curpos += lrpad / 2 - 1) < w) { | ||||||
|  | @@ -531,11 +525,6 @@ readstdin(void) | ||||||
|  |  	size_t i, imax = 0, size = 0; | ||||||
|  |  	unsigned int tmpmax = 0; | ||||||
|  |  | ||||||
|  | +  if(passwd){ | ||||||
|  | +    inputw = lines = 0; | ||||||
|  | +    return; | ||||||
|  | +  } | ||||||
|  | + | ||||||
|  |  	/* read each line from stdin and add it to the item list */ | ||||||
|  |  	for (i = 0; fgets(buf, sizeof buf, stdin); i++) { | ||||||
|  |  		if (i + 1 >= size / sizeof *items) | ||||||
|  | @@ -693,7 +682,7 @@ setup(void) | ||||||
|  |  static void | ||||||
|  |  usage(void) | ||||||
|  |  { | ||||||
|  | +	fputs("usage: dmenu [-bfiPv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" | ||||||
|  | -	fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" | ||||||
|  |  	      "             [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); | ||||||
|  |  	exit(1); | ||||||
|  |  } | ||||||
|  | @@ -716,9 +705,7 @@ main(int argc, char *argv[]) | ||||||
|  |  		else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ | ||||||
|  |  			fstrncmp = strncasecmp; | ||||||
|  |  			fstrstr = cistrstr; | ||||||
|  | +		} else if (!strcmp(argv[i], "-P"))   /* is the input a password */ | ||||||
|  | +		        passwd = 1; | ||||||
|  | +		else if (i + 1 == argc) | ||||||
|  | -		} else if (i + 1 == argc) | ||||||
|  |  			usage(); | ||||||
|  |  		/* these options take one argument */ | ||||||
|  |  		else if (!strcmp(argv[i], "-l"))   /* number of lines in vertical list */ | ||||||
							
								
								
									
										5
									
								
								dmenu.1
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								dmenu.1
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ | |||||||
| dmenu \- dynamic menu | dmenu \- dynamic menu | ||||||
| .SH SYNOPSIS | .SH SYNOPSIS | ||||||
| .B dmenu | .B dmenu | ||||||
| .RB [ \-bfiv ] | .RB [ \-bfivP ] | ||||||
| .RB [ \-l | .RB [ \-l | ||||||
| .IR lines ] | .IR lines ] | ||||||
| .RB [ \-m | .RB [ \-m | ||||||
| @@ -50,6 +50,9 @@ is faster, but will lock up X until stdin reaches end\-of\-file. | |||||||
| .B \-i | .B \-i | ||||||
| dmenu matches menu items case insensitively. | dmenu matches menu items case insensitively. | ||||||
| .TP | .TP | ||||||
|  | .B \-P | ||||||
|  | dmenu will not directly display the keyboard input, but instead replace it with dots. All data from stdin will be ignored. | ||||||
|  | .TP | ||||||
| .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 | ||||||
|   | |||||||
							
								
								
									
										21
									
								
								dmenu.1.rej
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								dmenu.1.rej
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | --- dmenu.1	2019-09-25 12:55:42.666319316 -0600 | ||||||
|  | +++ dmenu.1	2019-09-25 12:48:38.848249931 -0600 | ||||||
|  | @@ -3,7 +3,7 @@ | ||||||
|  |  dmenu \- dynamic menu | ||||||
|  |  .SH SYNOPSIS | ||||||
|  |  .B dmenu | ||||||
|  | -.RB [ \-bfivP ] | ||||||
|  | +.RB [ \-bfiv ] | ||||||
|  |  .RB [ \-l | ||||||
|  |  .IR lines ] | ||||||
|  |  .RB [ \-m | ||||||
|  | @@ -47,9 +47,6 @@ is faster, but will lock up X until stdi | ||||||
|  |  .B \-i | ||||||
|  |  dmenu matches menu items case insensitively. | ||||||
|  |  .TP | ||||||
|  | -.B \-P | ||||||
|  | -dmenu will not directly display the keyboard input, but instead replace it with dots. All data from stdin will be ignored. | ||||||
|  | -.TP | ||||||
|  |  .BI \-l " lines" | ||||||
|  |  dmenu lists items vertically, with the given number of lines. | ||||||
|  |  .TP | ||||||
							
								
								
									
										21
									
								
								dmenu.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								dmenu.c
									
									
									
									
									
								
							| @@ -37,7 +37,7 @@ struct item { | |||||||
| static char text[BUFSIZ] = ""; | static char text[BUFSIZ] = ""; | ||||||
| static char *embed; | static char *embed; | ||||||
| static int bh, mw, mh; | static int bh, mw, mh; | ||||||
| static int inputw = 0, promptw; | static int inputw = 0, promptw, passwd = 0; | ||||||
| static int lrpad; /* sum of left and right padding */ | static int lrpad; /* sum of left and right padding */ | ||||||
| static size_t cursor; | static size_t cursor; | ||||||
| static struct item *items = NULL; | static struct item *items = NULL; | ||||||
| @@ -141,6 +141,7 @@ drawmenu(void) | |||||||
| 	unsigned int curpos; | 	unsigned int curpos; | ||||||
| 	struct item *item; | 	struct item *item; | ||||||
| 	int x = 0, y = 0, w; | 	int x = 0, y = 0, w; | ||||||
|  |  char *censort; | ||||||
|  |  | ||||||
| 	drw_setscheme(drw, scheme[SchemeNorm]); | 	drw_setscheme(drw, scheme[SchemeNorm]); | ||||||
| 	drw_rect(drw, 0, 0, mw, mh, 1, 1); | 	drw_rect(drw, 0, 0, mw, mh, 1, 1); | ||||||
| @@ -152,7 +153,12 @@ drawmenu(void) | |||||||
| 	/* draw input field */ | 	/* draw input field */ | ||||||
| 	w = (lines > 0 || !matches) ? mw - x : inputw; | 	w = (lines > 0 || !matches) ? mw - x : inputw; | ||||||
| 	drw_setscheme(drw, scheme[SchemeNorm]); | 	drw_setscheme(drw, scheme[SchemeNorm]); | ||||||
| 	drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); | 	if (passwd) { | ||||||
|  | 	        censort = ecalloc(1, sizeof(text)); | ||||||
|  | 		memset(censort, '.', strlen(text)); | ||||||
|  | 		drw_text(drw, x, 0, w, bh, lrpad / 2, censort, 0); | ||||||
|  | 		free(censort); | ||||||
|  | 	} else drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); | ||||||
|  |  | ||||||
| 	curpos = TEXTW(text) - TEXTW(&text[cursor]); | 	curpos = TEXTW(text) - TEXTW(&text[cursor]); | ||||||
| 	if ((curpos += lrpad / 2 - 1) < w) { | 	if ((curpos += lrpad / 2 - 1) < w) { | ||||||
| @@ -534,6 +540,11 @@ readstdin(void) | |||||||
| 	size_t i, imax = 0, size = 0; | 	size_t i, imax = 0, size = 0; | ||||||
| 	unsigned int tmpmax = 0; | 	unsigned int tmpmax = 0; | ||||||
|  |  | ||||||
|  |   if(passwd){ | ||||||
|  |     inputw = lines = 0; | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |  | ||||||
| 	/* read each line from stdin and add it to the item list */ | 	/* read each line from stdin and add it to the item list */ | ||||||
| 	for (i = 0; fgets(buf, sizeof buf, stdin); i++) { | 	for (i = 0; fgets(buf, sizeof buf, stdin); i++) { | ||||||
| 		if (i + 1 >= size / sizeof *items) | 		if (i + 1 >= size / sizeof *items) | ||||||
| @@ -713,7 +724,7 @@ setup(void) | |||||||
| static void | static void | ||||||
| usage(void) | usage(void) | ||||||
| { | { | ||||||
| 	fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" | 	fputs("usage: dmenu [-bfiPv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" | ||||||
| 	      "             [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); | 	      "             [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); | ||||||
| 	exit(1); | 	exit(1); | ||||||
| } | } | ||||||
| @@ -738,7 +749,9 @@ main(int argc, char *argv[]) | |||||||
| 		else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ | 		else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ | ||||||
| 			fstrncmp = strncasecmp; | 			fstrncmp = strncasecmp; | ||||||
| 			fstrstr = cistrstr; | 			fstrstr = cistrstr; | ||||||
| 		} else if (i + 1 == argc) | 		} else if (!strcmp(argv[i], "-P"))   /* is the input a password */ | ||||||
|  | 		        passwd = 1; | ||||||
|  | 		else if (i + 1 == argc) | ||||||
| 			usage(); | 			usage(); | ||||||
| 		/* these options take one argument */ | 		/* these options take one argument */ | ||||||
| 		else if (!strcmp(argv[i], "-l"))   /* number of lines in vertical list */ | 		else if (!strcmp(argv[i], "-l"))   /* number of lines in vertical list */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user