Package: ratmenu Version: 2.3.14 Severity: wishlist Tags: patch
The attached patch adds emacs-style keybindings to ratmenu. C-p, C-n, C-b, and C-f correspond to up, down, left, and right (where C- indicates that the control key is pressed), C-g is cancel, C-i is Tab, and both C-m and C-j are variations on Return.
I would appreciate it very much if you would apply this patch (or something similar--I'll admit that the code duplication between the Control and non-Control cases might not be ideal) to the Debian ratmenu package.
Thank you, Kent Hunter [EMAIL PROTECTED]
diff -Naur ratmenu.old/ratmenu.1 ratmenu.new/ratmenu.1 --- ratmenu.old/ratmenu.1 2006-03-10 19:21:21.000000000 -0500 +++ ratmenu.new/ratmenu.1 2007-06-21 21:36:15.000000000 -0400 @@ -159,19 +159,19 @@ .RS .TP .BI Up - 'k', Up_arrow, BackSpace, '\-' + 'k', Up_arrow, BackSpace, '\-', C\-p .TP .BI Down - 'j', Down_arrow, Space, Tab, '+' + 'j', Down_arrow, Space, Tab, '+', C\-n, C\-i .TP .BI Select - 'l', Right_arrow, Return + 'l', Right_arrow, Return, C\-f, C\-m, C\-j .TP .BI Back - 'h', Left_arrow + 'h', Left_arrow, C\-b .TP .BI Exit - 'q', Escape + 'q', Escape, C\-g .RE .SH CONFIGURATION USING X RESOURCES .PP diff -Naur ratmenu.old/ratmenu.c ratmenu.new/ratmenu.c --- ratmenu.old/ratmenu.c 2005-03-31 02:56:24.000000000 -0500 +++ ratmenu.new/ratmenu.c 2007-06-21 21:35:51.000000000 -0400 @@ -348,27 +348,52 @@ switch (ev.type) { case KeyPress: XLookupString(&ev.xkey, NULL, 0, &key, NULL); - switch (key) { - case XK_Escape: case XK_q: - return; - break; - case XK_Left: case XK_h: - if (prevmenu) { - spawn(prevmenu); - } - break; - case XK_Right: case XK_Return: case XK_l: - spawn(commands[curitem]); - break; - case XK_Tab: case XK_space: case XK_Down: case XK_j: case XK_plus: - ++curitem >= numitems ? curitem = 0 : 0 ; - redraw(curitem, high, wide, 0); - break; - case XK_BackSpace: case XK_Up: case XK_k: case XK_minus: - curitem-- <= 0 ? curitem = numitems - 1 : 0 ; - redraw(curitem, high, wide, 0); - break; - } + if (ev.xkey.state & ControlMask) { + switch (key) { + case XK_Escape: case XK_q: case XK_g: + return; + break; + case XK_Left: case XK_b: + if (prevmenu) { + spawn(prevmenu); + } + break; + case XK_Right: case XK_Return: case XK_f: case XK_KP_Enter: case XK_m: case XK_j: + spawn(commands[curitem]); + break; + case XK_Tab: case XK_i: case XK_space: case XK_Down: case XK_n: case XK_plus: + ++curitem >= numitems ? curitem = 0 : 0 ; + redraw(curitem, high, wide, 0); + break; + case XK_BackSpace: case XK_Up: case XK_p: case XK_minus: + curitem-- <= 0 ? curitem = numitems - 1 : 0 ; + redraw(curitem, high, wide, 0); + break; + } + } else { + switch (key) { + case XK_Escape: case XK_q: + return; + break; + case XK_Left: case XK_h: + if (prevmenu) { + spawn(prevmenu); + } + break; + case XK_Right: case XK_Return: case XK_l: case XK_KP_Enter: + spawn(commands[curitem]); + break; + case XK_Tab: case XK_space: case XK_Down: case XK_j: case XK_plus: + ++curitem >= numitems ? curitem = 0 : 0 ; + redraw(curitem, high, wide, 0); + break; + case XK_BackSpace: case XK_Up: case XK_k: case XK_minus: + curitem-- <= 0 ? curitem = numitems - 1 : 0 ; + redraw(curitem, high, wide, 0); + break; + } + + } break; case MapNotify: case Expose: redraw(curitem, high, wide, 1); break; case UnmapNotify: if (persist == no) return; else XClearWindow(dpy, menuwin); break;