[wiki] [sites] [dmenu][patch][center] Added flag for centering || nihal_AT_nihaljere.xyz

From: <git_AT_suckless.org>
Date: Fri, 08 Nov 2019 06:13:04 +0100

commit 6c02cea1ec533844d9df133fbdbbb62c0a31d48a
Author: nihal_AT_nihaljere.xyz <Nihal Jere>
Date: Thu Nov 7 23:12:30 2019 -0600

    [dmenu][patch][center] Added flag for centering

diff --git a/tools.suckless.org/dmenu/patches/center/dmenu-center-20191105-f1ca0d0.diff b/tools.suckless.org/dmenu/patches/center/dmenu-center-20191105-f1ca0d0.diff
new file mode 100644
index 00000000..3f789df2
--- /dev/null
+++ b/tools.suckless.org/dmenu/patches/center/dmenu-center-20191105-f1ca0d0.diff
_AT_@ -0,0 +1,119 @@
+From f1ca0d0c35769f3197781eb875f2359a9d33007d Mon Sep 17 00:00:00 2001
+From: "nihal_AT_nihaljere.xyz" <Nihal Jere>
+Date: Tue, 5 Nov 2019 18:33:00 -0600
+Subject: [PATCH] Improved center patch. Can now be enabled using a flag
+
+---
+ config.def.h | 1 +
+ dmenu.1 | 3 +++
+ dmenu.c | 39 ++++++++++++++++++++++++++++++++-------
+ 3 files changed, 36 insertions(+), 7 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 1edb647..7ee3247 100644
+--- a/config.def.h
++++ b/config.def.h
+_AT_@ -2,6 +2,7 @@
+ /* Default settings; can be overriden by command line. */
+
+ static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
++static int centered = 0; /* -c option; centers dmenu on screen */
+ /* -fn option overrides fonts[0]; default X11 font or font set */
+ static const char *fonts[] = {
+ "monospace:size=10"
+diff --git a/dmenu.1 b/dmenu.1
+index 323f93c..c036baa 100644
+--- a/dmenu.1
++++ b/dmenu.1
+_AT_@ -40,6 +40,9 @@ which lists programs in the user's $PATH and runs the result in their $SHELL.
+ .B \-b
+ dmenu appears at the bottom of the screen.
+ .TP
++.B \-c
++dmenu appears centered on the screen.
++.TP
+ .B \-f
+ dmenu grabs the keyboard before reading stdin if not reading from a tty. This
+ is faster, but will lock up X until stdin reaches end\-of\-file.
+diff --git a/dmenu.c b/dmenu.c
+index 65f25ce..bc7d087 100644
+--- a/dmenu.c
++++ b/dmenu.c
+_AT_@ -89,6 +89,15 @@ calcoffsets(void)
+ break;
+ }
+
++static int
++max_textw(void)
++{
++ int len = 0;
++ for (struct item *item = items; item && item->text; item++)
++ len = MAX(TEXTW(item->text), len);
++ return len;
++}
++
+ static void
+ cleanup(void)
+ {
+_AT_@ -611,6 +620,7 @@ setup(void)
+ bh = drw->fonts->h + 2;
+ lines = MAX(lines, 0);
+ mh = (lines + 1) * bh;
++ promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
+ #ifdef XINERAMA
+ i = 0;
+ if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) {
+_AT_@ -637,9 +647,16 @@ setup(void)
+ if (INTERSECT(x, y, 1, 1, info[i]))
+ break;
+
+- x = info[i].x_org;
+- y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
+- mw = info[i].width;
++ if (centered) {
++ mw = MIN(MAX(max_textw() + promptw, 100), info[i].width);
++ x = info[i].x_org + ((info[i].width - mw) / 2);
++ y = info[i].y_org + ((info[i].height - mh) / 2);
++ } else {
++ x = info[i].x_org;
++ y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
++ mw = info[i].width;
++ }
++
+ XFree(info);
+ } else
+ #endif
+_AT_@ -647,11 +664,17 @@ setup(void)
+ if (!XGetWindowAttributes(dpy, parentwin, &wa))
+ die("could not get embedding window attributes: 0x%lx",
+ parentwin);
+- x = 0;
+- y = topbar ? 0 : wa.height - mh;
+- mw = wa.width;
++
++ if (centered) {
++ mw = MIN(MAX(max_textw() + promptw, 100), wa.width);
++ x = (wa.width - mw) / 2;
++ y = (wa.height - mh) / 2;
++ } else {
++ x = 0;
++ y = topbar ? 0 : wa.height - mh;
++ mw = wa.width;
++ }
+ }
+- promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
+ inputw = MIN(inputw, mw/3);
+ match();
+
+_AT_@ -709,6 +732,8 @@ main(int argc, char *argv[])
+ topbar = 0;
+ else if (!strcmp(argv[i], "-f")) /* grabs keyboard before reading stdin */
+ fast = 1;
++ else if (!strcmp(argv[i], "-c")) /* centers dmenu on screen */
++ centered = 1;
+ else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
+ fstrncmp = strncasecmp;
+ fstrstr = cistrstr;
+--
+2.23.0
+
diff --git a/tools.suckless.org/dmenu/patches/center/index.md b/tools.suckless.org/dmenu/patches/center/index.md
index 855087d6..be0db98e 100644
--- a/tools.suckless.org/dmenu/patches/center/index.md
+++ b/tools.suckless.org/dmenu/patches/center/index.md
_AT_@ -12,10 +12,14 @@ which is hard to integrate into programs which call dmenu directly, eg surf or
 tabbed. On the other hand, This small standalone patch is instantaneous and
 works globally.
 
+With `dmenu-center-20191105-f1ca0d0.diff`, you can use _-c_ to center dmenu.
+
 Download
 --------
+* [dmenu-center-20191105-f1ca0d0.diff](dmenu-center-20191105-f1ca0d0.diff)
 * [dmenu-center-4.8.diff](dmenu-center-4.8.diff)
 
 Authors
 -------
 * Ed van Bruggen <edvb_AT_uw.edu>
+* Nihal Jere <nihal_AT_nihal.jere.xyz> (20191105)
Received on Fri Nov 08 2019 - 06:13:04 CET

This archive was generated by hypermail 2.3.0 : Fri Nov 08 2019 - 06:24:29 CET