summaryrefslogtreecommitdiff
path: root/recipes/mc/mc-4.6.2/multi-press-f-keys.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/mc/mc-4.6.2/multi-press-f-keys.patch')
-rw-r--r--recipes/mc/mc-4.6.2/multi-press-f-keys.patch55
1 files changed, 55 insertions, 0 deletions
diff --git a/recipes/mc/mc-4.6.2/multi-press-f-keys.patch b/recipes/mc/mc-4.6.2/multi-press-f-keys.patch
new file mode 100644
index 0000000000..571402552b
--- /dev/null
+++ b/recipes/mc/mc-4.6.2/multi-press-f-keys.patch
@@ -0,0 +1,55 @@
+http://www.midnight-commander.org/ticket/287
+Index: mc-4.6.2/src/key.c
+===================================================================
+--- mc-4.6.2.orig/src/key.c 2009-02-01 19:30:21.000000000 +0000
++++ mc-4.6.2/src/key.c 2009-02-25 20:16:46.000000000 +0000
+@@ -694,6 +694,8 @@
+ /* F0 is the same as F10 for out purposes */
+ if (c == KEY_F (0))
+ c = KEY_F (10);
++ if (c == KEY_F_IMMUTABLE (0))
++ c = KEY_F_IMMUTABLE (10);
+
+ /*
+ * We are not interested if Ctrl was pressed when entering control
+@@ -765,6 +767,16 @@
+ mod &= ~KEY_M_SHIFT;
+ }
+
++ /*
++ * Numerals may require modifilers with some keymaps or on obscure
++ * keyboards (e. g. F4 = Esc Shift+4). We have to ignore all
++ * modifiers while interpreting Esc + Numeral.
++ */
++ if (c >= KEY_F_IMMUTABLE (1) && c <= KEY_F_IMMUTABLE (10)) {
++ c += KEY_F (0) - KEY_F_IMMUTABLE (0);
++ mod &= ~KEY_M_MASK;
++ }
++
+ if (!alternate_plus_minus)
+ switch (c) {
+ case KEY_KP_ADD:
+@@ -917,10 +929,9 @@
+ this = this->next;
+ else {
+ if (parent != NULL && parent->action == MCKEY_ESCAPE) {
+-
+ /* Convert escape-digits to F-keys */
+ if (isdigit(c))
+- c = KEY_F (c - '0');
++ c = KEY_F_IMMUTABLE (c - '0');
+ else if (c == ' ')
+ c = ESC_CHAR;
+ else
+Index: mc-4.6.2/src/myslang.h
+===================================================================
+--- mc-4.6.2.orig/src/myslang.h 2009-02-25 18:25:29.000000000 +0000
++++ mc-4.6.2/src/myslang.h 2009-02-25 18:25:31.000000000 +0000
+@@ -29,6 +29,7 @@
+ };
+
+ #define KEY_F(x) (1000+x)
++#define KEY_F_IMMUTABLE(x) (970+x)
+
+ #define ACS_VLINE SLSMG_VLINE_CHAR
+ #define ACS_HLINE SLSMG_HLINE_CHAR