From 4dda6de387514556f70ab7745c41a1d9057bdb36 Mon Sep 17 00:00:00 2001 From: user Date: Fri, 17 Jul 2026 17:07:08 +0200 Subject: [PATCH] fix: keep debugger pane maximized --- rvctl.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/rvctl.py b/rvctl.py index 60de5c7..5f89cab 100755 --- a/rvctl.py +++ b/rvctl.py @@ -4955,6 +4955,7 @@ def respawn_tmux_session_pane( shell_command: str | None, dry_run: bool = False, force: bool = False, + stem_instance: str | None = None, ) -> dict[str, str]: name, pane_id, _ = resolve_tmux_session_pane(raw_target, force=force) shell = os.environ.get("SHELL", "/bin/bash") @@ -4972,12 +4973,42 @@ def respawn_tmux_session_pane( } if not dry_run: subprocess.run(command, check=True) + # A debugger session contains an inner tmux and Neovim. If its host + # pane remains in a split, the inner client inherits only that short + # height and leaves an unusable empty area below the editor. Zoom the + # replacement pane after every attach/refresh/reset so it receives the + # full host window height. A later user Ctrl-a z simply restores the + # ordinary host-pane layout. + zoom_state = subprocess.run( + ["tmux", "display-message", "-p", "-t", pane_id, "#{window_zoomed_flag}"], + check=False, + text=True, + capture_output=True, + ) + if zoom_state.returncode == 0 and zoom_state.stdout.strip() != "1": + subprocess.run( + ["tmux", "resize-pane", "-Z", "-t", pane_id], + check=False, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) subprocess.run( ["tmux", "set-option", "-p", "-t", pane_id, "@stem_role", "debugger" if shell_command else "shell"], check=False, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, ) + instance_option = ["tmux", "set-option", "-p", "-t", pane_id] + if shell_command and stem_instance: + instance_option.extend(["@stem_instance", stem_instance]) + else: + instance_option.extend(["-u", "@stem_instance"]) + subprocess.run( + instance_option, + check=False, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) return details @@ -5216,6 +5247,7 @@ def run_session(config: WorkspaceConfig, args: argparse.Namespace) -> None: None, dry_run=args.dry_run, force=args.force_pane, + stem_instance=session.instance, ) print_session_target(session) print_key_values(details) @@ -5266,6 +5298,7 @@ def run_session(config: WorkspaceConfig, args: argparse.Namespace) -> None: debug_command, dry_run=args.dry_run, force=args.force_pane, + stem_instance=session.instance, ) print_key_values(pane_details) if args.dry_run: @@ -5300,6 +5333,7 @@ def run_session(config: WorkspaceConfig, args: argparse.Namespace) -> None: debug_command, dry_run=args.dry_run, force=args.force_pane, + stem_instance=session.instance, ) print_key_values(pane_details) if args.dry_run: @@ -5341,6 +5375,7 @@ def run_session(config: WorkspaceConfig, args: argparse.Namespace) -> None: pane_command, dry_run=args.dry_run, force=args.force_pane, + stem_instance=session.instance, ) print_key_values(pane_details) elif record is None and not args.dry_run and (prepared_stage is None or online): @@ -5372,6 +5407,7 @@ def run_session(config: WorkspaceConfig, args: argparse.Namespace) -> None: attach_command, dry_run=args.dry_run, force=args.force_pane, + stem_instance=session.instance, ) print_key_values(pane_details) if args.dry_run: