aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Walch <fwalch@users.noreply.github.com>2015-03-31 23:07:13 +0300
committerFlorian Walch <fwalch@users.noreply.github.com>2015-03-31 23:07:13 +0300
commit7080041465af6ca530389e2270025f43c4932a0f (patch)
tree823b766da260436dac313c7ce17c5442581c8306
parentad7a317c42b7eb4d27a888f217750a4f4bb67bc8 (diff)
parent21f446ebb484786ac3f74bc62143d4d93393aa3f (diff)
downloadrneovim-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
-rw-r--r--src/nvim/ex_getln.c40
-rw-r--r--src/nvim/version.c2
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