dmenu-gridnav-5.0.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dmenu-gridnav-5.0.diff (1417B)
---
1 diff --git a/dmenu.c b/dmenu.c
2 index 7361377..fcec79b 100644
3 --- a/dmenu.c
4 +++ b/dmenu.c
5 @@ -317,6 +317,8 @@ keypress(XKeyEvent *ev)
6 int len;
7 KeySym ksym;
8 Status status;
9 + int i, offscreen = 0;
10 + struct item *tmpsel;
11
12 len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status);
13 switch (status) {
14 @@ -443,6 +445,27 @@ insert:
15 calcoffsets();
16 break;
17 case XK_Left:
18 + if (columns > 1) {
19 + if (!sel)
20 + return;
21 + tmpsel = sel;
22 + for (i = 0; i < lines; i++) {
23 + if (!tmpsel->left || tmpsel->left->right != tmpsel) {
24 + if (offscreen)
25 + break;
26 + return;
27 + }
28 + if (tmpsel == curr)
29 + offscreen = 1;
30 + tmpsel = tmpsel->left;
31 + }
32 + sel = tmpsel;
33 + if (offscreen) {
34 + curr = prev;
35 + calcoffsets();
36 + }
37 + break;
38 + }
39 if (cursor > 0 && (!sel || !sel->left || lines > 0)) {
40 cursor = nextrune(-1);
41 break;
42 @@ -479,6 +502,27 @@ insert:
43 sel->out = 1;
44 break;
45 case XK_Right:
46 + if (columns > 1) {
47 + if (!sel)
48 + return;
49 + tmpsel = sel;
50 + for (i = 0; i < lines; i++) {
51 + if (!tmpsel->right || tmpsel->right->left != tmpsel) {
52 + if (offscreen)
53 + break;
54 + return;
55 + }
56 + tmpsel = tmpsel->right;
57 + if (tmpsel == next)
58 + offscreen = 1;
59 + }
60 + sel = tmpsel;
61 + if (offscreen) {
62 + curr = next;
63 + calcoffsets();
64 + }
65 + break;
66 + }
67 if (text[cursor] != '\0') {
68 cursor = nextrune(+1);
69 break;