fix: v0.10.3 no tmux right-click menus; close split panes
build-deb / Deploy to CT 126 (push) Successful in 19s
build-deb / Lint, test, package (push) Successful in 3m9s
build-deb / Notify on failure (push) Skipped

Right-clicking a pane opened tmux's menu, whose Split entries left a stray
pane next to Claude (and whose Kill entries could end it). Unbind the
right-click menus; add --unsplit and a palette entry that closes extra
panes and keeps Claude's. Closes #52

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WHRLCCdXYm41Qx5kNhehaP
This commit is contained in:
2026-10-13 01:48:04 -04:00
co-authored by Claude Opus 5.5
parent 24d71131e8
commit ab7e127f70
6 changed files with 63 additions and 3 deletions
+21 -2
View File
@@ -15,7 +15,7 @@
#
# The web UI calls `devdesk attach --list | --repo NAME | --alerts | --investigate SESSION UID |
# --upload SESSION FILE BYTES | --new NAME [PROJECT] [--worktree] | --rename OLD NEW | --end NAME |
# --last-reply NAME | --existing NAME`
# --last-reply NAME | --unsplit NAME | --existing NAME`
# through ttyd; those print JSON.
set -euo pipefail
@@ -182,6 +182,25 @@ dd_worktree_end() {
fi
}
# --unsplit NAME (devdesk#52): close the extra panes a split left in the session's
# windows. Each window keeps one pane: Claude's in the claude window, else the
# first. Prints {ok, closed}.
cmd_unsplit() {
[ $# -eq 1 ] || dd_die "usage: devdesk attach --unsplit NAME"
dd_valid_name "$1" || dd_die "invalid session name: $1"
{ dd_server_up && dd_tmux has-session -t "=$1" 2>/dev/null; } || dd_die "session '$1' isn't running"
local win keep pane closed=0
while read -r win; do
keep=$(dd_tmux list-panes -t "=$1:$win" -F '#{pane_id} #{pane_start_command}' | awk '/devdesk-claude-run/ { print $1; exit }')
[ -n "$keep" ] || keep=$(dd_tmux list-panes -t "=$1:$win" -F '#{pane_id}' | head -n 1)
while read -r pane; do
[ "$pane" = "$keep" ] && continue
dd_tmux kill-pane -t "$pane" && closed=$((closed + 1))
done < <(dd_tmux list-panes -t "=$1:$win" -F '#{pane_id}')
done < <(dd_tmux list-windows -t "=$1" -F '#{window_index}')
jq -cMn --argjson c "$closed" '{ok: true, closed: $c}'
}
cmd_rename() {
[ $# -eq 2 ] || dd_die "usage: devdesk rename OLD NEW"
local old=$1 new=$2 running=0
@@ -366,7 +385,7 @@ cmd_attach() {
dd_linger
return
;;
--peek | --search | --last-reply)
--peek | --search | --last-reply | --unsplit)
local action=${1#--}
shift
"cmd_${action//-/_}" "$@"