vim-patch:8.0.0224

Problem:    When 'fileformats' is changed in a BufReadPre auto command, it
            does not take effect in readfile(). (Gary Johnson)
Solution:   Check the value of 'fileformats' after executing auto commands.
            (Christian Brabandt)

7a2699e868
This commit is contained in:
ckelsel 2017-11-10 23:17:20 +08:00
parent 314ff440f7
commit 7e8212c459
3 changed files with 30 additions and 6 deletions

View File

@ -302,11 +302,11 @@ readfile (
linenr_T skip_count = 0; linenr_T skip_count = 0;
linenr_T read_count = 0; linenr_T read_count = 0;
int msg_save = msg_scroll; int msg_save = msg_scroll;
linenr_T read_no_eol_lnum = 0; /* non-zero lnum when last line of linenr_T read_no_eol_lnum = 0; // non-zero lnum when last line of
* last read was missing the eol */ // last read was missing the eol
int try_mac = (vim_strchr(p_ffs, 'm') != NULL); int try_mac;
int try_dos = (vim_strchr(p_ffs, 'd') != NULL); int try_dos;
int try_unix = (vim_strchr(p_ffs, 'x') != NULL); int try_unix;
int file_rewind = FALSE; int file_rewind = FALSE;
int can_retry; int can_retry;
linenr_T conv_error = 0; /* line nr with conversion error */ linenr_T conv_error = 0; /* line nr with conversion error */
@ -639,6 +639,10 @@ readfile (
curbuf->b_op_start.lnum = ((from == 0) ? 1 : from); curbuf->b_op_start.lnum = ((from == 0) ? 1 : from);
curbuf->b_op_start.col = 0; curbuf->b_op_start.col = 0;
try_mac = (vim_strchr(p_ffs, 'm') != NULL);
try_dos = (vim_strchr(p_ffs, 'd') != NULL);
try_unix = (vim_strchr(p_ffs, 'x') != NULL);
if (!read_buffer) { if (!read_buffer) {
int m = msg_scroll; int m = msg_scroll;
int n = msg_scrolled; int n = msg_scrolled;
@ -668,6 +672,12 @@ readfile (
else else
apply_autocmds_exarg(EVENT_FILEREADPRE, sfname, sfname, apply_autocmds_exarg(EVENT_FILEREADPRE, sfname, sfname,
FALSE, NULL, eap); FALSE, NULL, eap);
// autocommands may have changed it
try_mac = (vim_strchr(p_ffs, 'm') != NULL);
try_dos = (vim_strchr(p_ffs, 'd') != NULL);
try_unix = (vim_strchr(p_ffs, 'x') != NULL);
if (msg_scrolled == n) if (msg_scrolled == n)
msg_scroll = m; msg_scroll = m;

View File

@ -15,3 +15,17 @@ func Test_fileformat_after_bw()
call assert_equal(test_fileformats, &fileformat) call assert_equal(test_fileformats, &fileformat)
set fileformats& set fileformats&
endfunc endfunc
func Test_fileformat_autocommand()
let filecnt=['', 'foobar', 'eins', '', 'zwei', 'drei', 'vier', 'fünf', '']
let ffs=&ffs
call writefile(filecnt, 'Xfile', 'b')
au BufReadPre Xfile set ffs=dos ff=dos
new Xfile
call assert_equal('dos', &l:ff)
call assert_equal('dos', &ffs)
" cleanup
let &ffs=ffs
au! BufReadPre Xfile
bw!
endfunc

View File

@ -880,7 +880,7 @@ static const int included_patches[] = {
// 227, // 227,
// 226, // 226,
// 225, // 225,
// 224, 224,
223, 223,
// 222, // 222,
// 221 NA // 221 NA