dmenu-password-4.7.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) 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] [-m monitor]\n"
52 + fputs("usage: dmenu [-bfiPv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
53 " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr);
54 exit(1);
55 }
56 @@ -659,7 +670,9 @@ main(int argc, char *argv[])
57 else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
58 fstrncmp = strncasecmp;
59 fstrstr = cistrstr;
60 - } else if (i + 1 == argc)
61 + } else if (!strcmp(argv[i], "-P")) /* is the input a password */
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 in vertical list */