diff options
-rw-r--r-- | src/edit.c | 7 | ||||
-rw-r--r-- | src/mbyte.c | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 14 insertions, 3 deletions
diff --git a/src/edit.c b/src/edit.c index fb347b85d..9caca851b 100644 --- a/src/edit.c +++ b/src/edit.c @@ -8597,7 +8597,12 @@ ins_left() tpos = curwin->w_cursor; if (oneleft() == OK) { - start_arrow(&tpos); +#if defined(FEAT_XIM) && defined(FEAT_GUI_GTK) + /* Only call start_arrow() when not busy with preediting, it will + * break undo. K_LEFT is inserted in im_correct_cursor(). */ + if (!im_is_preediting()) +#endif + start_arrow(&tpos); #ifdef FEAT_RIGHTLEFT /* If exit reversed string, position is fixed */ if (revins_scol != -1 && (int)curwin->w_cursor.col >= revins_scol) diff --git a/src/mbyte.c b/src/mbyte.c index bcfca8266..92f00e093 100644 --- a/src/mbyte.c +++ b/src/mbyte.c @@ -3514,6 +3514,11 @@ im_delete_preedit(void) add_to_input_buf(delkey, (int)sizeof(delkey)); } +/* + * Move the cursor left by "num_move_back" characters. + * Note that ins_left() checks im_is_preediting() to avoid breaking undo for + * these K_LEFT keys. + */ static void im_correct_cursor(int num_move_back) { @@ -3741,8 +3746,7 @@ im_preedit_changed_cb(GtkIMContext *context, gpointer data) } else if (cursor_index == 0 && preedit_string[0] == '\0') { - if (preedit_start_col == MAXCOL) - xim_has_preediting = FALSE; + xim_has_preediting = FALSE; /* If at the start position (after typing backspace) * preedit_start_col must be reset. */ diff --git a/src/version.c b/src/version.c index 3c2d9a32a..142928935 100644 --- a/src/version.c +++ b/src/version.c @@ -667,6 +667,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 67, +/**/ 66, /**/ 65, |