Package: 9menu
Version: 1.8-1.2
Severity: wishlist
Tags: patch

Please add support for more keys to navigate, especially for KP_Enter
to trigger an item instead of only Return. (I've got an report that
in some settings X seems to only generate KP_Enter instead of Return,
if that turns out to be a more widespread problem, that might increase
the severity of this bug quite a bit in my eyes).

Attached patch adds support for
        keypad up/down/enter, for
        vi-like j/k and
        emacs-like C-p/C-n.
And support for escape key to exit the menu.

Hochachtungsvoll,
        Bernhard R. Link
#!/bin/sh -e
## 05_morekeys.dpatch by Benhard R. Link <[email protected]>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Add more keys, especially Keypad Enter

if [ $# -ne 1 ]; then
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
    exit 1
fi

[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
patch_opts="${patch_opts:--f --no-backup-if-mismatch}"

case "$1" in
       -patch) patch $patch_opts -p1 < $0;;
       -unpatch) patch $patch_opts -p1 -R < $0;;
        *)
                echo >&2 "`basename $0`: script expects -patch|-unpatch as 
argument"
                exit 1;;
esac

exit 0

@DPATCH@
diff -urNad 9menu-1.8~/9menu.c 9menu-1.8/9menu.c
--- 9menu-1.8~/9menu.c  2009-01-31 14:13:35.000000000 +0100
+++ 9menu-1.8/9menu.c   2009-01-31 14:14:24.000000000 +0100
@@ -124,6 +124,14 @@
 #define CONFIG_MENU_UP_KEY  XK_Up
 #define CONFIG_MENU_DOWN_KEY    XK_Down
 #define CONFIG_MENU_SELECT_KEY  XK_Return
+#define CONFIG_MENU_VI_UP_KEY  XK_k
+#define CONFIG_MENU_VI_DOWN_KEY  XK_j
+#define CONFIG_MENU_EMACS_UP_KEY  XK_p
+#define CONFIG_MENU_EMACS_DOWN_KEY  XK_n
+#define CONFIG_MENU_ALTERNATE_UP_KEY  XK_KP_Up
+#define CONFIG_MENU_ALTERNATE_DOWN_KEY  XK_KP_Down
+#define CONFIG_MENU_ALTERNATE_SELECT_KEY  XK_KP_Enter
+#define CONFIG_MENU_ABORT_KEY XK_Escape
 
 char *progname;                /* my name */
 char *displayname;     /* X display */
@@ -573,13 +581,21 @@
                        key = XKeycodeToKeysym(dpy, ev.xkey.keycode, 0);        
                        if (key != CONFIG_MENU_UP_KEY
                            && key != CONFIG_MENU_DOWN_KEY
-                           && key != CONFIG_MENU_SELECT_KEY)
+                           && key != CONFIG_MENU_SELECT_KEY
+                           && key != CONFIG_MENU_ALTERNATE_DOWN_KEY
+                           && key != CONFIG_MENU_ALTERNATE_UP_KEY
+                           && key != CONFIG_MENU_ALTERNATE_SELECT_KEY
+                           && key != CONFIG_MENU_EMACS_DOWN_KEY
+                           && key != CONFIG_MENU_EMACS_UP_KEY
+                           && key != CONFIG_MENU_VI_DOWN_KEY
+                           && key != CONFIG_MENU_VI_UP_KEY
+                           && key != CONFIG_MENU_ABORT_KEY)
                                break;
 
-                       if (key == CONFIG_MENU_UP_KEY) {
+                       if (key == CONFIG_MENU_UP_KEY || key == 
CONFIG_MENU_EMACS_UP_KEY || key == CONFIG_MENU_VI_UP_KEY || key == 
CONFIG_MENU_ALTERNATE_UP_KEY) {
                                old = cur;
                                cur--;
-                       } else if (key == CONFIG_MENU_DOWN_KEY) {
+                       } else if (key == CONFIG_MENU_DOWN_KEY || key == 
CONFIG_MENU_EMACS_DOWN_KEY || key == CONFIG_MENU_VI_DOWN_KEY || key == 
CONFIG_MENU_ALTERNATE_DOWN_KEY) {
                                old = cur;
                                cur++;
                        }
@@ -589,7 +605,10 @@
                
                        cur %= numitems;
 
-                       if (key == CONFIG_MENU_UP_KEY || key == 
CONFIG_MENU_DOWN_KEY) {
+                       if (key == CONFIG_MENU_UP_KEY || key == 
CONFIG_MENU_DOWN_KEY
+                           || key == CONFIG_MENU_EMACS_UP_KEY || key == 
CONFIG_MENU_EMACS_DOWN_KEY
+                           || key == CONFIG_MENU_VI_UP_KEY || key == 
CONFIG_MENU_VI_DOWN_KEY
+                           || key == CONFIG_MENU_ALTERNATE_UP_KEY || key == 
CONFIG_MENU_ALTERNATE_DOWN_KEY) {
                                if (cur == old)
                                        break;
                                if (old >= 0 && old < numitems && cur != -1)
@@ -601,7 +620,13 @@
 
                        if (warp)
                                restoremouse();
-                       if (key == CONFIG_MENU_SELECT_KEY) {
+                       if (key == CONFIG_MENU_ABORT_KEY) {
+                               if (commands[cur] != labels[cur]) {
+                                       spawn(commands[cur]);
+                               }
+                               return;
+                       }
+                       if (key == CONFIG_MENU_SELECT_KEY || key == 
CONFIG_MENU_ALTERNATE_SELECT_KEY) {
                                if (strcmp(labels[cur], "exit") == 0) {
                                        if (commands[cur] != labels[cur]) {
                                                spawn(commands[cur]);

Reply via email to