dmenu

dynamic menu
git clone git://mfeller.io/dmenu.git
Log | Files | Refs | README | LICENSE

commit 21df075a319c4bfd722471fbcb0750c6ebc3e680
parent 5e85d8234c0164c2dd768aa63040286fac9304ec
Author: Mark Feller <mfeller@recurly.com>
Date:   Fri, 20 Mar 2020 19:48:18 -0600

Add line hieght patch

Signed-off-by: Mark Feller <mfeller@recurly.com>

Diffstat:
Mconfig.def.h | 11++++++-----
Mdmenu.1 | 3+++
Mdmenu.c | 10++++++++--
3 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/config.def.h b/config.def.h @@ -6,17 +6,18 @@ static int centered = 0; /* -c option; centers dmenu on scree static int min_width = 500; /* minimum width when centered */ /* -fn option overrides fonts[0]; default X11 font or font set */ static const char *fonts[] = { - "monospace:size=10" + "Fira Mono:size=11" }; static const char *prompt = NULL; /* -p option; prompt to the left of input field */ static const char *colors[SchemeLast][2] = { /* fg bg */ - [SchemeNorm] = { "#bbbbbb", "#222222" }, - [SchemeSel] = { "#eeeeee", "#005577" }, - [SchemeOut] = { "#000000", "#00ffff" }, + [SchemeNorm] = { "#ebdbb2", "#161819" }, + [SchemeSel] = { "#268bd2", "#1d2021" }, + [SchemeOut] = { "#000000", "#161819" }, }; /* -l option; if nonzero, dmenu uses vertical list with given number of lines */ static unsigned int lines = 0; +static unsigned int lineheight = 25; /* -h option; minimum height of a menu line */ /* * Characters not considered part of a word while deleting words @@ -25,4 +26,4 @@ static unsigned int lines = 0; static const char worddelimiters[] = " "; /* Size of the window border */ -static unsigned int border_width = 0; +static unsigned int border_width = 3; diff --git a/dmenu.1 b/dmenu.1 @@ -53,6 +53,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 @@ -140,7 +140,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); @@ -157,7 +157,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, bh - 4, 1, 0); } if (lines > 0) { @@ -629,6 +629,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; @@ -726,6 +727,7 @@ static void usage(void) { fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" + " [-h height]\n" " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); exit(1); } @@ -761,6 +763,10 @@ main(int argc, char *argv[]) prompt = argv[++i]; else if (!strcmp(argv[i], "-fn")) /* font or font set */ fonts[0] = argv[++i]; + else if(!strcmp(argv[i], "-h")) { /* minimum height of one menu line */ + lineheight = atoi(argv[++i]); + lineheight = MAX(lineheight,8); /* reasonable default in case of value too small/negative */ + } else if (!strcmp(argv[i], "-nb")) /* normal background color */ colors[SchemeNorm][ColBg] = argv[++i]; else if (!strcmp(argv[i], "-nf")) /* normal foreground color */