dmenu-instant-4.7.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dmenu-instant-4.7.diff (2041B)
       ---
            1 diff --git a/config.def.h b/config.def.h
            2 index 1edb647..37f43d5 100644
            3 --- a/config.def.h
            4 +++ b/config.def.h
            5 @@ -1,6 +1,7 @@
            6  /* See LICENSE file for copyright and license details. */
            7  /* Default settings; can be overriden by command line. */
            8  
            9 +static int instant = 0;
           10  static int topbar = 1;                      /* -b  option; if 0, dmenu appears at bottom     */
           11  /* -fn option overrides fonts[0]; default X11 font or font set */
           12  static const char *fonts[] = {
           13 diff --git a/dmenu.1 b/dmenu.1
           14 index 9eab758..98d3725 100644
           15 --- a/dmenu.1
           16 +++ b/dmenu.1
           17 @@ -3,7 +3,7 @@
           18  dmenu \- dynamic menu
           19  .SH SYNOPSIS
           20  .B dmenu
           21 -.RB [ \-bfiv ]
           22 +.RB [ \-bfinv ]
           23  .RB [ \-l
           24  .IR lines ]
           25  .RB [ \-m
           26 @@ -47,6 +47,9 @@ X until stdin reaches end\-of\-file.
           27  .B \-i
           28  dmenu matches menu items case insensitively.
           29  .TP
           30 +.B \-n
           31 +dmenu instantly selects if only one match.
           32 +.TP
           33  .BI \-l " lines"
           34  dmenu lists items vertically, with the given number of lines.
           35  .TP
           36 diff --git a/dmenu.c b/dmenu.c
           37 index d605ab4..2c2f03e 100644
           38 --- a/dmenu.c
           39 +++ b/dmenu.c
           40 @@ -260,6 +260,13 @@ match(void)
           41                  matchend = substrend;
           42          }
           43          curr = sel = matches;
           44 +
           45 +        if(instant && matches && matches==matchend && !lsubstr) {
           46 +                puts(matches->text);
           47 +                cleanup();
           48 +                exit(0);
           49 +        }
           50 +
           51          calcoffsets();
           52  }
           53  
           54 @@ -636,7 +643,7 @@ setup(void)
           55  static void
           56  usage(void)
           57  {
           58 -        fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
           59 +        fputs("usage: dmenu [-bfinv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
           60                "             [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr);
           61          exit(1);
           62  }
           63 @@ -659,7 +666,9 @@ main(int argc, char *argv[])
           64                  else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
           65                          fstrncmp = strncasecmp;
           66                          fstrstr = cistrstr;
           67 -                } else if (i + 1 == argc)
           68 +                } else if (!strcmp(argv[i], "-n")) /* instant select only match */
           69 +                        instant = 1;
           70 +                else if (i + 1 == argc)
           71                          usage();
           72                  /* these options take one argument */
           73                  else if (!strcmp(argv[i], "-l"))   /* number of lines in vertical list */