| 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 |