Changed CR key from 0x0a -> 0x0d like vim does.
authorDaniel Carl <danielcarl@gmx.de>
Tue, 15 Oct 2013 20:56:07 +0000 (22:56 +0200)
committerDaniel Carl <danielcarl@gmx.de>
Tue, 15 Oct 2013 20:56:27 +0000 (22:56 +0200)
Change order of key processing parts. Use fix keyvalue mapping before running
the gdk_keyval_to_unicode(). This should be a little faster and avoids bugs,
when compiled against the GTK3 libs, where the GDK_Return is handled by
gdk_keyval_to_unicode() which wasn't th fact with GDK2.

src/ascii.h
src/ex.c
src/map.c

index 88ae8b1..5a10c9b 100644 (file)
@@ -33,7 +33,7 @@
 
 #define KEY_TAB         '\x09'
 #define KEY_NL          '\x15'
-#define KEY_CR          '\x0a'
+#define KEY_CR          '\x0d'
 #define KEY_ESC         '\x1b'
 #define KEY_BS          '\x08'
 #define KEY_SHIFT_TAB   TERMCAP2KEY('k', 'B')
index bffc03a..41b5440 100644 (file)
--- a/src/ex.c
+++ b/src/ex.c
@@ -237,7 +237,7 @@ VbResult ex_keypress(int key)
             vb_set_input_text("");
             break;
 
-        case '\n':
+        case KEY_CR:
             input_activate();
             break;
 
index 646c6fe..7dd311f 100644 (file)
--- a/src/map.c
+++ b/src/map.c
@@ -343,47 +343,50 @@ static int keyval_to_string(guint keyval, guint state, guchar *string)
     int len;
     guint32 uc;
 
-    if ((uc = gdk_keyval_to_unicode(keyval))) {
-        if ((state & GDK_CONTROL_MASK) && uc >= 0x20 && uc < 0x80) {
-            len = 1;
-            if (uc >= '@') {
-                string[0] = uc & 0x1f;
-            } else if (uc == '8') {
-                string[0] = KEY_BS;
+    len = 1;
+    switch (keyval) {
+        case GDK_Tab:
+        case GDK_KP_Tab:
+        case GDK_ISO_Left_Tab:
+            string[0] = KEY_TAB;
+            break;
+
+        case GDK_Linefeed:
+            string[0] = KEY_NL;
+            break;
+
+        case GDK_Return:
+        case GDK_ISO_Enter:
+        case GDK_3270_Enter:
+            string[0] = KEY_CR;
+            break;
+
+        case GDK_Escape:
+            string[0] = KEY_ESC;
+            break;
+
+        case GDK_BackSpace:
+            string[0] = KEY_BS;
+            break;
+
+        default:
+            if ((uc = gdk_keyval_to_unicode(keyval))) {
+                if ((state & GDK_CONTROL_MASK) && uc >= 0x20 && uc < 0x80) {
+                    if (uc >= '@') {
+                        string[0] = uc & 0x1f;
+                    } else if (uc == '8') {
+                        string[0] = KEY_BS;
+                    } else {
+                        string[0] = uc;
+                    }
+                } else {
+                    /* translate a normal key to utf-8 */
+                    len = utf_char2bytes((guint)uc, string);
+                }
             } else {
-                string[0] = uc;
-            }
-        } else {
-            /* translate a normal key to utf-8 */
-            len = utf_char2bytes((guint)uc, string);
-        }
-    } else {
-        /* translate keys which are represented by ascii control codes */
-        len = 1;
-        switch (keyval) {
-            case GDK_Tab:
-            case GDK_KP_Tab:
-            case GDK_ISO_Left_Tab:
-                string[0] = KEY_TAB;
-                break;
-            case GDK_Linefeed:
-                string[0] = KEY_NL;
-                break;
-            case GDK_Return:
-            case GDK_ISO_Enter:
-            case GDK_3270_Enter:
-                string[0] = KEY_CR;
-                break;
-            case GDK_Escape:
-                string[0] = KEY_ESC;
-                break;
-            case GDK_BackSpace:
-                string[0] = KEY_BS;
-                break;
-            default:
                 len = 0;
-                break;
-        }
+            }
+            break;
     }
 
     return len;