sites

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

dmenu-instant-4.6.diff (2097B)


      1 From e95c945f9a6afe486782962dfe2dd81c00c05781 Mon Sep 17 00:00:00 2001
      2 From: Hiltjo Posthuma <hiltjo@codemadness.org>
      3 Date: Fri, 17 Jun 2016 13:24:21 +0200
      4 Subject: [PATCH] dmenu instant match: end dmenu immediately if there is one
      5  match left.
      6 
      7 ---
      8  config.def.h | 1 +
      9  dmenu.1      | 4 ++++
     10  dmenu.c      | 7 +++++++
     11  3 files changed, 12 insertions(+)
     12 
     13 diff --git a/config.def.h b/config.def.h
     14 index dcffd38..b06f1d5 100644
     15 --- a/config.def.h
     16 +++ b/config.def.h
     17 @@ -2,6 +2,7 @@
     18  /* Default settings; can be overriden by command line. */
     19  
     20  static int topbar = 1;                      /* -b  option; if 0, dmenu appears at bottom     */
     21 +static int instant = 0;                     /* -n  option; if 1, dmenu ends immediately on a distinct match */
     22  /* -fn option overrides fonts[0]; default X11 font or font set */
     23  static const char *fonts[] = {
     24  	"monospace:size=10"
     25 diff --git a/dmenu.1 b/dmenu.1
     26 index d3ab805..f0aa123 100644
     27 --- a/dmenu.1
     28 +++ b/dmenu.1
     29 @@ -10,6 +10,7 @@ dmenu \- dynamic menu
     30  .RB [ \-m
     31  .IR monitor ]
     32  .IR lines ]
     33 +.RB [ \-n ]
     34  .RB [ \-p
     35  .IR prompt ]
     36  .RB [ \-fn
     37 @@ -55,6 +56,9 @@ dmenu lists items vertically, with the given number of lines.
     38  dmenu is displayed on the monitor number supplied. Monitor numbers are starting
     39  from 0.
     40  .TP
     41 +.BI \-n
     42 +instant match, end dmenu if there is only one match left.
     43 +.TP
     44  .BI \-p " prompt"
     45  defines the prompt to be displayed to the left of the input field.
     46  .TP
     47 diff --git a/dmenu.c b/dmenu.c
     48 index e0c2f80..0c41d46 100644
     49 --- a/dmenu.c
     50 +++ b/dmenu.c
     51 @@ -250,6 +250,11 @@ match(void)
     52  		matchend = substrend;
     53  	}
     54  	curr = sel = matches;
     55 +	if (instant && matches && matches == matchend && !lsubstr) {
     56 +		puts(matches->text);
     57 +		cleanup();
     58 +		exit(0);
     59 +	}
     60  	calcoffsets();
     61  }
     62  
     63 @@ -632,6 +637,8 @@ 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 (!strcmp(argv[i], "-n")) { /* instant match */
     68 +			instant = !instant;
     69  		} else if (i + 1 == argc)
     70  			usage();
     71  		/* these options take one argument */
     72 -- 
     73 2.8.3
     74