sites

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

dmenu-inlinePrompt-20250821-d893c63.diff (2448B)


      1 From 5a2f518818431f74f291facf2c5503735b85e5a9 Mon Sep 17 00:00:00 2001
      2 From: Daan Blom <contact@daanblom.com>
      3 Date: Thu, 21 Aug 2025 12:13:03 +0200
      4 Subject: [PATCH] Show prompt as placeholder inside input field instead of
      5  before it
      6 
      7 ---
      8  config.def.h |  1 +
      9  dmenu.c      | 25 ++++++++++++++-----------
     10  2 files changed, 15 insertions(+), 11 deletions(-)
     11 
     12 diff --git a/config.def.h b/config.def.h
     13 index 1edb647..c4c8b72 100644
     14 --- a/config.def.h
     15 +++ b/config.def.h
     16 @@ -12,6 +12,7 @@ static const char *colors[SchemeLast][2] = {
     17  	[SchemeNorm] = { "#bbbbbb", "#222222" },
     18  	[SchemeSel] = { "#eeeeee", "#005577" },
     19  	[SchemeOut] = { "#000000", "#00ffff" },
     20 +	[SchemePrompt] = { "#444444", "#222222" },
     21  };
     22  /* -l option; if nonzero, dmenu uses vertical list with given number of lines */
     23  static unsigned int lines      = 0;
     24 diff --git a/dmenu.c b/dmenu.c
     25 index fd49549..a58a28b 100644
     26 --- a/dmenu.c
     27 +++ b/dmenu.c
     28 @@ -25,7 +25,7 @@
     29  #define TEXTW(X)              (drw_fontset_getwidth(drw, (X)) + lrpad)
     30  
     31  /* enums */
     32 -enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */
     33 +enum { SchemeNorm, SchemeSel, SchemeOut, SchemePrompt, SchemeLast }; /* color schemes */
     34  
     35  struct item {
     36  	char *text;
     37 @@ -152,21 +152,24 @@ drawmenu(void)
     38  	drw_setscheme(drw, scheme[SchemeNorm]);
     39  	drw_rect(drw, 0, 0, mw, mh, 1, 1);
     40  
     41 -	if (prompt && *prompt) {
     42 -		drw_setscheme(drw, scheme[SchemeSel]);
     43 -		x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0);
     44 -	}
     45 -	/* draw input field */
     46  	w = (lines > 0 || !matches) ? mw - x : inputw;
     47 -	drw_setscheme(drw, scheme[SchemeNorm]);
     48 -	drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
     49  
     50 -	curpos = TEXTW(text) - TEXTW(&text[cursor]);
     51 -	if ((curpos += lrpad / 2 - 1) < w) {
     52 +	if (text[0] == '\0' && prompt && *prompt) {
     53 +		drw_setscheme(drw, scheme[SchemePrompt]);
     54 +		/* If vertical list: use full width (w), else just promptw */
     55 +		drw_text(drw, x, 0, (lines > 0 ? w : promptw), bh, lrpad / 2, prompt, 0);
     56 +	} else {
     57  		drw_setscheme(drw, scheme[SchemeNorm]);
     58 -		drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0);
     59 +		drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
     60  	}
     61  
     62 +	if (text[0] != '\0') {
     63 +		curpos = TEXTW(text) - TEXTW(&text[cursor]);
     64 +		if ((curpos += lrpad / 2 - 1) < w) {
     65 +			drw_setscheme(drw, scheme[SchemeNorm]);
     66 +			drw_rect(drw, x + curpos, 1, 2, bh - 4, 1, 0);
     67 +		}
     68 +	}
     69  	if (lines > 0) {
     70  		/* draw vertical list */
     71  		for (item = curr; item != next; item = item->right)
     72 -- 
     73 2.50.1
     74