From ee276f8758aea38205e04d839afc69e8537a2642 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sat, 25 Nov 2023 10:50:51 +0800 Subject: vim-patch:8.2.4685: when a swap file is found for a popup there is no dialog (#26207) 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 vim/vim#10073) https://github.com/vim/vim/commit/188639d75c363dffaf813e8e2209f7350ad1e871 Co-authored-by: Bram Moolenaar --- src/nvim/buffer.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/nvim/buffer.c') diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index c89d4f667a..9df886ef9a 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -930,10 +930,14 @@ static void free_buffer_stuff(buf_T *buf, int free_flags) /// Go to another buffer. Handles the result of the ATTENTION dialog. void goto_buffer(exarg_T *eap, int start, int dir, int count) { + const int save_sea = swap_exists_action; + bufref_T old_curbuf; 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); @@ -946,7 +950,7 @@ void goto_buffer(exarg_T *eap, int start, int dir, int count) // Quitting means closing the split window, nothing else. win_close(curwin, true, false); - swap_exists_action = SEA_NONE; + swap_exists_action = save_sea; swap_exists_did_quit = true; // Restore the error/interrupt/exception state if not discarded by a -- cgit