dmenu-numbers-20220512-28fb3e2.diff - sites - public wiki contents of suckless.… | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dmenu-numbers-20220512-28fb3e2.diff (2804B) | |
--- | |
1 From c4cd209c2e322563750d09a3b64194d11cc12a10 Mon Sep 17 00:00:00 2001 | |
2 From: Ehsan Ghorbannezhad <[email protected]> | |
3 Date: Thu, 12 May 2022 22:32:47 +0430 | |
4 Subject: [PATCH] the numbers patch, updated to fix segfault in some cond… | |
5 | |
6 --- | |
7 dmenu.c | 27 ++++++++++++++++++++++++--- | |
8 1 file changed, 24 insertions(+), 3 deletions(-) | |
9 | |
10 diff --git a/dmenu.c b/dmenu.c | |
11 index 571bc35..70004e7 100644 | |
12 --- a/dmenu.c | |
13 +++ b/dmenu.c | |
14 @@ -24,6 +24,8 @@ | |
15 * MAX(0, MIN((y)+(h),(r).y_org+(r).height)… | |
16 #define LENGTH(X) (sizeof X / sizeof X[0]) | |
17 #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) | |
18 +#define NUMBERSMAXDIGITS 100 | |
19 +#define NUMBERSBUFSIZE (NUMBERSMAXDIGITS * 2) + 1 | |
20 | |
21 /* enums */ | |
22 enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes… | |
23 @@ -34,6 +36,7 @@ struct item { | |
24 int out; | |
25 }; | |
26 | |
27 +static char numbers[NUMBERSBUFSIZE] = ""; | |
28 static char text[BUFSIZ] = ""; | |
29 static char *embed; | |
30 static int bh, mw, mh; | |
31 @@ -86,7 +89,7 @@ calcoffsets(void) | |
32 if (lines > 0) | |
33 n = lines * bh; | |
34 else | |
35 - n = mw - (promptw + inputw + TEXTW("<") + TEXTW(">")); | |
36 + n = mw - (promptw + inputw + TEXTW("<") + TEXTW(">") + … | |
37 /* calculate which items will begin the next page and previous … | |
38 for (i = 0, next = curr; next; next = next->right) | |
39 if ((i += (lines > 0) ? bh : textw_clamp(next->text, n)… | |
40 @@ -143,6 +146,21 @@ drawitem(struct item *item, int x, int y, int w) | |
41 return drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0); | |
42 } | |
43 | |
44 +static void | |
45 +recalculatenumbers() | |
46 +{ | |
47 + unsigned int numer = 0, denom = 0; | |
48 + struct item *item; | |
49 + if (matchend) { | |
50 + numer++; | |
51 + for (item = matchend; item && item->left; item = item->… | |
52 + numer++; | |
53 + } | |
54 + for (item = items; item && item->text; item++) | |
55 + denom++; | |
56 + snprintf(numbers, NUMBERSBUFSIZE, "%d/%d", numer, denom); | |
57 +} | |
58 + | |
59 static void | |
60 drawmenu(void) | |
61 { | |
62 @@ -168,6 +186,7 @@ drawmenu(void) | |
63 drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0); | |
64 } | |
65 | |
66 + recalculatenumbers(); | |
67 if (lines > 0) { | |
68 /* draw vertical list */ | |
69 for (item = curr; item != next; item = item->right) | |
70 @@ -182,13 +201,15 @@ drawmenu(void) | |
71 } | |
72 x += w; | |
73 for (item = curr; item != next; item = item->right) | |
74 - x = drawitem(item, x, 0, textw_clamp(item->text… | |
75 + x = drawitem(item, x, 0, textw_clamp(item->text… | |
76 if (next) { | |
77 w = TEXTW(">"); | |
78 drw_setscheme(drw, scheme[SchemeNorm]); | |
79 - drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">",… | |
80 + drw_text(drw, mw - w - TEXTW(numbers), 0, w, bh… | |
81 } | |
82 } | |
83 + drw_setscheme(drw, scheme[SchemeNorm]); | |
84 + drw_text(drw, mw - TEXTW(numbers), 0, TEXTW(numbers), bh, lrpad… | |
85 drw_map(drw, win, 0, 0, mw, mh); | |
86 } | |
87 | |
88 -- | |
89 2.36.1 |