diff src/buffer.c @ 28319:427600f3b1c5 v8.2.4685

patch 8.2.4685: when a swap file is found for a popup there is no dialog Commit: https://github.com/vim/vim/commit/188639d75c363dffaf813e8e2209f7350ad1e871 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Apr 4 16:57:21 2022 +0100 patch 8.2.4685: when a swap file is found for a popup there is no dialog Problem: When a swap file is found for a popup there is no dialog and the buffer is loaded anyway. Solution: Silently load the buffer read-only. (closes #10073)
author Bram Moolenaar <Bram@vim.org>
date Mon, 04 Apr 2022 18:00:04 +0200
parents cdaff4db7760
children 8bc8071928ed
line wrap: on
line diff
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -150,7 +150,8 @@ buffer_ensure_loaded(buf_T *buf)
 	aco_save_T	aco;
 
 	aucmd_prepbuf(&aco, buf);
-	swap_exists_action = SEA_NONE;
+	if (swap_exists_action != SEA_READONLY)
+	    swap_exists_action = SEA_NONE;
 	open_buffer(FALSE, NULL, 0);
 	aucmd_restbuf(&aco);
     }
@@ -1053,10 +1054,12 @@ goto_buffer(
     int		count)
 {
     bufref_T	old_curbuf;
+    int		save_sea = swap_exists_action;
 
     set_bufref(&old_curbuf, curbuf);
 
-    swap_exists_action = SEA_DIALOG;
+    if (swap_exists_action == SEA_NONE)
+	swap_exists_action = SEA_DIALOG;
     (void)do_buffer(*eap->cmd == 's' ? DOBUF_SPLIT : DOBUF_GOTO,
 					     start, dir, count, eap->forceit);
     if (swap_exists_action == SEA_QUIT && *eap->cmd == 's')
@@ -1071,7 +1074,7 @@ goto_buffer(
 
 	// Quitting means closing the split window, nothing else.
 	win_close(curwin, TRUE);
-	swap_exists_action = SEA_NONE;
+	swap_exists_action = save_sea;
 	swap_exists_did_quit = TRUE;
 
 #if defined(FEAT_EVAL)