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

Reply via email to