diff --git a/README.md b/README.md index b3c31c7..1517d72 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,7 @@ For deep technical details, see [ARCHITECTURE.md](./ARCHITECTURE.md). split_width_percentage = 0.30, provider = "auto", -- "auto", "snacks", or "native" auto_close = true, + close_on_exit = true, -- Close terminal window when process exits }, -- Diff Integration diff --git a/lua/claudecode/terminal.lua b/lua/claudecode/terminal.lua index 896a5da..b8a0406 100644 --- a/lua/claudecode/terminal.lua +++ b/lua/claudecode/terminal.lua @@ -24,6 +24,7 @@ local config = { show_native_term_exit_tip = true, terminal_cmd = nil, auto_close = true, + close_on_exit = true, -- When true, closes terminal window when process exits } -- Lazy load providers @@ -102,6 +103,7 @@ local function build_config(opts_override) split_side = effective_config.split_side, split_width_percentage = effective_config.split_width_percentage, auto_close = effective_config.auto_close, + close_on_exit = effective_config.close_on_exit, } end @@ -210,6 +212,8 @@ function M.setup(user_term_config, p_terminal_cmd) config[k] = v elseif k == "auto_close" and type(v) == "boolean" then config[k] = v + elseif k == "close_on_exit" and type(v) == "boolean" then + config[k] = v else vim.notify("claudecode.terminal.setup: Invalid value for " .. k .. ": " .. tostring(v), vim.log.levels.WARN) end diff --git a/lua/claudecode/terminal/native.lua b/lua/claudecode/terminal/native.lua index d5c4a33..2a6c3eb 100644 --- a/lua/claudecode/terminal/native.lua +++ b/lua/claudecode/terminal/native.lua @@ -98,6 +98,10 @@ local function open_terminal(cmd_string, env_table, effective_config, focus) cleanup_state() -- Clear our managed state first + if not effective_config.close_on_exit then + return + end + if current_winid_for_job and vim.api.nvim_win_is_valid(current_winid_for_job) then if current_bufnr_for_job and vim.api.nvim_buf_is_valid(current_bufnr_for_job) then -- Optional: Check if the window still holds the same terminal buffer diff --git a/lua/claudecode/terminal/snacks.lua b/lua/claudecode/terminal/snacks.lua index 30c2b46..9a2b053 100644 --- a/lua/claudecode/terminal/snacks.lua +++ b/lua/claudecode/terminal/snacks.lua @@ -29,7 +29,9 @@ local function setup_terminal_events(term_instance, config) -- Clean up terminal = nil vim.schedule(function() - term_instance:close({ buf = true }) + if config.close_on_exit then + term_instance:close({ buf = true }) + end vim.cmd.checktime() end) end, { buf = true })