diff options
| -rw-r--r-- | config.def.h | 3 | ||||
| -rw-r--r-- | dmenu.1 | 5 | ||||
| -rw-r--r-- | dmenu.c | 11 | ||||
| -rw-r--r-- | patches/dmenu-lineheight-5.2.diff | 106 | 
4 files changed, 122 insertions, 3 deletions
diff --git a/config.def.h b/config.def.h index b7bff67..91bda10 100644 --- a/config.def.h +++ b/config.def.h @@ -20,6 +20,9 @@ static const char *colors[SchemeLast][2] = {  };  /* -l option; if nonzero, dmenu uses vertical list with given number of lines */  static unsigned int lines      = 0; +/* -h option; minimum height of a menu line */ +static unsigned int lineheight = 0; +static unsigned int min_lineheight = 8;  /*   * Characters not considered part of a word while deleting words @@ -6,6 +6,8 @@ dmenu \- dynamic menu  .RB [ \-bfiv ]  .RB [ \-l  .IR lines ] +.RB [ \-h +.IR height ]  .RB [ \-m  .IR monitor ]  .RB [ \-p @@ -65,6 +67,9 @@ dmenu matches menu items case insensitively.  .BI \-l " lines"  dmenu lists items vertically, with the given number of lines.  .TP +.BI \-h " height" +dmenu uses a menu line of at least 'height' pixels tall, but no less than 8. +.TP  .BI \-m " monitor"  dmenu is displayed on the monitor number supplied. Monitor numbers are starting  from 0. @@ -204,7 +204,7 @@ drawmenu(void)  {  	unsigned int curpos;  	struct item *item; -	int x = 0, y = 0, w; +	int x = 0, y = 0, fh = drw->fonts->h, w;  	drw_setscheme(drw, scheme[SchemeNorm]);  	drw_rect(drw, 0, 0, mw, mh, 1, 1); @@ -221,7 +221,7 @@ drawmenu(void)  	curpos = TEXTW(text) - TEXTW(&text[cursor]);  	if ((curpos += lrpad / 2 - 1) < w) {  		drw_setscheme(drw, scheme[SchemeNorm]); -		drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0); +		drw_rect(drw, x + curpos, 2 + (bh - fh) / 2, 2, fh - 4, 1, 0);  	}  	if (lines > 0) { @@ -784,6 +784,7 @@ setup(void)  	/* calculate menu geometry */  	bh = drw->fonts->h + 2; +	bh = MAX(bh,lineheight);	/* make a menu line AT LEAST 'lineheight' tall */  	lines = MAX(lines, 0);  	mh = (lines + 1) * bh;  	promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0; @@ -884,7 +885,7 @@ usage(void)  	die("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"  	    "             [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n"              "             [-nhb color] [-nhf color] [-shb color] [-shf color]\n" -	    "             [-d separator] [-D separator]"); +	    "             [-d separator] [-D separator] [-h height]");  }  int @@ -914,6 +915,10 @@ main(int argc, char *argv[])  		/* these options take one argument */  		else if (!strcmp(argv[i], "-l"))   /* number of lines in vertical list */  			lines = atoi(argv[++i]); +		else if (!strcmp(argv[i], "-h")) { /* minimum height of one menu line */ +			lineheight = atoi(argv[++i]); +			lineheight = MAX(lineheight, min_lineheight); +		}  		else if (!strcmp(argv[i], "-m"))  			mon = atoi(argv[++i]);  		else if (!strcmp(argv[i], "-p"))   /* adds prompt to left of input field */ diff --git a/patches/dmenu-lineheight-5.2.diff b/patches/dmenu-lineheight-5.2.diff new file mode 100644 index 0000000..a5e8468 --- /dev/null +++ b/patches/dmenu-lineheight-5.2.diff @@ -0,0 +1,106 @@ +From ba103e38ea4ab07f9a3ee90627714b9bea17c329 Mon Sep 17 00:00:00 2001 +From: pskry <peter@skrypalle.dk> +Date: Sun, 8 Nov 2020 22:04:22 +0100 +Subject: [PATCH] Add an option which defines the lineheight + +Despite both the panel and dmenu using the same font (a Terminus 12), +dmenu is shorter and the panel is visible from under the dmenu bar. +The appearance can be even more distracting when using similar colors +for background and selections. With the option added by this patch, +dmenu can be launched with a '-h 24', thus completely covering the panel. +--- + config.def.h |  3 +++ + dmenu.1      |  5 +++++ + dmenu.c      | 11 ++++++++--- + 3 files changed, 16 insertions(+), 3 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 1edb647..4394dec 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -15,6 +15,9 @@ static const char *colors[SchemeLast][2] = { + }; + /* -l option; if nonzero, dmenu uses vertical list with given number of lines */ + static unsigned int lines      = 0; ++/* -h option; minimum height of a menu line */ ++static unsigned int lineheight = 0; ++static unsigned int min_lineheight = 8; +  + /* +  * Characters not considered part of a word while deleting words +diff --git a/dmenu.1 b/dmenu.1 +index 323f93c..f2a82b4 100644 +--- a/dmenu.1 ++++ b/dmenu.1 +@@ -6,6 +6,8 @@ dmenu \- dynamic menu + .RB [ \-bfiv ] + .RB [ \-l + .IR lines ] ++.RB [ \-h ++.IR height ] + .RB [ \-m + .IR monitor ] + .RB [ \-p +@@ -50,6 +52,9 @@ dmenu matches menu items case insensitively. + .BI \-l " lines" + dmenu lists items vertically, with the given number of lines. + .TP ++.BI \-h " height" ++dmenu uses a menu line of at least 'height' pixels tall, but no less than 8. ++.TP + .BI \-m " monitor" + dmenu is displayed on the monitor number supplied. Monitor numbers are starting + from 0. +diff --git a/dmenu.c b/dmenu.c +index e7be8af..82b204b 100644 +--- a/dmenu.c ++++ b/dmenu.c +@@ -148,7 +148,7 @@ drawmenu(void) + { + 	unsigned int curpos; + 	struct item *item; +-	int x = 0, y = 0, w; ++	int x = 0, y = 0, fh = drw->fonts->h, w; +  + 	drw_setscheme(drw, scheme[SchemeNorm]); + 	drw_rect(drw, 0, 0, mw, mh, 1, 1); +@@ -165,7 +165,7 @@ drawmenu(void) + 	curpos = TEXTW(text) - TEXTW(&text[cursor]); + 	if ((curpos += lrpad / 2 - 1) < w) { + 		drw_setscheme(drw, scheme[SchemeNorm]); +-		drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0); ++		drw_rect(drw, x + curpos, 2 + (bh - fh) / 2, 2, fh - 4, 1, 0); + 	} +  + 	if (lines > 0) { +@@ -630,6 +630,7 @@ setup(void) +  + 	/* calculate menu geometry */ + 	bh = drw->fonts->h + 2; ++	bh = MAX(bh,lineheight);	/* make a menu line AT LEAST 'lineheight' tall */ + 	lines = MAX(lines, 0); + 	mh = (lines + 1) * bh; + #ifdef XINERAMA +@@ -710,7 +711,7 @@ setup(void) + static void + usage(void) + { +-	die("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" ++	die("usage: dmenu [-bfiv] [-l lines] [-h height] [-p prompt] [-fn font] [-m monitor]\n" + 	    "             [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]"); + } +  +@@ -737,6 +738,10 @@ main(int argc, char *argv[]) + 		/* these options take one argument */ + 		else if (!strcmp(argv[i], "-l"))   /* number of lines in vertical list */ + 			lines = atoi(argv[++i]); ++		else if (!strcmp(argv[i], "-h")) { /* minimum height of one menu line */ ++			lineheight = atoi(argv[++i]); ++			lineheight = MAX(lineheight, min_lineheight); ++		} + 		else if (!strcmp(argv[i], "-m")) + 			mon = atoi(argv[++i]); + 		else if (!strcmp(argv[i], "-p"))   /* adds prompt to left of input field */ +--  +2.38.1 +  | 
