commit 9fbc7a4c40cd7377f5183de675ed9c76e098970a
parent 4f334b4d0bdeb807e4d363667f9f3f48dcf151d9
Author: zerg <zergrusherncrusher@disroot.org>
Date: Thu, 30 Mar 2023 21:14:36 -0700
[dmenu][patch][vi_mode] Forgot to add C-d and C-u movements
Diffstat:
2 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/tools.suckless.org/dmenu/patches/vi-mode/dmenu-vi_mode-20230330-dfbbf7f.diff b/tools.suckless.org/dmenu/patches/vi-mode/dmenu-vi_mode-20230330-dfbbf7f.diff
@@ -27,7 +27,7 @@ index 1edb647..7bf5f4a 100644
+ { XK_q, 0 }
+};
diff --git a/dmenu.c b/dmenu.c
-index 4e7df12..902ad4e 100644
+index 4e7df12..14fbde3 100644
--- a/dmenu.c
+++ b/dmenu.c
@@ -26,7 +26,7 @@
@@ -76,16 +76,33 @@ index 4e7df12..902ad4e 100644
drw_setscheme(drw, scheme[SchemeNorm]);
drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0);
}
-@@ -321,6 +335,161 @@ movewordedge(int dir)
+@@ -321,6 +335,179 @@ movewordedge(int dir)
}
}
+static void
-+vi_keypress(const KeySym ksym, const XKeyEvent *ev)
++vi_keypress(KeySym ksym, const XKeyEvent *ev)
+{
+ static const size_t quit_len = LENGTH(quit_keys);
+ if (ev->state & ControlMask) {
+ switch(ksym) {
++ /* movement */
++ case XK_d: /* fallthrough */
++ if (next) {
++ sel = curr = next;
++ calcoffsets();
++ goto draw;
++ } else
++ ksym = XK_G;
++ break;
++ case XK_u:
++ if (prev) {
++ sel = curr = prev;
++ calcoffsets();
++ goto draw;
++ } else
++ ksym = XK_g;
++ break;
+ case XK_p: /* fallthrough */
+ case XK_P: break;
+ case XK_c:
@@ -232,13 +249,14 @@ index 4e7df12..902ad4e 100644
+ }
+ }
+
++draw:
+ drawmenu();
+}
+
static void
keypress(XKeyEvent *ev)
{
-@@ -340,6 +509,18 @@ keypress(XKeyEvent *ev)
+@@ -340,6 +527,18 @@ keypress(XKeyEvent *ev)
break;
}
@@ -257,7 +275,7 @@ index 4e7df12..902ad4e 100644
if (ev->state & ControlMask) {
switch(ksym) {
case XK_a: ksym = XK_Home; break;
-@@ -543,6 +724,8 @@ paste(void)
+@@ -543,6 +742,8 @@ paste(void)
insert(p, (q = strchr(p, '\n')) ? q - p : (ssize_t)strlen(p));
XFree(p);
}
@@ -266,7 +284,7 @@ index 4e7df12..902ad4e 100644
drawmenu();
}
-@@ -737,6 +920,11 @@ main(int argc, char *argv[])
+@@ -737,6 +938,11 @@ main(int argc, char *argv[])
else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
fstrncmp = strncasecmp;
fstrstr = cistrstr;
diff --git a/tools.suckless.org/dmenu/patches/vi-mode/index.md b/tools.suckless.org/dmenu/patches/vi-mode/index.md
@@ -7,7 +7,7 @@ With this patch dmenu will have basic vi mode capabilities.
Implemented actions
-------------------
* movements inside typed text with `[h|l|w|b|e|0|$]`
-* movements through list with `[j|k|g|G]`
+* movements through list with `[j|k|g|G|C-d|C-u]`
* standard insertions with `[a|A|i|I]`
* paste after|before cursor with `[p|P]`, use `ctrl` to use clipboard
* delete from cursor to eol with `D`