Introduction
Introduction Statistics Contact Development Disclaimer Help
dmenu-center-20240616-36c3d68.diff - sites - public wiki contents of suckless.o…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dmenu-center-20240616-36c3d68.diff (3640B)
---
1 From 36c3d68f185f47cbb754569775b7888728be4711 Mon Sep 17 00:00:00 2001
2 From: elbachir-one <[email protected]>
3 Date: Sun, 16 Jun 2024 21:28:41 +0100
4 Subject: [PATCH] Adding an option to change the height as well
5
6 ---
7 config.def.h | 3 +++
8 dmenu.1 | 3 +++
9 dmenu.c | 38 ++++++++++++++++++++++++++++++++------
10 3 files changed, 38 insertions(+), 6 deletions(-)
11
12 diff --git a/config.def.h b/config.def.h
13 index 1edb647..832896f 100644
14 --- a/config.def.h
15 +++ b/config.def.h
16 @@ -2,6 +2,9 @@
17 /* Default settings; can be overriden by command line. */
18
19 static int topbar = 1; /* -b option; if 0, dmenu …
20 +static int centered = 1; /* -c option; centers dmenu…
21 +static int min_width = 500; /* minimum width when ce…
22 +static const float menu_height_ratio = 4.0f; /* This is the ratio used…
23 /* -fn option overrides fonts[0]; default X11 font or font set */
24 static const char *fonts[] = {
25 "monospace:size=10"
26 diff --git a/dmenu.1 b/dmenu.1
27 index 323f93c..c036baa 100644
28 --- a/dmenu.1
29 +++ b/dmenu.1
30 @@ -40,6 +40,9 @@ which lists programs in the user's $PATH and runs the …
31 .B \-b
32 dmenu appears at the bottom of the screen.
33 .TP
34 +.B \-c
35 +dmenu appears centered on the screen.
36 +.TP
37 .B \-f
38 dmenu grabs the keyboard before reading stdin if not reading from a tty…
39 is faster, but will lock up X until stdin reaches end\-of\-file.
40 diff --git a/dmenu.c b/dmenu.c
41 index 40f93e0..32d6a9d 100644
42 --- a/dmenu.c
43 +++ b/dmenu.c
44 @@ -95,6 +95,15 @@ calcoffsets(void)
45 break;
46 }
47
48 +static int
49 +max_textw(void)
50 +{
51 + int len = 0;
52 + for (struct item *item = items; item && item->text; item++)
53 + len = MAX(TEXTW(item->text), len);
54 + return len;
55 +}
56 +
57 static void
58 cleanup(void)
59 {
60 @@ -636,6 +645,7 @@ setup(void)
61 bh = drw->fonts->h + 2;
62 lines = MAX(lines, 0);
63 mh = (lines + 1) * bh;
64 + promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
65 #ifdef XINERAMA
66 i = 0;
67 if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))…
68 @@ -662,9 +672,16 @@ setup(void)
69 if (INTERSECT(x, y, 1, 1, info[i]) != 0)
70 break;
71
72 - x = info[i].x_org;
73 - y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
74 - mw = info[i].width;
75 + if (centered) {
76 + mw = MIN(MAX(max_textw() + promptw, min_width),…
77 + x = info[i].x_org + ((info[i].width - mw) / 2);
78 + y = info[i].y_org + ((info[i].height - mh) / me…
79 + } else {
80 + x = info[i].x_org;
81 + y = info[i].y_org + (topbar ? 0 : info[i].heigh…
82 + mw = info[i].width;
83 + }
84 +
85 XFree(info);
86 } else
87 #endif
88 @@ -672,9 +689,16 @@ setup(void)
89 if (!XGetWindowAttributes(dpy, parentwin, &wa))
90 die("could not get embedding window attributes:…
91 parentwin);
92 - x = 0;
93 - y = topbar ? 0 : wa.height - mh;
94 - mw = wa.width;
95 +
96 + if (centered) {
97 + mw = MIN(MAX(max_textw() + promptw, min_width),…
98 + x = (wa.width - mw) / 2;
99 + y = (wa.height - mh) / 2;
100 + } else {
101 + x = 0;
102 + y = topbar ? 0 : wa.height - mh;
103 + mw = wa.width;
104 + }
105 }
106 promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
107 inputw = mw / 3; /* input width: ~33% of monitor width */
108 @@ -734,6 +758,8 @@ main(int argc, char *argv[])
109 topbar = 0;
110 else if (!strcmp(argv[i], "-f")) /* grabs keyboard be…
111 fast = 1;
112 + else if (!strcmp(argv[i], "-c")) /* centers dmenu on …
113 + centered = 1;
114 else if (!strcmp(argv[i], "-i")) { /* case-insensitive …
115 fstrncmp = strncasecmp;
116 fstrstr = cistrstr;
117 --
118 2.45.2
119
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.