Skip to content

feat(snacks): add snacks_win_opts for user to override opts of Snacks.terminal.open() #65

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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,
snacks_win_opts = {}, -- Opts to pass to `Snacks.terminal.open()`
},

-- Diff Integration
Expand Down
1 change: 1 addition & 0 deletions dev-config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ return {
-- provider = "auto", -- "auto", "snacks", or "native"
-- show_native_term_exit_tip = true, -- Show exit tip for native terminal
-- auto_close = true, -- Auto-close terminal after command completion
-- snacks_win_opts = {}, -- Opts to pass to `Snacks.terminal.open()`
-- },

-- Development overrides (uncomment as needed)
Expand Down
3 changes: 2 additions & 1 deletion lua/claudecode/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@ M.state = {
--- split_side?: "left"|"right", \
--- split_width_percentage?: number, \
--- provider?: "auto"|"snacks"|"native", \
--- show_native_term_exit_tip?: boolean }
--- show_native_term_exit_tip?: boolean, \
--- snacks_win_opts?: table }
---
---@alias ClaudeCode.SetupOpts { \
--- terminal?: ClaudeCode.TerminalOpts }
Expand Down
8 changes: 8 additions & 0 deletions lua/claudecode/terminal.lua
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ local config = {
show_native_term_exit_tip = true,
terminal_cmd = nil,
auto_close = true,
snacks_win_opts = {},
}

-- Lazy load providers
Expand Down Expand Up @@ -91,6 +92,9 @@ local function build_config(opts_override)
split_width_percentage = function(val)
return type(val) == "number" and val > 0 and val < 1
end,
snacks_win_opts = function(val)
return type(val) == "table"
end,
}
for key, val in pairs(opts_override) do
if effective_config[key] ~= nil and validators[key] and validators[key](val) then
Expand All @@ -102,6 +106,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,
snacks_win_opts = effective_config.snacks_win_opts,
}
end

Expand Down Expand Up @@ -179,6 +184,7 @@ end
-- @field user_term_config.split_width_percentage number Percentage of screen width (0.0 to 1.0, default: 0.30).
-- @field user_term_config.provider string 'snacks' or 'native' (default: 'snacks').
-- @field user_term_config.show_native_term_exit_tip boolean Show tip for exiting native terminal (default: true).
-- @field user_term_config.snacks_win_opts table Opts to pass to `Snacks.terminal.open()` (default: {}).
-- @param p_terminal_cmd string|nil The command to run in the terminal (from main config).
function M.setup(user_term_config, p_terminal_cmd)
if user_term_config == nil then -- Allow nil, default to empty table silently
Expand Down Expand Up @@ -210,6 +216,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 == "snacks_win_opts" and type(v) == "table" then
config[k] = v
else
vim.notify("claudecode.terminal.setup: Invalid value for " .. k .. ": " .. tostring(v), vim.log.levels.WARN)
end
Expand Down
4 changes: 2 additions & 2 deletions lua/claudecode/terminal/snacks.lua
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,12 @@ local function build_opts(config, env_table, focus)
start_insert = focus,
auto_insert = focus,
auto_close = false,
win = {
win = vim.tbl_deep_extend("force", {
position = config.split_side,
width = config.split_width_percentage,
height = 0,
relative = "editor",
},
}, config.snacks_win_opts or {}),
}
end

Expand Down