mirror of
				https://github.com/tiyn/dmenu.git
				synced 2025-10-30 18:51:19 +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 | ||||
| .SH SYNOPSIS | ||||
| .B dmenu | ||||
| .RB [ \-bfiv ] | ||||
| .RB [ \-bfivP ] | ||||
| .RB [ \-l | ||||
| .IR lines ] | ||||
| .RB [ \-m | ||||
| @@ -50,6 +50,9 @@ is faster, but will lock up X until stdin reaches end\-of\-file. | ||||
| .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.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 *embed; | ||||
| 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 size_t cursor; | ||||
| static struct item *items = NULL; | ||||
| @@ -141,6 +141,7 @@ 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); | ||||
| @@ -152,7 +153,12 @@ drawmenu(void) | ||||
| 	/* draw input field */ | ||||
| 	w = (lines > 0 || !matches) ? mw - x : inputw; | ||||
| 	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]); | ||||
| 	if ((curpos += lrpad / 2 - 1) < w) { | ||||
| @@ -534,6 +540,11 @@ 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) | ||||
| @@ -713,7 +724,7 @@ setup(void) | ||||
| static 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); | ||||
| 	exit(1); | ||||
| } | ||||
| @@ -738,7 +749,9 @@ main(int argc, char *argv[]) | ||||
| 		else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ | ||||
| 			fstrncmp = strncasecmp; | ||||
| 			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(); | ||||
| 		/* these options take one argument */ | ||||
| 		else if (!strcmp(argv[i], "-l"))   /* number of lines in vertical list */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user