]> granicus.if.org Git - vim/commitdiff
patch 9.0.0033: on a Belgian keyboard CTRL-[ does not work v9.0.0033
authorAnton Sharonov <anton.sharonov@gmail.com>
Mon, 4 Jul 2022 09:47:31 +0000 (10:47 +0100)
committerBram Moolenaar <Bram@vim.org>
Mon, 4 Jul 2022 09:47:31 +0000 (10:47 +0100)
Problem:    On a Belgian keyboard CTRL-[ does not work.
Solution:   Handle GDK_KEY_dead_circumflex. (Anton Sharonov, closes #10658)

src/gui_gtk_x11.c
src/version.c

index 0cd661303290814b1e0606b7657cb21d5a8620c2..fd582dd799b42676e0e0db9718c73c578f8cbfc0 100644 (file)
@@ -1160,6 +1160,7 @@ key_press_event(GtkWidget *widget UNUSED,
     int                key;
     guint      state;
     char_u     *s, *d;
+    int                ctrl_prefix_added = 0;
 
     gui.event_time = event->time;
     key_sym = event->keyval;
@@ -1245,6 +1246,20 @@ key_press_event(GtkWidget *widget UNUSED,
        }
     }
 
+    // Belgian Ctrl+[ workaround
+    if (len == 0 && key_sym == GDK_KEY_dead_circumflex)
+    {
+       string[0] = CSI;
+       string[1] = KS_MODIFIER;
+       string[2] = MOD_MASK_CTRL;
+       string[3] = '[';
+       len = 4;
+       add_to_input_buf(string, len);
+       // workaround has to return here, otherwise our fake string[] entries
+       // are confusing code downstream
+       return TRUE;
+    }
+
     if (len == 0)   // Unrecognized key
        return TRUE;
 
@@ -1288,6 +1303,8 @@ key_press_event(GtkWidget *widget UNUSED,
        string2[1] = KS_MODIFIER;
        string2[2] = modifiers;
        add_to_input_buf(string2, 3);
+       if (modifiers == 0x4)
+           ctrl_prefix_added = 1;
     }
 
     // Check if the key interrupts.
@@ -1302,6 +1319,15 @@ key_press_event(GtkWidget *widget UNUSED,
        }
     }
 
+    // workaround for German keyboard, where instead of '[' char we have code
+    // sequence of bytes 195, 188 (UTF-8 for "u-umlaut")
+    if (ctrl_prefix_added && len == 2
+                   && ((int)string[0]) == 195
+                   && ((int)string[1]) == 188)
+    {
+       string[0] = 91; // ASCII('[')
+       len = 1;
+    }
     add_to_input_buf(string, len);
 
     // blank out the pointer if necessary
index 1232f4e02fcbb4548eb1ccdfa7ddde6049baf418..419e25f6d31fcfb1a50ade922d246ff97cb266a0 100644 (file)
@@ -735,6 +735,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    33,
 /**/
     32,
 /**/