]> granicus.if.org Git - vim/commitdiff
patch 9.0.0819 v9.0.0819
authorBram Moolenaar <Bram@vim.org>
Sat, 29 Oct 2022 19:01:52 +0000 (20:01 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 29 Oct 2022 19:01:52 +0000 (20:01 +0100)
src/buffer.c
src/change.c
src/fileio.c
src/structs.h
src/testdir/test_fixeol.vim
src/version.c

index 5a4825feb283baed7889beac2b84c38debf6e391..0714f62f817ec88444f769e1bdde27c9f0e95fac 100644 (file)
@@ -790,6 +790,8 @@ buf_clear_file(buf_T *buf)
     buf->b_ml.ml_line_count = 1;
     unchanged(buf, TRUE, TRUE);
     buf->b_shortname = FALSE;
+    buf->b_p_eof = FALSE;
+    buf->b_start_eof = FALSE;
     buf->b_p_eol = TRUE;
     buf->b_start_eol = TRUE;
     buf->b_p_bomb = FALSE;
index bb54edf6d0cb75633eac74a9d167bb70d1b3a05c..bcdb7033621130c7ac9c5456adfc576d9d82633a 100644 (file)
@@ -921,6 +921,7 @@ unchanged(buf_T *buf, int ff, int always_inc_changedtick)
 save_file_ff(buf_T *buf)
 {
     buf->b_start_ffc = *buf->b_p_ff;
+    buf->b_start_eof = buf->b_p_eof;
     buf->b_start_eol = buf->b_p_eol;
     buf->b_start_bomb = buf->b_p_bomb;
 
@@ -955,7 +956,9 @@ file_ff_differs(buf_T *buf, int ignore_empty)
        return FALSE;
     if (buf->b_start_ffc != *buf->b_p_ff)
        return TRUE;
-    if ((buf->b_p_bin || !buf->b_p_fixeol) && buf->b_start_eol != buf->b_p_eol)
+    if ((buf->b_p_bin || !buf->b_p_fixeol)
+           && (buf->b_start_eof != buf->b_p_eof
+               || buf->b_start_eol != buf->b_p_eol))
        return TRUE;
     if (!buf->b_p_bin && buf->b_start_bomb != buf->b_p_bomb)
        return TRUE;
index ab867b7c8fe06919b3dcec9701ab56643e220d4c..bca827152a1b3b39691fa6fd2fad5dc782d3850e 100644 (file)
@@ -589,8 +589,9 @@ readfile(
        // correctly set when reading stdin.
        if (!read_buffer)
        {
-           curbuf->b_p_eol = TRUE;
            curbuf->b_p_eof = FALSE;
+           curbuf->b_start_eof = FALSE;
+           curbuf->b_p_eol = TRUE;
            curbuf->b_start_eol = TRUE;
        }
        curbuf->b_p_bomb = FALSE;
@@ -2278,15 +2279,18 @@ failed:
     if (!error
            && !got_int
            && linerest != 0
+           // TODO: should we handle CTRL-Z differently here for 'endoffile'?
            && !(!curbuf->b_p_bin
-               && fileformat == EOL_DOS))
+               && fileformat == EOL_DOS
+               && *line_start == Ctrl_Z
+               && ptr == line_start + 1))
     {
        // remember for when writing
        if (set_options)
        {
            curbuf->b_p_eol = FALSE;
            if (*line_start == Ctrl_Z && ptr == line_start + 1)
-               curbuf->b_p_eof = FALSE;
+               curbuf->b_p_eof = TRUE;
        }
        *ptr = NUL;
        len = (colnr_T)(ptr - line_start + 1);
index 02c9c2adad5c43d5c9351b2e95bbee54692a1e56..dfcdcfb188c28a09b37c1dd6f14004bef15148fb 100644 (file)
@@ -3150,6 +3150,7 @@ struct file_buffer
     linenr_T   b_no_eol_lnum;  // non-zero lnum when last line of next binary
                                // write should not have an end-of-line
 
+    int                b_start_eof;    // last line had eof (CTRL-Z) when it was read
     int                b_start_eol;    // last line had eol when it was read
     int                b_start_ffc;    // first char of 'ff' when edit started
     char_u     *b_start_fenc;  // 'fileencoding' when edit started or NULL
index 3ede84f49e78b87ea3a32a4f4b0ad5514841fab9..9d6c900bdb3bdeeeb9475b581c1140a68ac472e8 100644 (file)
@@ -34,10 +34,10 @@ func Test_fixeol()
   w >>XXTestEol
   w >>XXTestNoEol
 
-  call assert_equal(['with eol', 'END'], readfile('XXEol'))
-  call assert_equal(['without eolEND'], readfile('XXNoEol'))
-  call assert_equal(['with eol', 'stays eol', 'END'], readfile('XXTestEol'))
-  call assert_equal(['without eol', 'stays withoutEND'],
+  call assert_equal(['with eol or eof', 'END'], readfile('XXEol'))
+  call assert_equal(['without eol or eofEND'], readfile('XXNoEol'))
+  call assert_equal(['with eol or eof', 'stays eol', 'END'], readfile('XXTestEol'))
+  call assert_equal(['without eol or eof', 'stays withoutEND'],
              \ readfile('XXTestNoEol'))
 
   call delete('XXEol')
index ae48781af32501f05dc130b098f6962e4bd85082..f9a00d632e6c142d18329229d3f36848a1a6bac7 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    819,
 /**/
     818,
 /**/