diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-08-16 22:50:55 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-08-16 22:50:55 +0200 |
commit | 6bff02eb530aa29aafa2cb5627399837be7a5dd5 (patch) | |
tree | bbdc08501666f8c44b1bc16b8f4724360555b398 | |
parent | 91984b9034d3b698459622be277d963e0c6df60e (diff) | |
download | vim-6bff02eb530aa29aafa2cb5627399837be7a5dd5.zip |
patch 7.4.2222
Problem: Sourcing a script where a character has 0x80 as a second byte does
not work. (Filipe L B Correia)
Solution: Turn 0x80 into K_SPECIAL KS_SPECIAL KE_FILLER. (Christian
Brabandt, closes #728) Add a test case.
-rw-r--r-- | src/getchar.c | 10 | ||||
-rw-r--r-- | src/misc1.c | 2 | ||||
-rw-r--r-- | src/proto/getchar.pro | 2 | ||||
-rw-r--r-- | src/testdir/test_regexp_utf8.vim | 19 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 26 insertions, 9 deletions
diff --git a/src/getchar.c b/src/getchar.c index 03c75869e..1c170cc43 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -3060,7 +3060,7 @@ inchar( if (typebuf_changed(tb_change_cnt)) return 0; - return fix_input_buffer(buf, len, script_char >= 0); + return fix_input_buffer(buf, len); } /* @@ -3069,10 +3069,7 @@ inchar( * Returns the new length. */ int -fix_input_buffer( - char_u *buf, - int len, - int script) /* TRUE when reading from a script */ +fix_input_buffer(char_u *buf, int len) { int i; char_u *p = buf; @@ -3083,7 +3080,6 @@ fix_input_buffer( * Replace NUL by K_SPECIAL KS_ZERO KE_FILLER * Replace K_SPECIAL by K_SPECIAL KS_SPECIAL KE_FILLER * Replace CSI by K_SPECIAL KS_EXTRA KE_CSI - * Don't replace K_SPECIAL when reading a script file. */ for (i = len; --i >= 0; ++p) { @@ -3106,7 +3102,7 @@ fix_input_buffer( } else #endif - if (p[0] == NUL || (p[0] == K_SPECIAL && !script + if (p[0] == NUL || (p[0] == K_SPECIAL #ifdef FEAT_AUTOCMD /* timeout may generate K_CURSORHOLD */ && (i < 2 || p[1] != KS_EXTRA || p[2] != (int)KE_CURSORHOLD) diff --git a/src/misc1.c b/src/misc1.c index 2ee87b1f2..8cb3b6fd9 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -3416,7 +3416,7 @@ get_keystroke(void) if (n > 0) { /* Replace zero and CSI by a special key code. */ - n = fix_input_buffer(buf + len, n, FALSE); + n = fix_input_buffer(buf + len, n); len += n; waited = 0; } diff --git a/src/proto/getchar.pro b/src/proto/getchar.pro index dc117b0ac..de33bfd14 100644 --- a/src/proto/getchar.pro +++ b/src/proto/getchar.pro @@ -47,7 +47,7 @@ int vpeekc_nomap(void); int vpeekc_any(void); int char_avail(void); void vungetc(int c); -int fix_input_buffer(char_u *buf, int len, int script); +int fix_input_buffer(char_u *buf, int len); int input_available(void); int do_map(int maptype, char_u *arg, int mode, int abbrev); int get_map_mode(char_u **cmdp, int forceit); diff --git a/src/testdir/test_regexp_utf8.vim b/src/testdir/test_regexp_utf8.vim index 81d8f5b04..ea9182916 100644 --- a/src/testdir/test_regexp_utf8.vim +++ b/src/testdir/test_regexp_utf8.vim @@ -25,11 +25,13 @@ endfunc func Test_equivalence_re1() set re=1 call s:equivalence_test() + set re=0 endfunc func Test_equivalence_re2() set re=2 call s:equivalence_test() + set re=0 endfunc func s:classes_test() @@ -82,9 +84,26 @@ endfunc func Test_classes_re1() set re=1 call s:classes_test() + set re=0 endfunc func Test_classes_re2() set re=2 call s:classes_test() + set re=0 +endfunc + +func Test_source_utf8() + " check that sourcing a script with 0x80 as second byte works + new + call setline(1, [':%s/àx/--à1234--/g', ':%s/Àx/--À1234--/g']) + write! Xscript + bwipe! + new + call setline(1, [' àx ', ' Àx ']) + source! Xscript | echo + call assert_equal(' --à1234-- ', getline(1)) + call assert_equal(' --À1234-- ', getline(2)) + bwipe! + call delete('Xscript') endfunc diff --git a/src/version.c b/src/version.c index 0395201c6..539685dde 100644 --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2222, +/**/ 2221, /**/ 2220, |