On Sat, Jun 10, 2017 at 06:29:49PM +0200, Philip Kaludercic wrote: > From: Philip K <philipp...@gmail.com> >
If this is meant for upstream a description would be nice, but this feature is beyond the scope of dmenu and won't be accepted. Some feedback below: > --- > dmenu.c | 19 +++++++++++++++---- > 1 file changed, 15 insertions(+), 4 deletions(-) > > diff --git a/dmenu.c b/dmenu.c > index d605ab4..4672f89 100644 > --- a/dmenu.c > +++ b/dmenu.c > @@ -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; > @@ -142,7 +142,11 @@ 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) { > + char *ntext = calloc(1, sizeof(text)); You should check for out-of-memory conditions here. Variables should be declared at the top of the function in "suckless-style". > + for (int i = 0; i < strlen(text); i++) ntext[i] = '.'; You can use memset here. > + drw_text(drw, x, 0, w, bh, lrpad / 2, ntext, 0); > + } 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 +485,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 +645,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 +668,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.11.0 > > -- Kind regards, Hiltjo