Introduction
Introduction Statistics Contact Development Disclaimer Help
Modified center patch: increased speed when dealing with long emoji files - sit…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
commit 429b695d510ae3b941583c952c67986f690601c4
parent 1e2d2122823de78b4aaf49c25310f30efe0c5896
Author: leliel <[email protected]>
Date: Mon, 7 Apr 2025 01:50:38 +0000
Modified center patch: increased speed when dealing with long emoji files
Diffstat:
A tools.suckless.org/dmenu/patches/c… | 135 +++++++++++++++++++++++++++…
M tools.suckless.org/dmenu/patches/c… | 2 ++
2 files changed, 137 insertions(+), 0 deletions(-)
---
diff --git a/tools.suckless.org/dmenu/patches/center/dmenu-center-20250407-b1e2…
@@ -0,0 +1,135 @@
+From 95a444534c230de79000348b0e12f8644aac8b15 Mon Sep 17 00:00:00 2001
+From: leliel <[email protected]>
+Date: Mon, 7 Apr 2025 01:00:01 +0000
+Subject: [PATCH] Increased speed for long files with emojis.
+
+---
+ config.def.h | 3 +++
+ dmenu.1 | 3 +++
+ dmenu.c | 40 ++++++++++++++++++++++++++++++++++------
+ 3 files changed, 40 insertions(+), 6 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 1edb647..832896f 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -2,6 +2,9 @@
+ /* Default settings; can be overriden by command line. */
+
+ static int topbar = 1; /* -b option; if 0, dmenu appear…
++static int centered = 1; /* -c option; centers dmenu on sc…
++static int min_width = 500; /* minimum width when centered…
++static const float menu_height_ratio = 4.0f; /* This is the ratio used in th…
+ /* -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
+@@ -40,6 +40,9 @@ which lists programs in the user's $PATH and runs the result…
+ .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 fd49549..ceb52c7 100644
+--- a/dmenu.c
++++ b/dmenu.c
+@@ -29,6 +29,7 @@ enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* co…
+
+ struct item {
+ char *text;
++ unsigned int width;
+ struct item *left, *right;
+ int out;
+ };
+@@ -95,6 +96,15 @@ calcoffsets(void)
+ break;
+ }
+
++static int
++max_textw(void)
++{
++ int len = 0;
++ for (struct item *item = items; item && item->text; item++)
++ len = MAX(item->width, len);
++ return len;
++}
++
+ static void
+ cleanup(void)
+ {
+@@ -563,6 +573,7 @@ readstdin(void)
+ line[len - 1] = '\0';
+ if (!(items[i].text = strdup(line)))
+ die("strdup:");
++ items[i].width = TEXTW(line);
+
+ items[i].out = 0;
+ }
+@@ -636,6 +647,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))) {
+@@ -662,9 +674,16 @@ setup(void)
+ if (INTERSECT(x, y, 1, 1, info[i]) != 0)
+ 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, min_width), info[…
++ x = info[i].x_org + ((info[i].width - mw) / 2);
++ y = info[i].y_org + ((info[i].height - mh) / menu_hei…
++ } 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
+@@ -672,9 +691,16 @@ 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, min_width), wa.wi…
++ 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 = mw / 3; /* input width: ~33% of monitor width */
+@@ -733,6 +759,8 @@ main(int argc, char *argv[])
+ topbar = 0;
+ else if (!strcmp(argv[i], "-f")) /* grabs keyboard before r…
+ fast = 1;
++ else if (!strcmp(argv[i], "-c")) /* centers dmenu on screen…
++ centered = 1;
+ else if (!strcmp(argv[i], "-i")) { /* case-insensitive item m…
+ fstrncmp = strncasecmp;
+ fstrstr = cistrstr;
+--
+2.49.0
+
diff --git a/tools.suckless.org/dmenu/patches/center/index.md b/tools.suckless.…
@@ -23,9 +23,11 @@ Download
* [dmenu-center-20200111-8cd37e1.diff](dmenu-center-20200111-8cd37e1.diff)
* [dmenu-center-5.2.diff](dmenu-center-5.2.diff)
* [dmenu-center-20240616-36c3d68.diff](dmenu-center-20240616-36c3d68.diff)
+* [dmenu-center-20250407-b1e217b.diff](dmenu-center-20250407-b1e217b.diff)
Authors
-------
* Ed van Bruggen <[email protected]>
* Nihal Jere <[email protected]> (20200111)
* El Bachir Kassimi <[email protected]> (20240616)
+* Leliel <[email protected]> (20250407)
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.