diff options
-rw-r--r-- | src/fileio.c | 23 | ||||
-rw-r--r-- | src/globals.h | 4 | ||||
-rw-r--r-- | src/os_unix.c | 6 | ||||
-rw-r--r-- | src/structs.h | 3 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 21 insertions, 17 deletions
diff --git a/src/fileio.c b/src/fileio.c index 0d4511ad5..a87b70b8b 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -317,7 +317,7 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags) int using_b_fname; #endif - write_no_eol_lnum = 0; /* in case it was set by the previous read */ + curbuf->b_no_eol_lnum = 0; /* in case it was set by the previous read */ /* * If there is no file name yet, use the one for the read file. @@ -2599,10 +2599,11 @@ failed: /* * Trick: We remember if the last line of the read didn't have - * an eol for when writing it again. This is required for + * an eol even when 'binary' is off, for when writing it again with + * 'binary' on. This is required for * ":autocmd FileReadPost *.gz set bin|'[,']!gunzip" to work. */ - write_no_eol_lnum = read_no_eol_lnum; + curbuf->b_no_eol_lnum = read_no_eol_lnum; /* When reloading a buffer put the cursor at the first line that is * different. */ @@ -2650,13 +2651,17 @@ failed: FALSE, NULL, eap); if (msg_scrolled == n) msg_scroll = m; -#ifdef FEAT_EVAL +# ifdef FEAT_EVAL if (aborting()) /* autocmds may abort script processing */ return FAIL; -#endif +# endif } #endif + /* Reset now, following writes should not omit the EOL. Also, the line + * number will become invalid because of edits. */ + curbuf->b_no_eol_lnum = 0; + if (recoverymode && error) return FAIL; return OK; @@ -4560,7 +4565,7 @@ restore_backup: if (end == 0 || (lnum == end && write_bin - && (lnum == write_no_eol_lnum + && (lnum == buf->b_no_eol_lnum || (lnum == buf->b_ml.ml_line_count && !buf->b_p_eol)))) { ++lnum; /* written the line, count it */ @@ -5086,8 +5091,6 @@ nofail: { aco_save_T aco; - write_no_eol_lnum = 0; /* in case it was set by the previous read */ - /* * Apply POST autocommands. * Careful: The autocommands may call buf_write() recursively! @@ -7256,8 +7259,8 @@ buf_store_time(buf, st, fname) write_lnum_adjust(offset) linenr_T offset; { - if (write_no_eol_lnum != 0) /* only if there is a missing eol */ - write_no_eol_lnum += offset; + if (curbuf->b_no_eol_lnum != 0) /* only if there is a missing eol */ + curbuf->b_no_eol_lnum += offset; } #if defined(TEMPDIRNAMES) || defined(PROTO) diff --git a/src/globals.h b/src/globals.h index 84aaa06ad..3685fc732 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1057,10 +1057,6 @@ EXTERN pos_T last_cursormoved /* for CursorMoved event */ ; #endif -EXTERN linenr_T write_no_eol_lnum INIT(= 0); /* non-zero lnum when last line - of next binary write should - not have an end-of-line */ - #ifdef FEAT_WINDOWS EXTERN int postponed_split INIT(= 0); /* for CTRL-W CTRL-] command */ EXTERN int postponed_split_flags INIT(= 0); /* args for win_split() */ diff --git a/src/os_unix.c b/src/os_unix.c index 0234f90d1..b227c8ea9 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -4245,7 +4245,7 @@ mch_call_shell(cmd, options) * should not have one. */ if (lnum != curbuf->b_op_end.lnum || !curbuf->b_p_bin - || (lnum != write_no_eol_lnum + || (lnum != curbuf->b_no_eol_lnum && (lnum != curbuf->b_ml.ml_line_count || curbuf->b_p_eol))) @@ -4588,10 +4588,10 @@ finished: { append_ga_line(&ga); /* remember that the NL was missing */ - write_no_eol_lnum = curwin->w_cursor.lnum; + curbuf->b_no_eol_lnum = curwin->w_cursor.lnum; } else - write_no_eol_lnum = 0; + curbuf->b_no_eol_lnum = 0; ga_clear(&ga); } diff --git a/src/structs.h b/src/structs.h index aa93aaedc..afc494e2c 100644 --- a/src/structs.h +++ b/src/structs.h @@ -1564,6 +1564,9 @@ struct file_buffer /* end of buffer options */ + 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_eol; /* last line had eol when it was read */ int b_start_ffc; /* first char of 'ff' when edit started */ #ifdef FEAT_MBYTE diff --git a/src/version.c b/src/version.c index 34ef92017..ad439e13e 100644 --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 124, +/**/ 123, /**/ 122, |