From 7a2699e868bca781e26b060a44fc714d87cfa4ba Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 23 Jan 2017 21:31:09 +0100 Subject: [PATCH] patch 8.0.0224: change to 'fileformats' from autocmd does not take effect 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) --- src/fileio.c | 15 ++++++++++++--- src/testdir/test_fileformat.vim | 14 ++++++++++++++ src/version.c | 2 ++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/fileio.c b/src/fileio.c index aeb53b593d..39e356f88e 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -274,9 +274,9 @@ readfile( int msg_save = msg_scroll; linenr_T read_no_eol_lnum = 0; /* non-zero lnum when last line of * last read was missing the eol */ - int try_mac = (vim_strchr(p_ffs, 'm') != NULL); - int try_dos = (vim_strchr(p_ffs, 'd') != NULL); - int try_unix = (vim_strchr(p_ffs, 'x') != NULL); + int try_mac; + int try_dos; + int try_unix; int file_rewind = FALSE; #ifdef FEAT_MBYTE int can_retry; @@ -738,6 +738,10 @@ readfile( curbuf->b_op_start.lnum = ((from == 0) ? 1 : from); 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); + #ifdef FEAT_AUTOCMD if (!read_buffer) { @@ -769,6 +773,11 @@ readfile( else apply_autocmds_exarg(EVENT_FILEREADPRE, sfname, sfname, 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) msg_scroll = m; diff --git a/src/testdir/test_fileformat.vim b/src/testdir/test_fileformat.vim index 584f20cdfc..256a7d5b1c 100644 --- a/src/testdir/test_fileformat.vim +++ b/src/testdir/test_fileformat.vim @@ -15,3 +15,17 @@ func Test_fileformat_after_bw() call assert_equal(test_fileformats, &fileformat) set fileformats& 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 diff --git a/src/version.c b/src/version.c index d92b6ed265..86d7816555 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 */ +/**/ + 224, /**/ 223, /**/