]> granicus.if.org Git - vim/commitdiff
patch 9.0.0817 v9.0.0816 v9.0.0817
authorBram Moolenaar <Bram@vim.org>
Sat, 22 Oct 2022 10:25:19 +0000 (11:25 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 22 Oct 2022 10:25:19 +0000 (11:25 +0100)
runtime/doc/options.txt
src/Makefile
src/bufwrite.c
src/ex_cmds.c
src/fileio.c
src/option.h
src/optiondefs.h
src/structs.h
src/testdir/test_fixeol.vim
src/version.c

index 5beb6a283452e5d14380ff3b79cde55a2a2675a2..de388bb5afaa196606357b69f9bbe076997653e9 100644 (file)
@@ -3052,6 +3052,13 @@ A jump table for the options with a short description can be found at |Q_op|.
 'endofline' 'eol'      boolean (default on)
                        local to buffer
        When writing a file and this option is off and the 'binary' option
+       is on, or 'fixeol' option is off, no CTRL-Z will be written for at the
+       end of the file.
+
+                       *'endofline'* *'eol'* *'noendofline'* *'noeol'*
+'endofline' 'eol'      boolean (default on)
+                       local to buffer
+       When writing a file and this option is off and the 'binary' option
        is on, or 'fixeol' option is off, no <EOL> will be written for the
        last line in the file.  This option is automatically set or reset when
        starting to edit a new file, depending on whether file has an <EOL>
@@ -3452,7 +3459,7 @@ A jump table for the options with a short description can be found at |Q_op|.
 'fixendofline' 'fixeol'        boolean (default on)
                        local to buffer
        When writing a file and this option is on, <EOL> at the end of file
-       will be restored if missing. Turn this option off if you want to
+       will be restored if missing.  Turn this option off if you want to
        preserve the situation from the original file.
        When the 'binary' option is set the value of this option doesn't
        matter.
index bd6c187554f46b9f84f7f8f299e45d548d72ee9a..4b342da6b57cc8d99372a2404c34f1e7fdf07629 100644 (file)
@@ -355,7 +355,7 @@ CClink = $(CC)
 #CONF_OPT_GUI = --enable-gui=gnome2 --disable-gtktest
 #CONF_OPT_GUI = --enable-gui=gtk3
 #CONF_OPT_GUI = --enable-gui=gtk3 --disable-gtktest
-#CONF_OPT_GUI = --enable-gui=motif
+CONF_OPT_GUI = --enable-gui=motif
 #CONF_OPT_GUI = --enable-gui=motif --with-motif-lib="-static -lXm -shared"
 
 # Uncomment this line to run an individual test with gvim.
index 3ff7fb33903f58196bf802f76263b14a177035ed..713dac561f48c39a5a688dd111a9aadb31e7ef04 100644 (file)
@@ -2050,6 +2050,10 @@ restore_backup:
                len = 0;
                write_info.bw_start_lnum = lnum;
            }
