Introduction
Introduction Statistics Contact Development Disclaimer Help
dmenu-highlight-4.9.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dmenu-highlight-4.9.diff (2959B)
---
1 From a06d0d3d7bbb3c0f5bad44934dbbf1e88e7d9558 Mon Sep 17 00:00:00 2001
2 From: Miles Alan <[email protected]>
3 Date: Sat, 4 Jul 2020 11:49:04 -0500
4 Subject: [PATCH] Highlight matched text in a different color scheme
5
6 ---
7 config.def.h | 2 ++
8 dmenu.c | 43 +++++++++++++++++++++++++++++++++++++++++--
9 2 files changed, 43 insertions(+), 2 deletions(-)
10
11 diff --git a/config.def.h b/config.def.h
12 index 1edb647..64eab2a 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -11,6 +11,8 @@ static const char *colors[SchemeLast][2] = {
16 /* fg bg */
17 [SchemeNorm] = { "#bbbbbb", "#222222" },
18 [SchemeSel] = { "#eeeeee", "#005577" },
19 + [SchemeSelHighlight] = { "#ffc978", "#005577" },
20 + [SchemeNormHighlight] = { "#ffc978", "#222222" },
21 [SchemeOut] = { "#000000", "#00ffff" },
22 };
23 /* -l option; if nonzero, dmenu uses vertical list with given number of…
24 diff --git a/dmenu.c b/dmenu.c
25 index 6b8f51b..d5e1991 100644
26 --- a/dmenu.c
27 +++ b/dmenu.c
28 @@ -26,7 +26,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, SchemeNormHighlight, SchemeSel…
34
35 struct item {
36 char *text;
37 @@ -113,6 +113,43 @@ cistrstr(const char *s, const char *sub)
38 return NULL;
39 }
40
41 +static void
42 +drawhighlights(struct item *item, int x, int y, int maxw)
43 +{
44 + char restorechar, tokens[sizeof text], *highlight, *token;
45 + int indentx, highlightlen;
46 +
47 + drw_setscheme(drw, scheme[item == sel ? SchemeSelHighlight : Sc…
48 + strcpy(tokens, text);
49 + for (token = strtok(tokens, " "); token; token = strtok(NULL, "…
50 + highlight = fstrstr(item->text, token);
51 + while (highlight) {
52 + // Move item str end, calc width for highlight …
53 + highlightlen = highlight - item->text;
54 + restorechar = *highlight;
55 + item->text[highlightlen] = '\0';
56 + indentx = TEXTW(item->text);
57 + item->text[highlightlen] = restorechar;
58 +
59 + // Move highlight str end, draw highlight, & re…
60 + restorechar = highlight[strlen(token)];
61 + highlight[strlen(token)] = '\0';
62 + if (indentx - (lrpad / 2) - 1 < maxw)
63 + drw_text(
64 + drw,
65 + x + indentx - (lrpad / 2) - 1,
66 + y,
67 + MIN(maxw - indentx, TEXTW(highl…
68 + bh, 0, highlight, 0
69 + );
70 + highlight[strlen(token)] = restorechar;
71 +
72 + if (strlen(highlight) - strlen(token) < strlen(…
73 + highlight = fstrstr(highlight + strlen(token), …
74 + }
75 + }
76 +}
77 +
78 static int
79 drawitem(struct item *item, int x, int y, int w)
80 {
81 @@ -123,7 +160,9 @@ drawitem(struct item *item, int x, int y, int w)
82 else
83 drw_setscheme(drw, scheme[SchemeNorm]);
84
85 - return drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
86 + int r = drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
87 + drawhighlights(item, x, y, w);
88 + return r;
89 }
90
91 static void
92 --
93 2.23.1
94
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.