123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- From c4de1032bd4c247bc20b6ab92a10a8d778966679 Mon Sep 17 00:00:00 2001
- From: Mehrad Mahmoudian <m.mahmoudian@gmail.com>
- Date: Tue, 4 May 2021 12:05:09 +0300
- Subject: [PATCH] patched with password patch
- ---
- dmenu.1 | 5 ++++-
- dmenu.c | 21 +++++++++++++++++----
- 2 files changed, 21 insertions(+), 5 deletions(-)
- diff --git a/dmenu.1 b/dmenu.1
- index 323f93c..762f707 100644
- --- a/dmenu.1
- +++ b/dmenu.1
- @@ -3,7 +3,7 @@
- dmenu \- dynamic menu
- .SH SYNOPSIS
- .B dmenu
- -.RB [ \-bfiv ]
- +.RB [ \-bfivP ]
- .RB [ \-l
- .IR lines ]
- .RB [ \-m
- @@ -47,6 +47,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
- diff --git a/dmenu.c b/dmenu.c
- index 65f25ce..ad8f63b 100644
- --- a/dmenu.c
- +++ b/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;
- @@ -132,6 +132,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);
- @@ -143,7 +144,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) {
- @@ -524,6 +530,11 @@ readstdin(void)
- char buf[sizeof text], *p;
- 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++) {
- @@ -689,7 +700,7 @@ setup(void)
- static void
- usage(void)
- {
- - fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
- + fputs("usage: dmenu [-bfivP] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
- " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr);
- exit(1);
- }
- @@ -712,7 +723,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 */
- --
- 2.31.1
|