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