diff options
author | Vidhu Kant Sharma <vidhukant@vidhukant.com> | 2023-10-29 20:15:41 +0530 |
---|---|---|
committer | Vidhu Kant Sharma <vidhukant@vidhukant.com> | 2023-10-29 20:15:41 +0530 |
commit | a2ac0f921d6a9b33d0e70449ca2160c6ffc06855 (patch) | |
tree | 7d6b9d725801b80dd334cbb1d6027d87cd3e08db /dmenu.c.orig | |
parent | d4f6516165ff592ede27ad8c594f78553bd4d5b3 (diff) |
Diffstat (limited to 'dmenu.c.orig')
-rw-r--r-- | dmenu.c.orig | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/dmenu.c.orig b/dmenu.c.orig index 69a5e07..0757615 100644 --- a/dmenu.c.orig +++ b/dmenu.c.orig @@ -377,6 +377,8 @@ keypress(XKeyEvent *ev) int len; KeySym ksym; Status status; + int i, offscreen = 0; + struct item *tmpsel; len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status); switch (status) { @@ -503,6 +505,27 @@ insert: calcoffsets(); break; case XK_Left: + if (columns > 1) { + if (!sel) + return; + tmpsel = sel; + for (i = 0; i < lines; i++) { + if (!tmpsel->left || tmpsel->left->right != tmpsel) { + if (offscreen) + break; + return; + } + if (tmpsel == curr) + offscreen = 1; + tmpsel = tmpsel->left; + } + sel = tmpsel; + if (offscreen) { + curr = prev; + calcoffsets(); + } + break; + } if (cursor > 0 && (!sel || !sel->left || lines > 0)) { cursor = nextrune(-1); break; @@ -539,6 +562,27 @@ insert: sel->out = 1; break; case XK_Right: + if (columns > 1) { + if (!sel) + return; + tmpsel = sel; + for (i = 0; i < lines; i++) { + if (!tmpsel->right || tmpsel->right->left != tmpsel) { + if (offscreen) + break; + return; + } + tmpsel = tmpsel->right; + if (tmpsel == next) + offscreen = 1; + } + sel = tmpsel; + if (offscreen) { + curr = next; + calcoffsets(); + } + break; + } if (text[cursor] != '\0') { cursor = nextrune(+1); break; |