0
0
mirror of https://github.com/vim/vim.git synced 2025-09-26 04:04:07 -04:00

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)
This commit is contained in:
Bram Moolenaar
2017-01-23 21:31:09 +01:00
parent fffbf308dd
commit 7a2699e868
3 changed files with 28 additions and 3 deletions

View File

@@ -274,9 +274,9 @@ readfile(
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;
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
int can_retry; int can_retry;
@@ -738,6 +738,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);
#ifdef FEAT_AUTOCMD #ifdef FEAT_AUTOCMD
if (!read_buffer) if (!read_buffer)
{ {
@@ -769,6 +773,11 @@ 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

@@ -764,6 +764,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 */
/**/
224,
/**/ /**/
223, 223,
/**/ /**/