diff src/getchar.c @ 20595:3609e842f822 v8.2.0851

patch 8.2.0851: can't distinguish <M-a> from accented "a" in the GUI Commit: https://github.com/vim/vim/commit/f4ae6b245a54f11dd967d06b80f30e5abf55fb82 Author: Bram Moolenaar <Bram@vim.org> Date: Sat May 30 19:52:46 2020 +0200 patch 8.2.0851: can't distinguish <M-a> from accented "a" in the GUI Problem: Can't distinguish <M-a> from accented "a" in the GUI. Solution: Use another way to make mapping <C-bslash> work. (closes https://github.com/vim/vim/issues/6163)
author Bram Moolenaar <Bram@vim.org>
date Sat, 30 May 2020 20:00:03 +0200
parents 5995db0fe84a
children fbee68c6aab1
line wrap: on
line diff
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -1593,16 +1593,26 @@ merge_modifyOtherKeys(int c_arg)
     if (mod_mask & MOD_MASK_CTRL)
     {
 	if ((c >= '`' && c <= 0x7f) || (c >= '@' && c <= '_'))
-	{
 	    c &= 0x1f;
-	    mod_mask &= ~MOD_MASK_CTRL;
-	}
 	else if (c == '6')
-	{
 	    // CTRL-6 is equivalent to CTRL-^
 	    c = 0x1e;
+#ifdef FEAT_GUI_GTK
+	// These mappings look arbitrary at the first glance, but in fact
+	// resemble quite exactly the behaviour of the GTK+ 1.2 GUI on my
+	// machine.  The only difference is BS vs. DEL for CTRL-8 (makes
+	// more sense and is consistent with usual terminal behaviour).
+	else if (c == '2')
+	    c = NUL;
+	else if (c >= '3' && c <= '7')
+	    c = c ^ 0x28;
+	else if (c == '8')
+	    c = BS;
+	else if (c == '?')
+	    c = DEL;
+#endif
+	if (c != c_arg)
 	    mod_mask &= ~MOD_MASK_CTRL;
-	}
     }
     if ((mod_mask & (MOD_MASK_META | MOD_MASK_ALT))
 	    && c >= 0 && c <= 127)