sites

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

dmenu-instant-20160702-3c91eed.diff (2048B)


      1 diff --git a/config.def.h b/config.def.h
      2 index dcffd38..a42d28b 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 d3ab805..8806d4d 100644
     15 --- a/dmenu.1
     16 +++ b/dmenu.1
     17 @@ -6,6 +6,7 @@ dmenu \- dynamic menu
     18  .RB [ \-b ]
     19  .RB [ \-f ]
     20  .RB [ \-i ]
     21 +.RB [ \-n ]
     22  .RB [ \-l
     23  .RB [ \-m
     24  .IR monitor ]
     25 @@ -48,6 +49,9 @@ X until stdin reaches end\-of\-file.
     26  .B \-i
     27  dmenu matches menu items case insensitively.
     28  .TP
     29 +.B \-n
     30 +dmenu instantly selects if only one match.
     31 +.TP
     32  .BI \-l " lines"
     33  dmenu lists items vertically, with the given number of lines.
     34  .TP
     35 diff --git a/dmenu.c b/dmenu.c
     36 index e0c2f80..f079479 100644
     37 --- a/dmenu.c
     38 +++ b/dmenu.c
     39 @@ -250,6 +250,13 @@ match(void)
     40  		matchend = substrend;
     41  	}
     42  	curr = sel = matches;
     43 +
     44 +	if(instant && matches && matches==matchend && !lsubstr) {
     45 +		puts(matches->text);
     46 +		cleanup();
     47 +		exit(0);
     48 +	}
     49 +
     50  	calcoffsets();
     51  }
     52  
     53 @@ -610,7 +617,7 @@ setup(void)
     54  static void
     55  usage(void)
     56  {
     57 -	fputs("usage: dmenu [-b] [-f] [-i] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
     58 +	fputs("usage: dmenu [-b] [-f] [-i] [-n] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
     59  	      "             [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr);
     60  	exit(1);
     61  }
     62 @@ -632,7 +639,9 @@ main(int argc, char *argv[])
     63  		else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
     64  			fstrncmp = strncasecmp;
     65  			fstrstr = cistrstr;
     66 -		} else if (i + 1 == argc)
     67 +    } else if (!strcmp(argv[i], "-n")) /* instant select only match */
     68 +			instant = 1;
     69 +		else if (i + 1 == argc)
     70  			usage();
     71  		/* these options take one argument */
     72  		else if (!strcmp(argv[i], "-l"))   /* number of lines in vertical list */