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]);