From 2d672d1a62d3c1c22e4b13c33927542443743b9f Mon Sep 17 00:00:00 2001 From: Thomas Kosiewski Date: Fri, 13 Jun 2025 10:30:33 +0200 Subject: [PATCH] feat: add auto terminal provider detection Add automatic terminal provider detection that tries snacks first, then falls back to native terminal silently. Update default config to use "auto" provider for better user experience. Change-Id: I1332f52ed466d0304faf7244d8d3e39d49dd4112 Signed-off-by: Thomas Kosiewski --- README.md | 2 +- lua/claudecode/init.lua | 2 +- lua/claudecode/terminal.lua | 12 ++++++++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0017697..bf1b128 100644 --- a/README.md +++ b/README.md @@ -199,7 +199,7 @@ See [DEVELOPMENT.md](./DEVELOPMENT.md) for build instructions and development gu terminal = { split_side = "right", split_width_percentage = 0.3, - provider = "snacks", -- or "native" + provider = "auto", -- "auto" (default), "snacks", or "native" auto_close = true, -- Auto-close terminal after command completion }, diff --git a/lua/claudecode/init.lua b/lua/claudecode/init.lua index d8f59ec..996ff8e 100644 --- a/lua/claudecode/init.lua +++ b/lua/claudecode/init.lua @@ -74,7 +74,7 @@ M.state = { ---@alias ClaudeCode.TerminalOpts { \ --- split_side?: "left"|"right", \ --- split_width_percentage?: number, \ ---- provider?: "snacks"|"native", \ +--- provider?: "auto"|"snacks"|"native", \ --- show_native_term_exit_tip?: boolean } --- ---@alias ClaudeCode.SetupOpts { \ diff --git a/lua/claudecode/terminal.lua b/lua/claudecode/terminal.lua index e3f83cd..ff55c73 100644 --- a/lua/claudecode/terminal.lua +++ b/lua/claudecode/terminal.lua @@ -18,7 +18,7 @@ local claudecode_server_module = require("claudecode.server.init") local config = { split_side = "right", split_width_percentage = 0.30, - provider = "snacks", + provider = "auto", show_native_term_exit_tip = true, terminal_cmd = nil, auto_close = true, @@ -48,7 +48,15 @@ end local function get_provider() local logger = require("claudecode.logger") - if config.provider == "snacks" then + if config.provider == "auto" then + -- Try snacks first, then fallback to native silently + local snacks_provider = load_provider("snacks") + if snacks_provider and snacks_provider.is_available() then + logger.debug("terminal", "Auto-detected snacks terminal provider") + return snacks_provider + end + -- Fall through to native provider + elseif config.provider == "snacks" then local snacks_provider = load_provider("snacks") if snacks_provider and snacks_provider.is_available() then return snacks_provider