From 8f9090b8c948611d21f8baad011b9e54f2de3841 Mon Sep 17 00:00:00 2001 From: Philippe Massicotte Date: Wed, 8 Apr 2026 09:56:08 -0400 Subject: [PATCH 1/4] fix(edit.lua): ensure proper termination of external terminal sessions --- lua/r/edit.lua | 19 +++++++++++++------ lua/r/lsp/init.lua | 5 +++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lua/r/edit.lua b/lua/r/edit.lua index 6c0096e0..3edcca79 100644 --- a/lua/r/edit.lua +++ b/lua/r/edit.lua @@ -126,12 +126,19 @@ M.add_for_deletion = function(fname) end M.vim_leave = function() - if vim.g.R_Nvim_status == 7 and config.auto_quit then - require("r.run").quit_R("nosave") - local i = 30 - while i > 0 and vim.g.R_Nvim_status == 7 do - vim.wait(100) - i = i - 1 + local r_ready = vim.g.R_Nvim_status == 7 + local auto_quit_pending = vim.g.R_nvim_auto_quit_pending + if (r_ready or auto_quit_pending) and config.auto_quit then + vim.g.R_nvim_auto_quit_pending = nil + if config.external_term ~= "" then + require("r.send").cmd('quit(save = "no")') + else + require("r.run").quit_R("nosave") + local i = 30 + while i > 0 and vim.g.R_Nvim_status == 7 do + vim.wait(100) + i = i - 1 + end end end diff --git a/lua/r/lsp/init.lua b/lua/r/lsp/init.lua index 492c72c5..31e961e7 100644 --- a/lua/r/lsp/init.lua +++ b/lua/r/lsp/init.lua @@ -758,6 +758,11 @@ end ---@param signal integer Number describing the signal used to terminate (if any) ---@param client integer Client handle local function on_exit(code, signal, client) + local cfg = require("r.config").get_config() + if vim.g.R_Nvim_status == 7 and cfg.auto_quit and cfg.external_term ~= "" then + vim.g.R_nvim_auto_quit_pending = true + end + vim.g.R_Nvim_status = 1 if code == 0 then return end local msg = string.format("r_ls exit (%d, %d, %d)", code, signal, client) From 4f78682c613b85e5a4a42613f5e37393bb9975ed Mon Sep 17 00:00:00 2001 From: Philippe Massicotte Date: Wed, 8 Apr 2026 15:59:55 -0400 Subject: [PATCH 2/4] refactor(edit.lua): simplify vim_leave function logic by removing redundant variable assignments and conditions --- lua/r/edit.lua | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lua/r/edit.lua b/lua/r/edit.lua index 3edcca79..b611e0e8 100644 --- a/lua/r/edit.lua +++ b/lua/r/edit.lua @@ -126,11 +126,9 @@ M.add_for_deletion = function(fname) end M.vim_leave = function() - local r_ready = vim.g.R_Nvim_status == 7 - local auto_quit_pending = vim.g.R_nvim_auto_quit_pending - if (r_ready or auto_quit_pending) and config.auto_quit then - vim.g.R_nvim_auto_quit_pending = nil - if config.external_term ~= "" then + if config.auto_quit then + if vim.g.R_Nvim_status == 7 or vim.g.R_nvim_auto_quit_pending then + vim.g.R_nvim_auto_quit_pending = nil require("r.send").cmd('quit(save = "no")') else require("r.run").quit_R("nosave") From c9e61a1a277e2618a232dc30eb0744ac0593cf59 Mon Sep 17 00:00:00 2001 From: Philippe Massicotte Date: Wed, 8 Apr 2026 16:21:49 -0400 Subject: [PATCH 3/4] refactor(edit.lua): remove redundant quit logic to simplify vim_leave function --- lua/r/edit.lua | 7 ------- 1 file changed, 7 deletions(-) diff --git a/lua/r/edit.lua b/lua/r/edit.lua index b611e0e8..0e9f9c76 100644 --- a/lua/r/edit.lua +++ b/lua/r/edit.lua @@ -130,13 +130,6 @@ M.vim_leave = function() if vim.g.R_Nvim_status == 7 or vim.g.R_nvim_auto_quit_pending then vim.g.R_nvim_auto_quit_pending = nil require("r.send").cmd('quit(save = "no")') - else - require("r.run").quit_R("nosave") - local i = 30 - while i > 0 and vim.g.R_Nvim_status == 7 do - vim.wait(100) - i = i - 1 - end end end From a16120e017f4524376b9904a5c3f5bba40414111 Mon Sep 17 00:00:00 2001 From: Philippe Massicotte Date: Wed, 8 Apr 2026 16:54:24 -0400 Subject: [PATCH 4/4] fix(lsp/init.lua): remove unnecessary check for external_term in on_exit function --- lua/r/lsp/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/r/lsp/init.lua b/lua/r/lsp/init.lua index 31e961e7..9b2a539e 100644 --- a/lua/r/lsp/init.lua +++ b/lua/r/lsp/init.lua @@ -759,7 +759,7 @@ end ---@param client integer Client handle local function on_exit(code, signal, client) local cfg = require("r.config").get_config() - if vim.g.R_Nvim_status == 7 and cfg.auto_quit and cfg.external_term ~= "" then + if vim.g.R_Nvim_status == 7 and cfg.auto_quit then vim.g.R_nvim_auto_quit_pending = true end