mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
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.
This commit is contained in:
@@ -3060,7 +3060,7 @@ inchar(
|
|||||||
if (typebuf_changed(tb_change_cnt))
|
if (typebuf_changed(tb_change_cnt))
|
||||||
return 0;
|
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.
|
* Returns the new length.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
fix_input_buffer(
|
fix_input_buffer(char_u *buf, int len)
|
||||||
char_u *buf,
|
|
||||||
int len,
|
|
||||||
int script) /* TRUE when reading from a script */
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char_u *p = buf;
|
char_u *p = buf;
|
||||||
@@ -3083,7 +3080,6 @@ fix_input_buffer(
|
|||||||
* Replace NUL by K_SPECIAL KS_ZERO KE_FILLER
|
* Replace NUL by K_SPECIAL KS_ZERO KE_FILLER
|
||||||
* Replace K_SPECIAL by K_SPECIAL KS_SPECIAL KE_FILLER
|
* Replace K_SPECIAL by K_SPECIAL KS_SPECIAL KE_FILLER
|
||||||
* Replace CSI by K_SPECIAL KS_EXTRA KE_CSI
|
* 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)
|
for (i = len; --i >= 0; ++p)
|
||||||
{
|
{
|
||||||
@@ -3106,7 +3102,7 @@ fix_input_buffer(
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
if (p[0] == NUL || (p[0] == K_SPECIAL && !script
|
if (p[0] == NUL || (p[0] == K_SPECIAL
|
||||||
#ifdef FEAT_AUTOCMD
|
#ifdef FEAT_AUTOCMD
|
||||||
/* timeout may generate K_CURSORHOLD */
|
/* timeout may generate K_CURSORHOLD */
|
||||||
&& (i < 2 || p[1] != KS_EXTRA || p[2] != (int)KE_CURSORHOLD)
|
&& (i < 2 || p[1] != KS_EXTRA || p[2] != (int)KE_CURSORHOLD)
|
||||||
|
@@ -3416,7 +3416,7 @@ get_keystroke(void)
|
|||||||
if (n > 0)
|
if (n > 0)
|
||||||
{
|
{
|
||||||
/* Replace zero and CSI by a special key code. */
|
/* 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;
|
len += n;
|
||||||
waited = 0;
|
waited = 0;
|
||||||
}
|
}
|
||||||
|
@@ -47,7 +47,7 @@ int vpeekc_nomap(void);
|
|||||||
int vpeekc_any(void);
|
int vpeekc_any(void);
|
||||||
int char_avail(void);
|
int char_avail(void);
|
||||||
void vungetc(int c);
|
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 input_available(void);
|
||||||
int do_map(int maptype, char_u *arg, int mode, int abbrev);
|
int do_map(int maptype, char_u *arg, int mode, int abbrev);
|
||||||
int get_map_mode(char_u **cmdp, int forceit);
|
int get_map_mode(char_u **cmdp, int forceit);
|
||||||
|
@@ -25,11 +25,13 @@ endfunc
|
|||||||
func Test_equivalence_re1()
|
func Test_equivalence_re1()
|
||||||
set re=1
|
set re=1
|
||||||
call s:equivalence_test()
|
call s:equivalence_test()
|
||||||
|
set re=0
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_equivalence_re2()
|
func Test_equivalence_re2()
|
||||||
set re=2
|
set re=2
|
||||||
call s:equivalence_test()
|
call s:equivalence_test()
|
||||||
|
set re=0
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func s:classes_test()
|
func s:classes_test()
|
||||||
@@ -82,9 +84,26 @@ endfunc
|
|||||||
func Test_classes_re1()
|
func Test_classes_re1()
|
||||||
set re=1
|
set re=1
|
||||||
call s:classes_test()
|
call s:classes_test()
|
||||||
|
set re=0
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_classes_re2()
|
func Test_classes_re2()
|
||||||
set re=2
|
set re=2
|
||||||
call s:classes_test()
|
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
|
endfunc
|
||||||
|
@@ -763,6 +763,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 */
|
||||||
|
/**/
|
||||||
|
2222,
|
||||||
/**/
|
/**/
|
||||||
2221,
|
2221,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user