summaryrefslogtreecommitdiff
path: root/dmenu-noinputlinesbelowpromptfullwidth-5.2.diff
diff options
context:
space:
mode:
authorozpv <39195175+ozpv@users.noreply.github.com>2024-03-03 19:37:15 +0000
committerGitHub <noreply@github.com>2024-03-03 19:37:15 +0000
commit5fa5574930db8151265951251db144fa045d2991 (patch)
treece5bf341853c87155e76813d5f28d418732d620c /dmenu-noinputlinesbelowpromptfullwidth-5.2.diff
parent834cada626cdc3aa6838e1e7423e7128d2ec0e40 (diff)
custom patches
Diffstat (limited to 'dmenu-noinputlinesbelowpromptfullwidth-5.2.diff')
-rw-r--r--dmenu-noinputlinesbelowpromptfullwidth-5.2.diff156
1 files changed, 156 insertions, 0 deletions
diff --git a/dmenu-noinputlinesbelowpromptfullwidth-5.2.diff b/dmenu-noinputlinesbelowpromptfullwidth-5.2.diff
new file mode 100644
index 0000000..d34478e
--- /dev/null
+++ b/dmenu-noinputlinesbelowpromptfullwidth-5.2.diff
@@ -0,0 +1,156 @@
+diff -up dmenu/config.def.h dmenu-noinputlinesbelowpromptfullwidth/config.def.h
+--- dmenu/config.def.h 2024-03-03 12:59:00.545293913 -0600
++++ dmenu-noinputlinesbelowpromptfullwidth/config.def.h 2024-03-03 12:50:07.883388742 -0600
+@@ -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 draw_input = 1; /* -noi option; if 0, the input will not be drawn by default */
+ /* -fn option overrides fonts[0]; default X11 font or font set */
+ static const char *fonts[] = {
+ "monospace:size=10"
+diff -up dmenu/dmenu.c dmenu-noinputlinesbelowpromptfullwidth/dmenu.c
+--- dmenu/dmenu.c 2024-03-03 12:59:00.545293913 -0600
++++ dmenu-noinputlinesbelowpromptfullwidth/dmenu.c 2024-03-03 13:31:59.732635827 -0600
+@@ -147,30 +147,32 @@ drawmenu(void)
+ {
+ unsigned int curpos;
+ struct item *item;
+- int x = 0, y = 0, w;
++ int x = 0, y = 0, w = 0;
+
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ drw_rect(drw, 0, 0, mw, mh, 1, 1);
+
+ if (prompt && *prompt) {
+ drw_setscheme(drw, scheme[SchemeSel]);
+- x = drw_text(drw, x, 0, promptw, bh, lrpad / 2, prompt, 0);
++ x = drw_text(drw, x, 0, !draw_input ? mw : promptw, bh, lrpad / 2, prompt, 0);
+ }
+- /* draw input field */
+- w = (lines > 0 || !matches) ? mw - x : inputw;
+- drw_setscheme(drw, scheme[SchemeNorm]);
+- drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
+
+- curpos = TEXTW(text) - TEXTW(&text[cursor]);
+- if ((curpos += lrpad / 2 - 1) < w) {
++ if (draw_input) {
++ w = (lines > 0 || !matches) ? mw - x : inputw;
+ drw_setscheme(drw, scheme[SchemeNorm]);
+- drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0);
++ drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
++
++ curpos = TEXTW(text) - TEXTW(&text[cursor]);
++ if ((curpos += lrpad / 2 - 1) < w) {
++ drw_setscheme(drw, scheme[SchemeNorm]);
++ drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0);
++ }
+ }
+
+ if (lines > 0) {
+ /* draw vertical list */
+ for (item = curr; item != next; item = item->right)
+- drawitem(item, x, y += bh, mw - x);
++ drawitem(item, !draw_input ? x - mw : x - promptw, y += bh, mw);
+ } else if (matches) {
+ /* draw horizontal list */
+ x += inputw;
+@@ -178,8 +180,8 @@ drawmenu(void)
+ if (curr->left) {
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, lrpad / 2, "<", 0);
++ x += w;
+ }
+- x += w;
+ for (item = curr; item != next; item = item->right)
+ x = drawitem(item, x, 0, textw_clamp(item->text, mw - x - TEXTW(">")));
+ if (next) {
+@@ -358,16 +360,19 @@ keypress(XKeyEvent *ev)
+ case XK_p: ksym = XK_Up; break;
+
+ case XK_k: /* delete right */
+- text[cursor] = '\0';
+- match();
++ if (draw_input) {
++ text[cursor] = '\0';
++ match();
++ }
+ break;
+ case XK_u: /* delete left */
+- insert(NULL, 0 - cursor);
++ if (draw_input)
++ insert(NULL, 0 - cursor);
+ break;
+ case XK_w: /* delete word */
+- while (cursor > 0 && strchr(worddelimiters, text[nextrune(-1)]))
++ while (cursor > 0 && strchr(worddelimiters, text[nextrune(-1)]) && draw_input)
+ insert(NULL, nextrune(-1) - cursor);
+- while (cursor > 0 && !strchr(worddelimiters, text[nextrune(-1)]))
++ while (cursor > 0 && !strchr(worddelimiters, text[nextrune(-1)]) && draw_input)
+ insert(NULL, nextrune(-1) - cursor);
+ break;
+ case XK_y: /* paste selection */
+@@ -414,23 +419,23 @@ keypress(XKeyEvent *ev)
+ switch(ksym) {
+ default:
+ insert:
+- if (!iscntrl((unsigned char)*buf))
++ if (!iscntrl((unsigned char)*buf) && draw_input)
+ insert(buf, len);
+ break;
+ case XK_Delete:
+ case XK_KP_Delete:
+- if (text[cursor] == '\0')
++ if (text[cursor] == '\0' || !draw_input)
+ return;
+ cursor = nextrune(+1);
+ /* fallthrough */
+ case XK_BackSpace:
+- if (cursor == 0)
++ if (cursor == 0 || !draw_input)
+ return;
+ insert(NULL, nextrune(-1) - cursor);
+ break;
+ case XK_End:
+ case XK_KP_End:
+- if (text[cursor] != '\0') {
++ if (text[cursor] != '\0' && draw_input) {
+ cursor = strlen(text);
+ break;
+ }
+@@ -514,7 +519,7 @@ insert:
+ }
+ break;
+ case XK_Tab:
+- if (!sel)
++ if (!sel || !draw_input)
+ return;
+ cursor = strnlen(sel->text, sizeof text - 1);
+ memcpy(text, sel->text, cursor);
+@@ -677,7 +682,7 @@ setup(void)
+ mw = wa.width;
+ }
+ promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
+- inputw = mw / 3; /* input width: ~33% of monitor width */
++ inputw = !draw_input ? 0 : mw / 3; /* input width: ~33% of monitor width */
+ match();
+
+ /* create menu window */
+@@ -715,7 +720,7 @@ setup(void)
+ static void
+ usage(void)
+ {
+- die("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
++ die("usage: dmenu [-bfiv] [-noi] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
+ " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]");
+ }
+
+@@ -734,6 +739,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], "-noi")) /* no input field. intended to be used with a prompt */
++ draw_input = 0;
+ else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
+ fstrncmp = strncasecmp;
+ fstrstr = cistrstr;