]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.0.0224: change to 'fileformats' from autocmd does not take effect v8.0.0224
authorBram Moolenaar <Bram@vim.org>
Mon, 23 Jan 2017 20:31:09 +0000 (21:31 +0100)
committerBram Moolenaar <Bram@vim.org>
Mon, 23 Jan 2017 20:31:09 +0000 (21:31 +0100)
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
src/testdir/test_fileformat.vim
src/version.c

index aeb53b593d14a3d95bf88afa622454d352036b30..39e356f88e4e09bf66c84a308266077cd47d8778 100644 (file)
@@ -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;
 
index 584f20cdfc71228d0270bb977d50209d88f808bb..256a7d5b1cdcffffe9d7eb90c97eec218a13dfad 100644 (file)
@@ -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
index d92b6ed265879947036ce45b3802c9ce1fa31432..86d78165554efe7c5cf899f809695b13c1a12e31 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    224,
 /**/
     223,
 /**/