sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit e0bc3139c74b8abd0ea1cf2131f1a888af64c3d5
parent 8c03f4bd8206111ef38974a90a7781a7fa9483b7
Author: Philip K <philippija@gmail.com>
Date:   Mon, 12 Jun 2017 01:21:17 +0200

[dmenu] add password patch

Signed-off-by: Philip K <philippija@gmail.com>

Diffstat:
Atools.suckless.org/dmenu/patches/dmenu-password-4.7.diff | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atools.suckless.org/dmenu/patches/password.md | 17+++++++++++++++++
2 files changed, 83 insertions(+), 0 deletions(-)

diff --git a/tools.suckless.org/dmenu/patches/dmenu-password-4.7.diff b/tools.suckless.org/dmenu/patches/dmenu-password-4.7.diff @@ -0,0 +1,66 @@ +diff -wup a/dmenu.c b/dmenu.c +--- a/dmenu.c 2017-06-12 00:35:39.814716857 +0200 ++++ b/dmenu.c 2017-06-11 23:59:18.794768196 +0200 +@@ -36,7 +36,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; +@@ -131,6 +131,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); +@@ -142,7 +143,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); + + drw_font_getexts(drw->fonts, text, cursor, &curpos, NULL); + if ((curpos += lrpad / 2 - 1) < w) { +@@ -481,6 +487,11 @@ readstdin(void) + 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++) { + if (i + 1 >= size / sizeof *items) +@@ -636,7 +647,7 @@ setup(void) + static void + usage(void) + { +- fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" ++ fputs("usage: dmenu [-bfiPv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" + " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); + exit(1); + } +@@ -659,7 +670,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 */ diff --git a/tools.suckless.org/dmenu/patches/password.md b/tools.suckless.org/dmenu/patches/password.md @@ -0,0 +1,17 @@ +Password +======== +By applying this patch, dmenu will not directly display +the keyboard input, but instead replace it with dots. +All data from stdin will be ignored. + +Use `-P` to activate. + +Download +-------- +* [dmenu-password-4.7.diff](dmenu-pasword-4.7.diff) + +Authors +------- +* Philip K. - philippija (at) gmail (dot) com + +