diff src/diff.c @ 18619:788d76db02ac v8.1.2302

patch 8.1.2302: :lockmarks does not work for '[ and '] Commit: https://github.com/vim/vim/commit/f4a1d1c0542df151bc59ac3b798ed198b5c71ccc Author: Bram Moolenaar <Bram@vim.org> Date: Sat Nov 16 13:50:25 2019 +0100 patch 8.1.2302: :lockmarks does not work for '[ and '] Problem: :lockmarks does not work for '[ and ']. Solution: save and restore '[ and '] marks. (James McCoy, closes https://github.com/vim/vim/issues/5222)
author Bram Moolenaar <Bram@vim.org>
date Sat, 16 Nov 2019 14:00:05 +0100
parents 41484f342f80
children 3a68dc2a1bc1
line wrap: on
line diff
--- a/src/diff.c
+++ b/src/diff.c
@@ -772,6 +772,7 @@ diff_write(buf_T *buf, diffin_T *din)
 {
     int		r;
     char_u	*save_ff;
+    int		save_lockmarks;
 
     if (din->din_fname == NULL)
 	return diff_write_buffer(buf, din);
@@ -779,9 +780,14 @@ diff_write(buf_T *buf, diffin_T *din)
     // Always use 'fileformat' set to "unix".
     save_ff = buf->b_p_ff;
     buf->b_p_ff = vim_strsave((char_u *)FF_UNIX);
+    save_lockmarks = cmdmod.lockmarks;
+    // Writing the buffer is an implementation detail of performing the diff,
+    // so it shouldn't update the '[ and '] marks.
+    cmdmod.lockmarks = TRUE;
     r = buf_write(buf, din->din_fname, NULL,
 			(linenr_T)1, buf->b_ml.ml_line_count,
 			NULL, FALSE, FALSE, FALSE, TRUE);
+    cmdmod.lockmarks = save_lockmarks;
     free_string_option(buf->b_p_ff);
     buf->b_p_ff = save_ff;
     return r;