dmenu-password-4.7.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dmenu-password-4.7.diff (2273B) | |
--- | |
1 diff -wup a/dmenu.c b/dmenu.c | |
2 --- a/dmenu.c 2017-06-12 00:35:39.814716857 +0200 | |
3 +++ b/dmenu.c 2017-06-11 23:59:18.794768196 +0200 | |
4 @@ -36,7 +36,7 @@ struct item { | |
5 static char text[BUFSIZ] = ""; | |
6 static char *embed; | |
7 static int bh, mw, mh; | |
8 -static int inputw = 0, promptw; | |
9 +static int inputw = 0, promptw, passwd = 0; | |
10 static int lrpad; /* sum of left and right padding */ | |
11 static size_t cursor; | |
12 static struct item *items = NULL; | |
13 @@ -131,6 +131,7 @@ drawmenu(void) | |
14 unsigned int curpos; | |
15 struct item *item; | |
16 int x = 0, y = 0, w; | |
17 + char *censort; | |
18 | |
19 drw_setscheme(drw, scheme[SchemeNorm]); | |
20 drw_rect(drw, 0, 0, mw, mh, 1, 1); | |
21 @@ -142,7 +143,12 @@ drawmenu(void) | |
22 /* draw input field */ | |
23 w = (lines > 0 || !matches) ? mw - x : inputw; | |
24 drw_setscheme(drw, scheme[SchemeNorm]); | |
25 - drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); | |
26 + if (passwd) { | |
27 + censort = ecalloc(1, sizeof(text)); | |
28 + memset(censort, '.', strlen(text)); | |
29 + drw_text(drw, x, 0, w, bh, lrpad / 2, censort, 0); | |
30 + free(censort); | |
31 + } else drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); | |
32 | |
33 drw_font_getexts(drw->fonts, text, cursor, &curpos, NULL); | |
34 if ((curpos += lrpad / 2 - 1) < w) { | |
35 @@ -481,6 +487,11 @@ readstdin(void) | |
36 size_t i, imax = 0, size = 0; | |
37 unsigned int tmpmax = 0; | |
38 | |
39 + if (passwd) { | |
40 + inputw = lines = 0; | |
41 + return; | |
42 + } | |
43 + | |
44 /* read each line from stdin and add it to the item list */ | |
45 for (i = 0; fgets(buf, sizeof buf, stdin); i++) { | |
46 if (i + 1 >= size / sizeof *items) | |
47 @@ -636,7 +647,7 @@ setup(void) | |
48 static void | |
49 usage(void) | |
50 { | |
51 - fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [… | |
52 + fputs("usage: dmenu [-bfiPv] [-l lines] [-p prompt] [-fn font] … | |
53 " [-nb color] [-nf color] [-sb color] [-sf co… | |
54 exit(1); | |
55 } | |
56 @@ -659,7 +670,9 @@ main(int argc, char *argv[]) | |
57 else if (!strcmp(argv[i], "-i")) { /* case-insensitive … | |
58 fstrncmp = strncasecmp; | |
59 fstrstr = cistrstr; | |
60 - } else if (i + 1 == argc) | |
61 + } else if (!strcmp(argv[i], "-P")) /* is the input a … | |
62 + passwd = 1; | |
63 + else if (i + 1 == argc) | |
64 usage(); | |
65 /* these options take one argument */ | |
66 else if (!strcmp(argv[i], "-l")) /* number of lines i… |