mirror of
https://github.com/vim/vim.git
synced 2025-09-29 04:34:16 -04:00
patch 9.0.0826: if 'endofline' is set CTRL-Z may be written in a wrong place
Problem: If 'endofline' is set the CTRL-Z may be written in the wrong place. Solution: Write CTRL-Z at the end of the file. Update the help to explain the possibilities better. (Ken Takata, closes #11486)
This commit is contained in:
35
src/fileio.c
35
src/fileio.c
@@ -2271,27 +2271,32 @@ failed:
|
||||
if (error && read_count == 0)
|
||||
error = FALSE;
|
||||
|
||||
/*
|
||||
* If we get EOF in the middle of a line, note the fact and
|
||||
* complete the line ourselves.
|
||||
* In Dos format ignore a trailing CTRL-Z, unless 'binary' set.
|
||||
*/
|
||||
// In Dos format ignore a trailing CTRL-Z, unless 'binary' is set.
|
||||
// In old days the file length was in sector count and the CTRL-Z the
|
||||
// marker where the file really ended. Assuming we write it to a file
|
||||
// system that keeps file length properly the CTRL-Z should be dropped.
|
||||
// Set the 'endoffile' option so the user can decide what to write later.
|
||||
// In Unix format the CTRL-Z is just another character.
|
||||
if (linerest != 0
|
||||
&& !curbuf->b_p_bin
|
||||
&& fileformat == EOL_DOS
|
||||
&& ptr[-1] == Ctrl_Z)
|
||||
{
|
||||
ptr--;
|
||||
linerest--;
|
||||
if (set_options)
|
||||
curbuf->b_p_eof = TRUE;
|
||||
}
|
||||
|
||||
// If we get EOF in the middle of a line, note the fact by resetting
|
||||
// 'endofline' and add the line normally.
|
||||
if (!error
|
||||
&& !got_int
|
||||
&& linerest != 0
|
||||
// TODO: should we handle CTRL-Z differently here for 'endoffile'?
|
||||
&& !(!curbuf->b_p_bin
|
||||
&& fileformat == EOL_DOS
|
||||
&& *line_start == Ctrl_Z
|
||||
&& ptr == line_start + 1))
|
||||
&& linerest != 0)
|
||||
{
|
||||
// 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 = TRUE;
|
||||
}
|
||||
*ptr = NUL;
|
||||
len = (colnr_T)(ptr - line_start + 1);
|
||||
if (ml_append(lnum, line_start, len, newfile) == FAIL)
|
||||
|
Reference in New Issue
Block a user