+           if (!buf->b_p_fixeol && buf->b_p_eof)
+               // write trailing CTRL-Z
+               (void)write_eintr(write_info->bw_fd, "\x1a", 1);
+
            // write failed or last line has no EOL: stop here
            if (end == 0
                    || (lnum == end
index 676ab704b3d79027bd7f761215c13a6ce2cc8558..44333d514ce0898a97f1d1797308373fc0a3a8f1 100644 (file)
@@ -929,8 +929,6 @@ do_bang(
            STRCAT(t, newcmd);
        if (ins_prevcmd)
            STRCAT(t, prevcmd);
-       else
-           vim_free(t);
        p = t + STRLEN(t);
        STRCAT(t, trailarg);
        vim_free(newcmd);
index 701521a4191a49688ab9295b841b10ffb9750061..ab867b7c8fe06919b3dcec9701ab56643e220d4c 100644 (file)
@@ -590,6 +590,7 @@ readfile(
        if (!read_buffer)
        {
            curbuf->b_p_eol = TRUE;
+           curbuf->b_p_eof = FALSE;
            curbuf->b_start_eol = TRUE;
        }
        curbuf->b_p_bomb = FALSE;
@@ -2278,13 +2279,15 @@ failed:
            && !got_int
            && linerest != 0
            && !(!curbuf->b_p_bin
-               && fileformat == EOL_DOS
-               && *line_start == Ctrl_Z
-               && ptr == line_start + 1))
+               && fileformat == EOL_DOS))
     {
        // 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;
+       }
        *ptr = NUL;
        len = (colnr_T)(ptr - line_start + 1);
        if (ml_append(lnum, line_start, len, newfile) == FAIL)
index e266d387ea6d2948dfd18d1d5bdb747bb2dd6fde..eed12e8378d2828c1b26abc1dbcfccc523086a3a 100644 (file)
@@ -555,6 +555,7 @@ EXTERN char_u       *p_efm;         // 'errorformat'
 EXTERN char_u  *p_gefm;        // 'grepformat'
 EXTERN char_u  *p_gp;          // 'grepprg'
 #endif
+EXTERN int     p_eof;          // 'endoffile'
 EXTERN int     p_eol;          // 'endofline'
 EXTERN int     p_ek;           // 'esckeys'
 EXTERN char_u  *p_ei;          // 'eventignore'
@@ -1123,6 +1124,7 @@ enum
     , BV_DEF
     , BV_INC
 #endif
+    , BV_EOF
     , BV_EOL
     , BV_FIXEOL
     , BV_EP
index 9ea86029058806ca7caf93425a01e82b25746ea7..43a334fc073159258b881416e7026b5a50c44a6b 100644 (file)
@@ -61,6 +61,7 @@
 # define PV_DEF                OPT_BOTH(OPT_BUF(BV_DEF))
 # define PV_INC                OPT_BOTH(OPT_BUF(BV_INC))
 #endif
+#define PV_EOF         OPT_BUF(BV_EOF)
 #define PV_EOL         OPT_BUF(BV_EOL)
 #define PV_FIXEOL      OPT_BUF(BV_FIXEOL)
 #define PV_EP          OPT_BOTH(OPT_BUF(BV_EP))
@@ -846,7 +847,7 @@ static struct vimoption options[] =
     {"edcompatible","ed",   P_BOOL|P_VI_DEF,
                            (char_u *)&p_ed, PV_NONE,
                            {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
-    {"emoji",  "emo",      P_BOOL|P_VI_DEF|P_RCLR,
+    {"emoji",      "emo",   P_BOOL|P_VI_DEF|P_RCLR,
                            (char_u *)&p_emoji, PV_NONE,
                            {(char_u *)TRUE, (char_u *)0L}
                            SCTX_INIT},
@@ -854,6 +855,9 @@ static struct vimoption options[] =
                            (char_u *)&p_enc, PV_NONE,
                            {(char_u *)ENC_DFLT, (char_u *)0L}
                            SCTX_INIT},
+    {"endoffile",   "eof",  P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
+                           (char_u *)&p_eof, PV_EOF,
+                           {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
     {"endofline",   "eol",  P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT,
                            (char_u *)&p_eol, PV_EOL,
                            {(char_u *)TRUE, (char_u *)0L} SCTX_INIT},
index bc3d8cb07f22389886f7c93994b89a32dfd458b4..02c9c2adad5c43d5c9351b2e95bbee54692a1e56 100644 (file)
@@ -2999,6 +2999,7 @@ struct file_buffer
     char_u     *b_p_tfu;       // 'tagfunc' option value
     callback_T b_tfu_cb;       // 'tagfunc' callback
 #endif
+    int                b_p_eof;        // 'endoffile'
     int                b_p_eol;        // 'endofline'
     int                b_p_fixeol;     // 'fixendofline'
     int                b_p_et;         // 'expandtab'
index e97bf004f160d2d17b78021cb249f1b284e6053a..3ede84f49e78b87ea3a32a4f4b0ad5514841fab9 100644 (file)
@@ -1,17 +1,17 @@
-" Tests for 'fixeol' and 'eol'
+" Tests for 'fixeol', 'eof' and 'eol'
 
 func Test_fixeol()
   " first write two test files – with and without trailing EOL
   " use Unix fileformat for consistency
   set ff=unix
   enew!
-  call setline('.', 'with eol')
+  call setline('.', 'with eol or eof')
   w! XXEol
   enew!
-  set noeol nofixeol
-  call setline('.', 'without eol')
+  set noeof noeol nofixeol
+  call setline('.', 'without eol or eof')
   w! XXNoEol
-  set eol fixeol
+  set eol eof fixeol
   bwipe XXEol XXNoEol
 
   " try editing files with 'fixeol' disabled
@@ -44,7 +44,7 @@ func Test_fixeol()
   call delete('XXNoEol')
   call delete('XXTestEol')
   call delete('XXTestNoEol')
-  set ff& fixeol& eol&
+  set ff& fixeol& eof& eol&
   enew!
 endfunc
 
index 237cd7c40a1688df822278068c11e6b16e8c21d1..e9f9f126084637feb63afd28590133c25a7242e7 100644 (file)
@@ -695,6 +695,10 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    817,
+/**/
+    816,
 /**/
     815,
 /**/