diff options
author | Quentin Rameau <quinq@fifth.space> | 2016-07-26 12:48:23 +0200 |
---|---|---|
committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2016-07-26 18:29:42 +0200 |
commit | a4053bc4e403ae57343f43b7e363a0911bba5a3a (patch) | |
tree | a059b7f413201432bb3e663a6946be80326fce60 | |
parent | 657122f7819fd74d66706ffb607deb44884401b7 (diff) |
Print highlighted input text only on single match
When the input text fully matches a single item, do not draw the item
and highlight the input text to show that it matches an item in
opposition to regular input text not matching anything.
-rw-r--r-- | dmenu.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -130,7 +130,7 @@ drawmenu(void) | |||
130 | { | 130 | { |
131 | unsigned int curpos; | 131 | unsigned int curpos; |
132 | struct item *item; | 132 | struct item *item; |
133 | int x = 0, y = 0, w; | 133 | int x = 0, y = 0, w, inputscheme; |
134 | 134 | ||
135 | drw_setscheme(drw, scheme[SchemeNorm]); | 135 | drw_setscheme(drw, scheme[SchemeNorm]); |
136 | drw_rect(drw, 0, 0, mw, mh, 1, 1); | 136 | drw_rect(drw, 0, 0, mw, mh, 1, 1); |
@@ -138,18 +138,27 @@ drawmenu(void) | |||
138 | if (prompt && *prompt) { | 138 | if (prompt && *prompt) { |
139 | drw_setscheme(drw, scheme[SchemeSel]); | 139 | drw_setscheme(drw, scheme[SchemeSel]); |
140 | x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0); | 140 | x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0); |
141 | x += 2; | ||
141 | } | 142 | } |
142 | /* draw input field */ | 143 | /* draw input field */ |
143 | w = (lines > 0 || !matches) ? mw - x : inputw; | 144 | w = (lines > 0 || !matches) ? mw - x : inputw; |
144 | drw_setscheme(drw, scheme[SchemeNorm]); | 145 | if (matches && !strcmp(text, curr->text)) |
146 | inputscheme = SchemeSel; | ||
147 | else | ||
148 | inputscheme = SchemeNorm; | ||
149 | drw_setscheme(drw, scheme[inputscheme]); | ||
150 | |||
145 | drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); | 151 | drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); |
146 | 152 | ||
147 | drw_font_getexts(drw->fonts, text, cursor, &curpos, NULL); | 153 | drw_font_getexts(drw->fonts, text, cursor, &curpos, NULL); |
148 | if ((curpos += lrpad / 2 - 1) < w) { | 154 | if ((curpos += lrpad / 2 - 1) < w) { |
149 | drw_setscheme(drw, scheme[SchemeNorm]); | 155 | drw_setscheme(drw, scheme[inputscheme]); |
150 | drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0); | 156 | drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0); |
151 | } | 157 | } |
152 | 158 | ||
159 | if (inputscheme == SchemeSel) | ||
160 | goto drawmap; | ||
161 | |||
153 | if (lines > 0) { | 162 | if (lines > 0) { |
154 | /* draw vertical list */ | 163 | /* draw vertical list */ |
155 | for (item = curr; item != next; item = item->right) | 164 | for (item = curr; item != next; item = item->right) |
@@ -171,6 +180,7 @@ drawmenu(void) | |||
171 | drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0); | 180 | drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0); |
172 | } | 181 | } |
173 | } | 182 | } |
183 | drawmap: | ||
174 | drw_map(drw, win, 0, 0, mw, mh); | 184 | drw_map(drw, win, 0, 0, mw, mh); |
175 | } | 185 | } |
176 | 186 | ||