diff options
Diffstat (limited to 'patches/dmenu-gridnav-5.2.diff')
| -rw-r--r-- | patches/dmenu-gridnav-5.2.diff | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/patches/dmenu-gridnav-5.2.diff b/patches/dmenu-gridnav-5.2.diff new file mode 100644 index 0000000..7adc36f --- /dev/null +++ b/patches/dmenu-gridnav-5.2.diff @@ -0,0 +1,69 @@ +diff --git a/dmenu.c b/dmenu.c +index 027dddb..0b92f1f 100644 +--- a/dmenu.c ++++ b/dmenu.c +@@ -334,6 +334,8 @@ keypress(XKeyEvent *ev) + int len; + KeySym ksym = NoSymbol; + Status status; ++ int i, offscreen = 0; ++ struct item *tmpsel; + + len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status); + switch (status) { +@@ -465,6 +467,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; ++ } + case XK_KP_Left: + if (cursor > 0 && (!sel || !sel->left || lines > 0)) { + cursor = nextrune(-1); +@@ -505,6 +528,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; ++ } + case XK_KP_Right: + if (text[cursor] != '\0') { + cursor = nextrune(+1); |
