@@ -101,17 +101,24 @@ local function find_claudecode_terminal_window()
101101 return nil
102102 end
103103
104- -- Find the window containing this buffer
104+ -- Find the window containing this buffer.
105+ -- Prefer a normal split window, but fall back to a floating terminal window (e.g. Snacks position="float").
106+ local floating_fallback = nil
107+
105108 for _ , win in ipairs (vim .api .nvim_list_wins ()) do
106109 if vim .api .nvim_win_get_buf (win ) == terminal_bufnr then
107110 local win_config = vim .api .nvim_win_get_config (win )
108- if not (win_config .relative and win_config .relative ~= " " ) then
111+ local is_floating = win_config .relative and win_config .relative ~= " "
112+
113+ if is_floating then
114+ floating_fallback = floating_fallback or win
115+ else
109116 return win
110117 end
111118 end
112119 end
113120
114- return nil
121+ return floating_fallback
115122end
116123
117124--- Create a split based on configured layout
@@ -619,11 +626,17 @@ local function setup_new_buffer(
619626 term_tab = vim .api .nvim_win_get_tabpage (terminal_win )
620627 end )
621628 if term_tab == current_tab then
622- local terminal_config = config .terminal or {}
623- local split_width = terminal_config .split_width_percentage or 0.30
624- local total_width = vim .o .columns
625- local terminal_width = math.floor (total_width * split_width )
626- pcall (vim .api .nvim_win_set_width , terminal_win , terminal_width )
629+ local win_config = vim .api .nvim_win_get_config (terminal_win )
630+ local is_floating = win_config .relative and win_config .relative ~= " "
631+
632+ -- Only resize split terminals. Floating terminals control their own sizing.
633+ if not is_floating then
634+ local terminal_config = config .terminal or {}
635+ local split_width = terminal_config .split_width_percentage or 0.30
636+ local total_width = vim .o .columns
637+ local terminal_width = math.floor (total_width * split_width )
638+ pcall (vim .api .nvim_win_set_width , terminal_win , terminal_width )
639+ end
627640 end
628641 end
629642 end
@@ -1015,14 +1028,20 @@ function M._cleanup_diff_state(tab_name, reason)
10151028 local terminal_ok , terminal_module = pcall (require , " claudecode.terminal" )
10161029 if terminal_ok and diff_data .had_terminal_in_original then
10171030 pcall (terminal_module .ensure_visible )
1018- -- And restore its configured width if it is visible
1031+ -- And restore its configured width if it is visible.
1032+ -- (We intentionally do not resize floating terminals.)
10191033 local terminal_win = find_claudecode_terminal_window ()
10201034 if terminal_win and vim .api .nvim_win_is_valid (terminal_win ) then
1021- local terminal_config = config .terminal or {}
1022- local split_width = terminal_config .split_width_percentage or 0.30
1023- local total_width = vim .o .columns
1024- local terminal_width = math.floor (total_width * split_width )
1025- pcall (vim .api .nvim_win_set_width , terminal_win , terminal_width )
1035+ local win_config = vim .api .nvim_win_get_config (terminal_win )
1036+ local is_floating = win_config .relative and win_config .relative ~= " "
1037+
1038+ if not is_floating then
1039+ local terminal_config = config .terminal or {}
1040+ local split_width = terminal_config .split_width_percentage or 0.30
1041+ local total_width = vim .o .columns
1042+ local terminal_width = math.floor (total_width * split_width )
1043+ pcall (vim .api .nvim_win_set_width , terminal_win , terminal_width )
1044+ end
10261045 end
10271046 end
10281047 else
@@ -1038,14 +1057,20 @@ function M._cleanup_diff_state(tab_name, reason)
10381057 end )
10391058 end
10401059
1041- -- After closing the diff in the same tab, restore terminal width if visible
1060+ -- After closing the diff in the same tab, restore terminal width if visible.
1061+ -- (We intentionally do not resize floating terminals.)
10421062 local terminal_win = find_claudecode_terminal_window ()
10431063 if terminal_win and vim .api .nvim_win_is_valid (terminal_win ) then
1044- local terminal_config = config .terminal or {}
1045- local split_width = terminal_config .split_width_percentage or 0.30
1046- local total_width = vim .o .columns
1047- local terminal_width = math.floor (total_width * split_width )
1048- pcall (vim .api .nvim_win_set_width , terminal_win , terminal_width )
1064+ local win_config = vim .api .nvim_win_get_config (terminal_win )
1065+ local is_floating = win_config .relative and win_config .relative ~= " "
1066+
1067+ if not is_floating then
1068+ local terminal_config = config .terminal or {}
1069+ local split_width = terminal_config .split_width_percentage or 0.30
1070+ local total_width = vim .o .columns
1071+ local terminal_width = math.floor (total_width * split_width )
1072+ pcall (vim .api .nvim_win_set_width , terminal_win , terminal_width )
1073+ end
10491074 end
10501075 end
10511076
0 commit comments