diff options
| author | Florian Walch <fwalch@users.noreply.github.com> | 2015-03-31 23:07:13 +0300 | 
|---|---|---|
| committer | Florian Walch <fwalch@users.noreply.github.com> | 2015-03-31 23:07:13 +0300 | 
| commit | 7080041465af6ca530389e2270025f43c4932a0f (patch) | |
| tree | 823b766da260436dac313c7ce17c5442581c8306 /src | |
| parent | ad7a317c42b7eb4d27a888f217750a4f4bb67bc8 (diff) | |
| parent | 21f446ebb484786ac3f74bc62143d4d93393aa3f (diff) | |
| download | rneovim-7080041465af6ca530389e2270025f43c4932a0f.tar.gz rneovim-7080041465af6ca530389e2270025f43c4932a0f.tar.bz2 rneovim-7080041465af6ca530389e2270025f43c4932a0f.zip | |
Merge pull request #2296 from glts/vim-7.4.324
[RDY] vim-patch:7.4.324
Diffstat (limited to 'src')
| -rw-r--r-- | src/nvim/ex_getln.c | 40 | ||||
| -rw-r--r-- | src/nvim/version.c | 2 | 
2 files changed, 29 insertions, 13 deletions
| diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index a5d0d0be16..d430509cfd 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -1702,6 +1702,7 @@ getexmodeline (    int vcol = 0;    char_u      *p;    int prev_char; +  int len;    /* always start in column 0; write a newline if necessary */    compute_cmdrow(); @@ -1761,10 +1762,16 @@ getexmodeline (        if (c1 == '\r')          c1 = '\n'; -      if (c1 == BS || c1 == K_BS -          || c1 == DEL || c1 == K_DEL || c1 == K_KDEL) { +      if (c1 == BS || c1 == K_BS || c1 == DEL || c1 == K_DEL || c1 == K_KDEL) {          if (!GA_EMPTY(&line_ga)) { -          --line_ga.ga_len; +          if (has_mbyte) { +            p = (char_u *)line_ga.ga_data; +            p[line_ga.ga_len] = NUL; +            len = (*mb_head_off)(p, p + line_ga.ga_len - 1) + 1; +            line_ga.ga_len -= len; +          } else { +            line_ga.ga_len--; +          }            goto redraw;          }          continue; @@ -1797,15 +1804,19 @@ redraw:          /* redraw the line */          msg_col = startcol;          vcol = 0; -        for (p = (char_u *)line_ga.ga_data; -             p < (char_u *)line_ga.ga_data + line_ga.ga_len; ++p) { +        p = (char_u *)line_ga.ga_data; +        p[line_ga.ga_len] = NUL; +        while (p < (char_u *)line_ga.ga_data + line_ga.ga_len) {            if (*p == TAB) {              do {                msg_putchar(' ');              } while (++vcol % 8); +            p++;            } else { -            msg_outtrans_len(p, 1); -            vcol += char2cells(*p); +            len = MB_PTR2LEN(p); +            msg_outtrans_len(p, len); +            vcol += ptr2cells(p); +            p += len;            }          }          msg_clr_eos(); @@ -1847,9 +1858,15 @@ redraw:        }      } -    if (IS_SPECIAL(c1)) +    if (IS_SPECIAL(c1)) {        c1 = '?'; -    ((char_u *)line_ga.ga_data)[line_ga.ga_len] = c1; +    } +    if (has_mbyte) { +      len = (*mb_char2bytes)(c1, (char_u *)line_ga.ga_data + line_ga.ga_len); +    } else { +      len = 1; +      ((char_u *)line_ga.ga_data)[line_ga.ga_len] = c1; +    }      if (c1 == '\n')        msg_putchar('\n');      else if (c1 == TAB) { @@ -1858,11 +1875,10 @@ redraw:          msg_putchar(' ');        } while (++vcol % 8);      } else { -      msg_outtrans_len( -          ((char_u *)line_ga.ga_data) + line_ga.ga_len, 1); +      msg_outtrans_len(((char_u *)line_ga.ga_data) + line_ga.ga_len, len);        vcol += char2cells(c1);      } -    ++line_ga.ga_len; +    line_ga.ga_len += len;      escaped = FALSE;      ui_cursor_goto(msg_row, msg_col); diff --git a/src/nvim/version.c b/src/nvim/version.c index c2a196e5d2..45e3a73a69 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -416,7 +416,7 @@ static int included_patches[] = {    327,    //326 NA    325, -  //324, +  324,    323,    //322 NA    //321 NA | 
