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:
committed by
Bram Moolenaar
parent
7fe956d176
commit
4dd9252d6f
@@ -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
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user