password patch

This commit is contained in:
Jakub 2023-01-04 21:42:53 -05:00
parent 77b329af23
commit 0ad2e3dea2
3 changed files with 122 additions and 4 deletions

View File

@ -3,7 +3,7 @@
dmenu \- dynamic menu dmenu \- dynamic menu
.SH SYNOPSIS .SH SYNOPSIS
.B dmenu .B dmenu
.RB [ \-bfsrRv ] .RB [ \-bfsrRvP ]
.RB [ \-l .RB [ \-l
.IR lines ] .IR lines ]
.RB [ \-h .RB [ \-h
@ -59,6 +59,9 @@ dmenu will reject any input which would result in no matching option left.
disables ctr-return and shift-return. this guarantees that dmenu prints to disables ctr-return and shift-return. this guarantees that dmenu prints to
stdout only once, and it only prints an item read from stdin. stdout only once, and it only prints an item read from stdin.
.TP .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" .BI \-l " lines"
dmenu lists items vertically, with the given number of lines. dmenu lists items vertically, with the given number of lines.
.TP .TP

18
dmenu.c
View File

@ -42,7 +42,7 @@ struct item {
static char text[BUFSIZ] = ""; static char text[BUFSIZ] = "";
static char *embed; static char *embed;
static int bh, mw, mh; 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 int lrpad; /* sum of left and right padding */
static int reject_no_match = 0; static int reject_no_match = 0;
static size_t cursor; static size_t cursor;
@ -171,6 +171,7 @@ drawmenu(void)
unsigned int curpos; unsigned int curpos;
struct item *item; struct item *item;
int x = 0, y = 0, fh = drw->fonts->h, w; int x = 0, y = 0, fh = drw->fonts->h, w;
char *censort;
drw_setscheme(drw, scheme[SchemeNorm]); drw_setscheme(drw, scheme[SchemeNorm]);
drw_rect(drw, 0, 0, mw, mh, 1, 1); drw_rect(drw, 0, 0, mw, mh, 1, 1);
@ -182,7 +183,12 @@ drawmenu(void)
/* draw input field */ /* draw input field */
w = (lines > 0 || !matches) ? mw - x : inputw; w = (lines > 0 || !matches) ? mw - x : inputw;
drw_setscheme(drw, scheme[SchemeNorm]); 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]); curpos = TEXTW(text) - TEXTW(&text[cursor]);
if ((curpos += lrpad / 2 - 1) < w) { if ((curpos += lrpad / 2 - 1) < w) {
@ -344,6 +350,10 @@ match(void)
int i, tokc = 0; int i, tokc = 0;
size_t len, textsize; size_t len, textsize;
struct item *item, *lprefix, *lsubstr, *prefixend, *substrend; struct item *item, *lprefix, *lsubstr, *prefixend, *substrend;
if(passwd){
inputw = lines = 0;
return;
}
strcpy(buf, text); strcpy(buf, text);
/* separate input text into tokens to be matched individually */ /* separate input text into tokens to be matched individually */
@ -855,7 +865,7 @@ setup(void)
static void static void
usage(void) usage(void)
{ {
die("usage: dmenu [-bfirRv] [-l lines] [-h height] [-p prompt] [-fn font] [-m monitor]\n" die("usage: dmenu [-bfirRvP] [-l lines] [-h height] [-p prompt] [-fn font] [-m monitor]\n"
" [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]"); " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]");
} }
@ -885,6 +895,8 @@ main(int argc, char *argv[])
reject_no_match = 1; reject_no_match = 1;
else if (!strcmp(argv[i], "-R")) else if (!strcmp(argv[i], "-R"))
restrict_return = 1; restrict_return = 1;
else if (!strcmp(argv[i], "-P")) /* is the input a password */
passwd = 1;
else if (i + 1 == argc) else if (i + 1 == argc)
usage(); usage();
/* these options take one argument */ /* these options take one argument */

View File

@ -0,0 +1,103 @@
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