1
0
forked from aniani/vim

updated for version 7.3.181

Problem:    When repeating the insert of CTRL-V or a digraph the display may
            not be updated correctly.
Solution:   Only call edit_unputchar() after edit_putchar(). (Lech Lorens)
This commit is contained in:
Bram Moolenaar
2011-05-10 14:22:16 +02:00
parent a4271d598b
commit 9c520cb544
2 changed files with 22 additions and 9 deletions

View File

@@ -1553,12 +1553,16 @@ ins_redraw(ready)
ins_ctrl_v() ins_ctrl_v()
{ {
int c; int c;
int did_putchar = FALSE;
/* may need to redraw when no more chars available now */ /* may need to redraw when no more chars available now */
ins_redraw(FALSE); ins_redraw(FALSE);
if (redrawing() && !char_avail()) if (redrawing() && !char_avail())
{
edit_putchar('^', TRUE); edit_putchar('^', TRUE);
did_putchar = TRUE;
}
AppendToRedobuff((char_u *)CTRL_V_STR); /* CTRL-V */ AppendToRedobuff((char_u *)CTRL_V_STR); /* CTRL-V */
#ifdef FEAT_CMDL_INFO #ifdef FEAT_CMDL_INFO
@@ -1566,8 +1570,10 @@ ins_ctrl_v()
#endif #endif
c = get_literal(); c = get_literal();
edit_unputchar(); /* when line fits in 'columns' the '^' is at the start if (did_putchar)
of the next line and will not be redrawn */ /* when the line fits in 'columns' the '^' is at the start of the next
* line and will not removed by the redraw */
edit_unputchar();
#ifdef FEAT_CMDL_INFO #ifdef FEAT_CMDL_INFO
clear_showcmd(); clear_showcmd();
#endif #endif
@@ -9637,6 +9643,7 @@ ins_digraph()
{ {
int c; int c;
int cc; int cc;
int did_putchar = FALSE;
pc_status = PC_STATUS_UNSET; pc_status = PC_STATUS_UNSET;
if (redrawing() && !char_avail()) if (redrawing() && !char_avail())
@@ -9645,6 +9652,7 @@ ins_digraph()
ins_redraw(FALSE); ins_redraw(FALSE);
edit_putchar('?', TRUE); edit_putchar('?', TRUE);
did_putchar = TRUE;
#ifdef FEAT_CMDL_INFO #ifdef FEAT_CMDL_INFO
add_to_showcmd_c(Ctrl_K); add_to_showcmd_c(Ctrl_K);
#endif #endif
@@ -9661,8 +9669,10 @@ ins_digraph()
c = plain_vgetc(); c = plain_vgetc();
--no_mapping; --no_mapping;
--allow_keys; --allow_keys;
edit_unputchar(); /* when line fits in 'columns' the '?' is at the start if (did_putchar)
of the next line and will not be redrawn */ /* when the line fits in 'columns' the '?' is at the start of the next
* line and will not be removed by the redraw */
edit_unputchar();
if (IS_SPECIAL(c) || mod_mask) /* special key */ if (IS_SPECIAL(c) || mod_mask) /* special key */
{ {
@@ -9674,6 +9684,7 @@ ins_digraph()
} }
if (c != ESC) if (c != ESC)
{ {
did_putchar = FALSE;
if (redrawing() && !char_avail()) if (redrawing() && !char_avail())
{ {
/* may need to redraw when no more chars available now */ /* may need to redraw when no more chars available now */
@@ -9681,11 +9692,9 @@ ins_digraph()
if (char2cells(c) == 1) if (char2cells(c) == 1)
{ {
/* first remove the '?', otherwise it's restored when typing
* an ESC next */
edit_unputchar();
ins_redraw(FALSE); ins_redraw(FALSE);
edit_putchar(c, TRUE); edit_putchar(c, TRUE);
did_putchar = TRUE;
} }
#ifdef FEAT_CMDL_INFO #ifdef FEAT_CMDL_INFO
add_to_showcmd_c(c); add_to_showcmd_c(c);
@@ -9696,8 +9705,10 @@ ins_digraph()
cc = plain_vgetc(); cc = plain_vgetc();
--no_mapping; --no_mapping;
--allow_keys; --allow_keys;
edit_unputchar(); /* when line fits in 'columns' the '?' is at the if (did_putchar)
start of the next line and will not be redrawn */ /* when the line fits in 'columns' the '?' is at the start of the
* next line and will not be removed by a redraw */
edit_unputchar();
if (cc != ESC) if (cc != ESC)
{ {
AppendToRedobuff((char_u *)CTRL_V_STR); AppendToRedobuff((char_u *)CTRL_V_STR);

View File

@@ -714,6 +714,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 */
/**/
181,
/**/ /**/
180, 180,
/**/ /**/