Introduction
Introduction Statistics Contact Development Disclaimer Help
dmenu-fuzzyhighlight-5.3.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dmenu-fuzzyhighlight-5.3.diff (4734B)
---
1 From dd0327d33a3c5269ed128e0903787365625bd507 Mon Sep 17 00:00:00 2001
2 From: Justinas Grigas <[email protected]>
3 Date: Sun, 16 Jun 2024 00:38:53 +0100
4 Subject: [PATCH] fuzzyhighlight: highlight fuzzy matches
5
6 This patch actually fixes the highlighted character offset
7 ---
8 config.def.h | 2 ++
9 dmenu.1 | 20 ++++++++++++++++++
10 dmenu.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++---
11 3 files changed, 76 insertions(+), 3 deletions(-)
12
13 diff --git a/config.def.h b/config.def.h
14 index 1edb647..64eab2a 100644
15 --- a/config.def.h
16 +++ b/config.def.h
17 @@ -11,6 +11,8 @@ static const char *colors[SchemeLast][2] = {
18 /* fg bg */
19 [SchemeNorm] = { "#bbbbbb", "#222222" },
20 [SchemeSel] = { "#eeeeee", "#005577" },
21 + [SchemeSelHighlight] = { "#ffc978", "#005577" },
22 + [SchemeNormHighlight] = { "#ffc978", "#222222" },
23 [SchemeOut] = { "#000000", "#00ffff" },
24 };
25 /* -l option; if nonzero, dmenu uses vertical list with given number of…
26 diff --git a/dmenu.1 b/dmenu.1
27 index 323f93c..472b179 100644
28 --- a/dmenu.1
29 +++ b/dmenu.1
30 @@ -20,6 +20,14 @@ dmenu \- dynamic menu
31 .IR color ]
32 .RB [ \-sf
33 .IR color ]
34 +.RB [ \-nhb
35 +.IR color ]
36 +.RB [ \-nhf
37 +.IR color ]
38 +.RB [ \-shb
39 +.IR color ]
40 +.RB [ \-shf
41 +.IR color ]
42 .RB [ \-w
43 .IR windowid ]
44 .P
45 @@ -75,6 +83,18 @@ defines the selected background color.
46 .BI \-sf " color"
47 defines the selected foreground color.
48 .TP
49 +.BI \-nhb " color"
50 +defines the normal highlight background color.
51 +.TP
52 +.BI \-nhf " color"
53 +defines the normal highlight foreground color.
54 +.TP
55 +.BI \-shb " color"
56 +defines the selected highlight background color.
57 +.TP
58 +.BI \-shf " color"
59 +defines the selected highlight foreground color.
60 +.TP
61 .B \-v
62 prints version information to stdout, then exits.
63 .TP
64 diff --git a/dmenu.c b/dmenu.c
65 index 40f93e0..662131a 100644
66 --- a/dmenu.c
67 +++ b/dmenu.c
68 @@ -25,7 +25,9 @@
69 #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
70
71 /* enums */
72 -enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes…
73 +enum { SchemeNorm, SchemeSel, SchemeNormHighlight, SchemeSelHighlight,
74 + SchemeOut, SchemeLast }; /* color schemes */
75 +
76
77 struct item {
78 char *text;
79 @@ -129,9 +131,47 @@ cistrstr(const char *h, const char *n)
80 return NULL;
81 }
82
83 +static void
84 +drawhighlights(struct item *item, int x, int y, int maxw)
85 +{
86 + int i, indent;
87 + char c, *highlight;
88 +
89 + if (!(strlen(item->text) && strlen(text)))
90 + return;
91 +
92 + drw_setscheme(drw, scheme[item == sel
93 + ? SchemeSelHighlight
94 + : SchemeNormHighlight]);
95 + for (i = 0, highlight = item->text; *highlight && text[i];) {
96 + if (!fstrncmp(highlight, &text[i], 1)) {
97 + /* get indentation */
98 + c = *highlight;
99 + *highlight = '\0';
100 + indent = TEXTW(item->text);
101 + *highlight = c;
102 +
103 + /* highlight character */
104 + c = highlight[1];
105 + highlight[1] = '\0';
106 + drw_text(
107 + drw,
108 + x + indent - (lrpad / 2.),
109 + y,
110 + MIN(maxw - indent, TEXTW(highlight) - l…
111 + bh, 0, highlight, 0
112 + );
113 + highlight[1] = c;
114 + ++i;
115 + }
116 + ++highlight;
117 + }
118 +}
119 +
120 static int
121 drawitem(struct item *item, int x, int y, int w)
122 {
123 + int r;
124 if (item == sel)
125 drw_setscheme(drw, scheme[SchemeSel]);
126 else if (item->out)
127 @@ -139,7 +179,9 @@ drawitem(struct item *item, int x, int y, int w)
128 else
129 drw_setscheme(drw, scheme[SchemeNorm]);
130
131 - return drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
132 + r = drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0);
133 + drawhighlights(item, x, y, w);
134 + return r;
135 }
136
137 static void
138 @@ -716,7 +758,8 @@ static void
139 usage(void)
140 {
141 die("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m…
142 - " [-nb color] [-nf color] [-sb color] [-sf colo…
143 + " [-nb color] [-nf color] [-sb color] [-sf colo…
144 + " [-nhb color] [-nhf color] [-shb color] [-shf …
145 }
146
147 int
148 @@ -756,6 +799,14 @@ main(int argc, char *argv[])
149 colors[SchemeSel][ColBg] = argv[++i];
150 else if (!strcmp(argv[i], "-sf")) /* selected foregrou…
151 colors[SchemeSel][ColFg] = argv[++i];
152 + else if (!strcmp(argv[i], "-nhb")) /* normal hi backgro…
153 + colors[SchemeNormHighlight][ColBg] = argv[++i];
154 + else if (!strcmp(argv[i], "-nhf")) /* normal hi foregro…
155 + colors[SchemeNormHighlight][ColFg] = argv[++i];
156 + else if (!strcmp(argv[i], "-shb")) /* selected hi backg…
157 + colors[SchemeSelHighlight][ColBg] = argv[++i];
158 + else if (!strcmp(argv[i], "-shf")) /* selected hi foreg…
159 + colors[SchemeSelHighlight][ColFg] = argv[++i];
160 else if (!strcmp(argv[i], "-w")) /* embedding window …
161 embed = argv[++i];
162 else
163 --
164 2.45.2
165
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.