aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorckelsel <ckelsel@hotmail.com>2017-11-10 23:17:20 +0800
committerckelsel <ckelsel@hotmail.com>2017-11-10 23:28:24 +0800
commit7e8212c459b285aacf2dd225c1dad5593314f094 (patch)
treecb7e2b6f9925390e5cb5501432a375ccb6211436
parent314ff440f7130c39d7990295535a8cfde92de4ba (diff)
downloadrneovim-7e8212c459b285aacf2dd225c1dad5593314f094.tar.gz
rneovim-7e8212c459b285aacf2dd225c1dad5593314f094.tar.bz2
rneovim-7e8212c459b285aacf2dd225c1dad5593314f094.zip
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) https://github.com/vim/vim/commit/7a2699e868bca781e26b060a44fc714d87cfa4ba
-rw-r--r--src/nvim/fileio.c20
-rw-r--r--src/nvim/testdir/test_fileformat.vim14
-rw-r--r--src/nvim/version.c2
3 files changed, 30 insertions, 6 deletions
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c
index feb16f44d4..81ac98081d 100644
--- a/src/nvim/fileio.c
+++ b/src/nvim/fileio.c
@@ -302,11 +302,11 @@ readfile (
linenr_T skip_count = 0;
linenr_T read_count = 0;
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);
+ linenr_T read_no_eol_lnum = 0; // non-zero lnum when last line of
+ // last read was missing the eol
+ int try_mac;
+ int try_dos;
+ int try_unix;
int file_rewind = FALSE;
int can_retry;
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.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) {
int m = msg_scroll;
int n = msg_scrolled;
@@ -668,6 +672,12 @@ 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/nvim/testdir/test_fileformat.vim b/src/nvim/testdir/test_fileformat.vim
index 584f20cdfc..256a7d5b1c 100644
--- a/src/nvim/testdir/test_fileformat.vim
+++ b/src/nvim/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/nvim/version.c b/src/nvim/version.c
index a31381eddf..c57ca1e815 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -880,7 +880,7 @@ static const int included_patches[] = {
// 227,
// 226,
// 225,
- // 224,
+ 224,
223,
// 222,
// 221 NA