# HG changeset patch # User Bram Moolenaar # Date 1656928803 -7200 # Node ID 5f2d86ec61eb42d98995274cedb5b09481cdb4a5 # Parent 9a01e19b2202522c192aa65115237cb0b991686b patch 9.0.0033: on a Belgian keyboard CTRL-[ does not work Commit: https://github.com/vim/vim/commit/4dd9252d6f0e93c9118c808bd47f407d581947a8 Author: Anton Sharonov Date: Mon Jul 4 10:47:31 2022 +0100 patch 9.0.0033: on a Belgian keyboard CTRL-[ does not work Problem: On a Belgian keyboard CTRL-[ does not work. Solution: Handle GDK_KEY_dead_circumflex. (Anton Sharonov, closes https://github.com/vim/vim/issues/10658) diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c --- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -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 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -736,6 +736,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 33, +/**/ 32, /**/ 31,