From d464dffd2fe5ceee77944fa9946547548b30d9e1 Mon Sep 17 00:00:00 2001 From: alf171 Date: Sun, 16 Nov 2025 14:08:38 -0500 Subject: [PATCH] fix: make :restart respect 'confirm' option #36531 When 'confirm' is set and there are unsaved buffers, :restart now prompts before quitting, matching the behavior of :quit. --- src/nvim/ex_docmd.c | 17 ++++++++++++++--- test/functional/terminal/tui_spec.lua | 8 ++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 8c8c7b6b76..18508866b8 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -4905,11 +4905,22 @@ static void ex_restart(exarg_T *eap) }); set_vim_var_list(VV_ARGV, argv_cpy); } - char *quit_cmd = (eap->do_ecmd_cmd) ? eap->do_ecmd_cmd : "qall!"; - Error err = ERROR_INIT; - if ((cmdmod.cmod_flags & CMOD_CONFIRM) && check_changed_any(false, false)) { + + bool confirm = (p_confirm || (cmdmod.cmod_flags & CMOD_CONFIRM)); + if (confirm && check_changed_any(false, false)) { return; } + + char *quit_cmd; + if (eap->do_ecmd_cmd) { + quit_cmd = eap->do_ecmd_cmd; + } else if (confirm) { + quit_cmd = "qall"; + } else { + quit_cmd = "qall!"; + } + + Error err = ERROR_INIT; restarting = true; nvim_command(cstr_as_string(quit_cmd), &err); if (ERROR_SET(&err)) { diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua index 4de9ab16d8..e7e373cba9 100644 --- a/test/functional/terminal/tui_spec.lua +++ b/test/functional/terminal/tui_spec.lua @@ -378,6 +378,14 @@ describe('TUI :restart', function() tt.feed_data('C\013') screen:expect({ any = vim.pesc('[No Name]') }) + -- Check :restart respects 'confirm' option. + tt.feed_data(':set confirm\013') + tt.feed_data(':restart\013') + screen:expect({ any = vim.pesc('Save changes to "Untitled"?') }) + tt.feed_data('C\013') + screen:expect({ any = vim.pesc('[No Name]') }) + tt.feed_data(':set noconfirm\013') + -- Check ":confirm restart " on a modified buffer. tt.feed_data(':confirm restart echo "Hello"\013') screen:expect({ any = vim.pesc('Save changes to "Untitled"?') })