0
0
mirror of https://github.com/vim/vim.git synced 2025-09-30 04:44:14 -04:00

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 #10658)
This commit is contained in:
Anton Sharonov
2022-07-04 10:47:31 +01:00
committed by Bram Moolenaar
parent 7fe956d176
commit 4dd9252d6f
2 changed files with 28 additions and 0 deletions

View File

@@ -1160,6 +1160,7 @@ key_press_event(GtkWidget *widget UNUSED,
int key; int key;
guint state; guint state;
char_u *s, *d; char_u *s, *d;
int ctrl_prefix_added = 0;
gui.event_time = event->time; gui.event_time = event->time;
key_sym = event->keyval; 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 if (len == 0) // Unrecognized key
return TRUE; return TRUE;
@@ -1288,6 +1303,8 @@ key_press_event(GtkWidget *widget UNUSED,
string2[1] = KS_MODIFIER; string2[1] = KS_MODIFIER;
string2[2] = modifiers; string2[2] = modifiers;
add_to_input_buf(string2, 3); add_to_input_buf(string2, 3);
if (modifiers == 0x4)
ctrl_prefix_added = 1;
} }
// Check if the key interrupts. // 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); add_to_input_buf(string, len);
// blank out the pointer if necessary // blank out the pointer if necessary

View File

@@ -735,6 +735,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
33,
/**/ /**/
32, 32,
/**/ /**/