dmenu-password-5.0.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dmenu-password-5.0.diff (3106B)
---
1 From c4de1032bd4c247bc20b6ab92a10a8d778966679 Mon Sep 17 00:00:00 2001
2 From: Mehrad Mahmoudian <m.mahmoudian@gmail.com>
3 Date: Tue, 4 May 2021 12:05:09 +0300
4 Subject: [PATCH] patched with password patch
5
6 ---
7 dmenu.1 | 5 ++++-
8 dmenu.c | 21 +++++++++++++++++----
9 2 files changed, 21 insertions(+), 5 deletions(-)
10
11 diff --git a/dmenu.1 b/dmenu.1
12 index 323f93c..762f707 100644
13 --- a/dmenu.1
14 +++ b/dmenu.1
15 @@ -3,7 +3,7 @@
16 dmenu \- dynamic menu
17 .SH SYNOPSIS
18 .B dmenu
19 -.RB [ \-bfiv ]
20 +.RB [ \-bfivP ]
21 .RB [ \-l
22 .IR lines ]
23 .RB [ \-m
24 @@ -47,6 +47,9 @@ is faster, but will lock up X until stdin reaches end\-of\-file.
25 .B \-i
26 dmenu matches menu items case insensitively.
27 .TP
28 +.B \-P
29 +dmenu will not directly display the keyboard input, but instead replace it with dots. All data from stdin will be ignored.
30 +.TP
31 .BI \-l " lines"
32 dmenu lists items vertically, with the given number of lines.
33 .TP
34 diff --git a/dmenu.c b/dmenu.c
35 index 65f25ce..ad8f63b 100644
36 --- a/dmenu.c
37 +++ b/dmenu.c
38 @@ -37,7 +37,7 @@ struct item {
39 static char text[BUFSIZ] = "";
40 static char *embed;
41 static int bh, mw, mh;
42 -static int inputw = 0, promptw;
43 +static int inputw = 0, promptw, passwd = 0;
44 static int lrpad; /* sum of left and right padding */
45 static size_t cursor;
46 static struct item *items = NULL;
47 @@ -132,6 +132,7 @@ drawmenu(void)
48 unsigned int curpos;
49 struct item *item;
50 int x = 0, y = 0, w;
51 + char *censort;
52
53 drw_setscheme(drw, scheme[SchemeNorm]);
54 drw_rect(drw, 0, 0, mw, mh, 1, 1);
55 @@ -143,7 +144,12 @@ drawmenu(void)
56 /* draw input field */
57 w = (lines > 0 || !matches) ? mw - x : inputw;
58 drw_setscheme(drw, scheme[SchemeNorm]);
59 - drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
60 + if (passwd) {
61 + censort = ecalloc(1, sizeof(text));
62 + memset(censort, '.', strlen(text));
63 + drw_text(drw, x, 0, w, bh, lrpad / 2, censort, 0);
64 + free(censort);
65 + } else drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
66
67 curpos = TEXTW(text) - TEXTW(&text[cursor]);
68 if ((curpos += lrpad / 2 - 1) < w) {
69 @@ -524,6 +530,11 @@ readstdin(void)
70 char buf[sizeof text], *p;
71 size_t i, imax = 0, size = 0;
72 unsigned int tmpmax = 0;
73 + if(passwd){
74 + inputw = lines = 0;
75 + return;
76 + }
77 +
78
79 /* read each line from stdin and add it to the item list */
80 for (i = 0; fgets(buf, sizeof buf, stdin); i++) {
81 @@ -689,7 +700,7 @@ setup(void)
82 static void
83 usage(void)
84 {
85 - fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
86 + fputs("usage: dmenu [-bfivP] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
87 " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr);
88 exit(1);
89 }
90 @@ -712,7 +723,9 @@ main(int argc, char *argv[])
91 else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
92 fstrncmp = strncasecmp;
93 fstrstr = cistrstr;
94 - } else if (i + 1 == argc)
95 + } else if (!strcmp(argv[i], "-P")) /* is the input a password */
96 + passwd = 1;
97 + else if (i + 1 == argc)
98 usage();
99 /* these options take one argument */
100 else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */
101 --
102 2.31.1
103