summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-06-21 15:09:14 +0200
committerBram Moolenaar <Bram@vim.org>2020-06-21 15:09:14 +0200
commit820ffa567c5a4bc0d3517c79c91d63d8062c358e (patch)
tree53ad1c5ef5ed6de0a4f1f8f66dada6a96f52fd23
parenta3b7fdc1bb227897f41b8f2958a48d0a26292ff7 (diff)
downloadvim-git-820ffa567c5a4bc0d3517c79c91d63d8062c358e.tar.gz
patch 8.2.1027: GUI: multi-byte characters do not work in a terminalv8.2.1027
Problem: GUI: multi-byte characters do not work in a terminal. Solution: Do not assume a key is one byte. (closes #6304)
-rw-r--r--src/gui_gtk_x11.c8
-rw-r--r--src/gui_x11.c8
-rw-r--r--src/version.c2
3 files changed, 12 insertions, 6 deletions
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index b2770ca47..40de66631 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -1215,7 +1215,10 @@ key_press_event(GtkWidget *widget UNUSED,
if (len == -3)
key = TO_SPECIAL(string[1], string[2]);
else
- key = string[0];
+ {
+ string[len] = NUL;
+ key = mb_ptr2char(string);
+ }
// Handle modifiers.
modifiers = modifiers_gdk2vim(state);
@@ -1240,8 +1243,7 @@ key_press_event(GtkWidget *widget UNUSED,
// May remove the shift modifier if it's included in the key.
modifiers = may_remove_shift_modifier(modifiers, key);
- string[0] = key;
- len = 1;
+ len = mb_char2bytes(key, string);
}
if (modifiers != 0)
diff --git a/src/gui_x11.c b/src/gui_x11.c
index a64bc3bd9..26d02e773 100644
--- a/src/gui_x11.c
+++ b/src/gui_x11.c
@@ -938,7 +938,10 @@ gui_x11_key_hit_cb(
if (len == -3)
key = TO_SPECIAL(string[1], string[2]);
else
- key = string[0];
+ {
+ string[len] = NUL;
+ key = mb_ptr2char(string);
+ }
key = simplify_key(key, &modifiers);
if (key == CSI)
key = K_CSI;
@@ -951,8 +954,7 @@ gui_x11_key_hit_cb(
}
else
{
- string[0] = key;
- len = 1;
+ len = mb_char2bytes(key, string);
// Remove the SHIFT modifier for keys where it's already included,
// e.g., '(', '!' and '*'.
diff --git a/src/version.c b/src/version.c
index dad247833..b78659134 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1027,
+/**/
1026,
/**/
1025,