dmenu

My dmenu build
git clone https://git.regexghost.com/dmenu.git
Log | Files | Refs | README | LICENSE

commit 8c610619248985832a141e670b42cfd1b090d45f
parent ba36bbcd2cce2e0a4cab68885d672d72c966861b
Author: regexghost <regexghost@protonmail.com>
Date:   Thu, 23 Apr 2026 09:06:54 +0100

inline prompt patch, hopefully working as patch was manually applied

Diffstat:
Mconfig.def.h | 1+
Mdmenu.c | 30++++++++++++++++++------------
2 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/config.def.h b/config.def.h @@ -22,6 +22,7 @@ static const char *colors[SchemeLast][2] = { [SchemeOut] = { "#000000", "#00ffff" }, [SchemeCaret] = { "#eeeeee", "#222222" }, [SchemeCursor] = { "#222222", "#bbbbbb"}, + [SchemePrompt] = { "#444444", "#222222" }, }; /* -l option; if nonzero, dmenu uses vertical list with given number of lines */ static unsigned int lines = 0; diff --git a/dmenu.c b/dmenu.c @@ -27,7 +27,7 @@ /* enums */ enum { SchemeNorm, SchemeSel, SchemeNormHighlight, SchemeSelHighlight, - SchemeOut, SchemeCaret, SchemeCursor, SchemeLast }; /* color schemes */ + SchemeOut, SchemeCaret, SchemeCursor, SchemePrompt, SchemeLast }; /* color schemes */ struct item { @@ -214,27 +214,33 @@ drawmenu(void) drw_setscheme(drw, scheme[SchemeNorm]); drw_rect(drw, 0, 0, mw, mh, 1, 1); - if (prompt && *prompt) { - drw_setscheme(drw, scheme[SchemeSel]); - x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0); - } - /* draw input field */ w = (lines > 0 || !matches) ? mw - x : inputw; - drw_setscheme(drw, scheme[SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); curpos = TEXTW(text) - TEXTW(&text[cursor]); curpos += lrpad / 2 - 1; - if (using_vi_mode && text[0] != '\0') { + + if (text[0] == '\0' && prompt && *prompt) { + drw_setscheme(drw, scheme[SchemePrompt]); + /* If vertical list: use full width (w), else just promptw */ + drw_text(drw, x, 0, (lines > 0 ? w : promptw), bh, lrpad / 2, prompt, 0); + } else if (using_vi_mode && text[0] != '\0') { drw_setscheme(drw, scheme[SchemeCursor]); char vi_char[] = {text[cursor], '\0'}; - drw_text(drw, x + curpos, 0, TEXTW(vi_char) - lrpad, bh, 0, vi_char, 0); + drw_text(drw, x, 0, TEXTW(vi_char) - lrpad, bh, 0, vi_char, 0); } else if (using_vi_mode) { drw_setscheme(drw, scheme[SchemeNorm]); - drw_rect(drw, x + curpos, 2, lrpad / 2, bh - 4, 1, 0); + drw_rect(drw, x, 2, lrpad / 2, bh - 4, 1, 0); } else if (curpos < w) { drw_setscheme(drw, scheme[SchemeCaret]); - drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0); + drw_rect(drw, x, 2, 2, bh - 4, 1, 0); + } + + if (text[0] != '\0') { + curpos = TEXTW(text) - TEXTW(&text[cursor]); + if ((curpos += lrpad / 2 - 1) < w) { + drw_setscheme(drw, scheme[SchemeNorm]); + drw_rect(drw, x + curpos, 1, 2, bh - 4, 1, 0); + } } if (lines > 0) {