Introduction
Introduction Statistics Contact Development Disclaimer Help
dmenu-highlight-20201211-fcdc159.diff - sites - public wiki contents of suckles…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dmenu-highlight-20201211-fcdc159.diff (3148B)
---
1 From fcdc1593ed418166f20b7e691a49b1e6eefc116e Mon Sep 17 00:00:00 2001
2 From: Nathaniel Evan <[email protected]>
3 Date: Fri, 11 Dec 2020 11:08:12 +0700
4 Subject: [PATCH] Highlight matched text in a different color scheme
5
6 ---
7 config.def.h | 3 +++
8 dmenu.c | 44 +++++++++++++++++++++++++++++++++++++++++---
9 2 files changed, 44 insertions(+), 3 deletions(-)
10
11 diff --git a/config.def.h b/config.def.h
12 index 1edb647..79be73a 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -11,7 +11,10 @@ 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 + [SchemeOutHighlight] = { "#ffc978", "#00ffff" },
23 };
24 /* -l option; if nonzero, dmenu uses vertical list with given number of…
25 static unsigned int lines = 0;
26 diff --git a/dmenu.c b/dmenu.c
27 index 65f25ce..cce1ad1 100644
28 --- a/dmenu.c
29 +++ b/dmenu.c
30 @@ -26,8 +26,7 @@
31 #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
32
33 /* enums */
34 -enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes…
35 -
36 +enum { SchemeNorm, SchemeSel, SchemeOut, SchemeNormHighlight, SchemeSel…
37 struct item {
38 char *text;
39 struct item *left, *right;
40 @@ -113,6 +112,43 @@ cistrstr(const char *s, const char *sub)
41 return NULL;
42 }
43
44 +static void
45 +drawhighlights(struct item *item, int x, int y, int maxw)
46 +{
47 + char restorechar, tokens[sizeof text], *highlight, *token;
48 + int indentx, highlightlen;
49 +
50 + drw_setscheme(drw, scheme[item == sel ? SchemeSelHighlight : it…
51 + strcpy(tokens, text);
52 + for (token = strtok(tokens, " "); token; token = strtok(NULL, "…
53 + highlight = fstrstr(item->text, token);
54 + while (highlight) {
55 + // Move item str end, calc width for highlight …
56 + highlightlen = highlight - item->text;
57 + restorechar = *highlight;
58 + item->text[highlightlen] = '\0';
59 + indentx = TEXTW(item->text);
60 + item->text[highlightlen] = restorechar;
61 +
62 + // Move highlight str end, draw highlight, & re…
63 + restorechar = highlight[strlen(token)];
64 + highlight[strlen(token)] = '\0';
65 + if (indentx - (lrpad / 2) - 1 < maxw)
66 + drw_text(
67 + drw,
68 + x + indentx - (lrpad / 2) - 1,
69 + y,
70 + MIN(maxw - indentx, TEXTW(highl…
71 + bh, 0, highlight, 0
72 + );
73 + highlight[strlen(token)] = restorechar;
74 +
75 + if (strlen(highlight) - strlen(token) < strlen(…
76 + highlight = fstrstr(highlight + strlen(token), …
77 + }
78 + }
79 +}
80 +
81 static int
82 drawitem(struct item *item, int x, int y, int w)
83 {
84 @@ -123,7 +159,9 @@ drawitem(struct item *item, int x, int y, int w)
85 else
86 drw_setscheme(drw, scheme[SchemeNorm]);
87
88 - return drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
89 + int r = drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
90 + drawhighlights(item, x, y, w);
91 + return r;
92 }
93
94 static void
95 --
96 2.29.2
97
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.