Mercurial > vim
changeset 9896:7b39615c0db1 v7.4.2222
commit https://github.com/vim/vim/commit/6bff02eb530aa29aafa2cb5627399837be7a5dd5
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Aug 16 22:50:55 2016 +0200
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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 16 Aug 2016 23:00:06 +0200 |
parents | 1e88c3dd0ae2 |
children | 9d1354639a36 |
files | src/getchar.c src/misc1.c src/proto/getchar.pro src/testdir/test_regexp_utf8.vim src/version.c |
diffstat | 5 files changed, 26 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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)
--- 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; }
--- 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);
--- 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