Mercurial > vim
changeset 30962:3a01529f17f5
patch 9.0.0817
Commit: https://github.com/vim/vim/commit/fb0cf2357e0c85bbfd9f9178705ad8d77b6b3b4e
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Oct 22 11:25:19 2022 +0100
patch 9.0.0817
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 28 Oct 2022 10:45:07 +0200 |
parents | 22264b648b5d |
children | 6f305257ad43 |
files | 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 |
diffstat | 10 files changed, 37 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -3052,6 +3052,13 @@ A jump table for the options with a shor '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 shor '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.
--- a/src/Makefile +++ b/src/Makefile @@ -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.
--- a/src/bufwrite.c +++ b/src/bufwrite.c @@ -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
--- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -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);
--- a/src/fileio.c +++ b/src/fileio.c @@ -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)
--- a/src/option.h +++ b/src/option.h @@ -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
--- a/src/optiondefs.h +++ b/src/optiondefs.h @@ -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},
--- a/src/structs.h +++ b/src/structs.h @@ -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'
--- a/src/testdir/test_fixeol.vim +++ b/src/testdir/test_fixeol.vim @@ -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