From 648f4c00db7964a24fefeea6c3cf64e7554d670f Mon Sep 17 00:00:00 2001 From: jleechan Date: Wed, 4 Mar 2026 21:57:01 -0800 Subject: [PATCH 1/5] WORKING: Fix split CWD inheritance and bash job notification spam - Pass inherited working directory when creating split panes (panelDirectories fallback to currentDirectory) - Suppress bash job-done "[N] Done ..." notifications in shell integration by toggling job control (set +m / set -m) around background probes - Add integration test for split/tab CWD inheritance Co-Authored-By: Claude Opus 4.6 --- .../cmux-bash-integration.bash | 8 + Sources/Workspace.swift | 10 ++ tests/test_split_cwd_inheritance.py | 170 ++++++++++++++++++ 3 files changed, 188 insertions(+) create mode 100644 tests/test_split_cwd_inheritance.py diff --git a/Resources/shell-integration/cmux-bash-integration.bash b/Resources/shell-integration/cmux-bash-integration.bash index 85027ee4..4576212c 100644 --- a/Resources/shell-integration/cmux-bash-integration.bash +++ b/Resources/shell-integration/cmux-bash-integration.bash @@ -82,6 +82,11 @@ _cmux_prompt_command() { [[ -n "$CMUX_TAB_ID" ]] || return 0 [[ -n "$CMUX_PANEL_ID" ]] || return 0 + # Suppress bash job-done notifications for background tasks spawned below. + # Without this, every completed async probe prints "[N] Done ..." to the terminal. + local _cmux_old_monitor="${-//[^m]/}" + set +m + local now=$SECONDS local pwd="$PWD" @@ -205,6 +210,9 @@ _cmux_prompt_command() { if (( now - _CMUX_PORTS_LAST_RUN >= 10 )); then _cmux_ports_kick fi + + # Restore job control if it was previously enabled. + [[ -n "$_cmux_old_monitor" ]] && set -m } _cmux_install_prompt_command() { diff --git a/Sources/Workspace.swift b/Sources/Workspace.swift index a4a870ea..14c6475e 100644 --- a/Sources/Workspace.swift +++ b/Sources/Workspace.swift @@ -1956,11 +1956,21 @@ final class Workspace: Identifiable, ObservableObject { guard let paneId = sourcePaneId else { return nil } let inheritedConfig = inheritedTerminalConfig(preferredPanelId: panelId, inPane: paneId) + // Inherit working directory: prefer the source panel's reported cwd, + // fall back to the workspace's current directory. + let splitWorkingDirectory: String? = panelDirectories[panelId] + ?? (currentDirectory.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty + ? nil : currentDirectory) +#if DEBUG + dlog("split.cwd panelId=\(panelId.uuidString.prefix(5)) panelDir=\(panelDirectories[panelId] ?? "nil") currentDir=\(currentDirectory) resolved=\(splitWorkingDirectory ?? "nil")") +#endif + // Create the new terminal panel. let newPanel = TerminalPanel( workspaceId: id, context: GHOSTTY_SURFACE_CONTEXT_SPLIT, configTemplate: inheritedConfig, + workingDirectory: splitWorkingDirectory, portOrdinal: portOrdinal ) panels[newPanel.id] = newPanel diff --git a/tests/test_split_cwd_inheritance.py b/tests/test_split_cwd_inheritance.py new file mode 100644 index 00000000..bc192939 --- /dev/null +++ b/tests/test_split_cwd_inheritance.py @@ -0,0 +1,170 @@ +#!/usr/bin/env python3 +""" +End-to-end test for split CWD inheritance. + +Verifies that new split panes and new workspace tabs inherit the current +working directory from the source terminal. + +Requires: + - cmux running with allowAll socket mode + - bash shell integration sourced (cmux-bash-integration.bash) + +Run with a tagged instance: + CMUX_TAG= python3 tests/test_split_cwd_inheritance.py +""" + +from __future__ import annotations + +import os +import sys +import time +from pathlib import Path + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +from cmux import cmux, cmuxError # noqa: E402 + + +def _parse_sidebar_state(text: str) -> dict[str, str]: + data: dict[str, str] = {} + for raw in (text or "").splitlines(): + line = raw.rstrip("\n") + if not line or line.startswith(" "): + continue + if "=" not in line: + continue + k, v = line.split("=", 1) + data[k.strip()] = v.strip() + return data + + +def _wait_for(predicate, timeout: float, interval: float, label: str): + start = time.time() + last_error: Exception | None = None + while time.time() - start < timeout: + try: + value = predicate() + if value: + return value + except Exception as e: + last_error = e + time.sleep(interval) + extra = "" + if last_error is not None: + extra = f" Last error: {last_error}" + raise AssertionError(f"Timed out waiting for {label}.{extra}") + + +def _wait_for_focused_cwd( + client: cmux, + expected: str, + timeout: float = 12.0, +) -> dict[str, str]: + def pred(): + state = _parse_sidebar_state(client.sidebar_state()) + cwd = state.get("focused_cwd", "") + return state if cwd == expected else None + return _wait_for(pred, timeout=timeout, interval=0.3, label=f"focused_cwd={expected!r}") + + +def _send_cd_and_wait( + client: cmux, + target: str, + timeout: float = 12.0, +) -> dict[str, str]: + """cd to target and wait for sidebar focused_cwd to reflect it.""" + client.send(f"cd {target}\n") + return _wait_for_focused_cwd(client, target, timeout=timeout) + + +def main() -> int: + tag = os.environ.get("CMUX_TAG", "") + + socket_path = None + if tag: + socket_path = f"/tmp/cmux-debug-{tag}.sock" + client = cmux(socket_path=socket_path) + client.connect() + + # Use resolved paths to avoid /tmp -> /private/tmp symlink mismatch on macOS + test_dir_a = str(Path("/tmp/cmux_split_cwd_test_a").resolve()) + test_dir_b = str(Path("/tmp/cmux_split_cwd_test_b").resolve()) + os.makedirs(test_dir_a, exist_ok=True) + os.makedirs(test_dir_b, exist_ok=True) + + passed = 0 + failed = 0 + + def check(name: str, condition: bool, detail: str = ""): + nonlocal passed, failed + if condition: + print(f" PASS {name}") + passed += 1 + else: + print(f" FAIL {name}{': ' + detail if detail else ''}") + failed += 1 + + print("=== Split CWD Inheritance Tests ===") + + # --- Setup: cd to test_dir_a in workspace 1 --- + print(" [setup] cd to test_dir_a and wait for shell integration...") + _send_cd_and_wait(client, test_dir_a) + state = _parse_sidebar_state(client.sidebar_state()) + check("setup: focused_cwd is test_dir_a", state.get("focused_cwd") == test_dir_a, + f"got {state.get('focused_cwd')!r}") + + # --- Test 1: New split inherits test_dir_a --- + print(" [test1] creating right split from test_dir_a...") + split_result = client.new_split("right") + check("split created", bool(split_result)) + + # Wait for the new pane's shell to start and report cwd. + # The split should inherit test_dir_a from the source pane. + time.sleep(4) # wait for new bash to start + run PROMPT_COMMAND + + # Use report_pwd to manually seed the new pane's cwd if shell integration + # hasn't fired yet (macOS /bin/bash can be slow). + # Instead, just wait for sidebar to converge. + try: + state = _wait_for_focused_cwd(client, test_dir_a, timeout=15.0) + check("test1: split inherited test_dir_a", True) + except AssertionError as e: + # Check what we got instead + state = _parse_sidebar_state(client.sidebar_state()) + check("test1: split inherited test_dir_a", False, + f"focused_cwd={state.get('focused_cwd')!r}") + + # --- Test 2: New workspace tab inherits CWD --- + # First cd to test_dir_b so we have a different dir to inherit + print(" [test2] cd to test_dir_b, then creating new workspace tab...") + _send_cd_and_wait(client, test_dir_b) + + tab_result = client.new_tab() + check("new tab created", bool(tab_result)) + + # New workspace should inherit test_dir_b from the previous workspace + time.sleep(4) + try: + state = _wait_for_focused_cwd(client, test_dir_b, timeout=15.0) + check("test2: new workspace inherited test_dir_b", True) + except AssertionError as e: + state = _parse_sidebar_state(client.sidebar_state()) + check("test2: new workspace inherited test_dir_b", False, + f"focused_cwd={state.get('focused_cwd')!r}") + + print(f"\n{passed} passed, {failed} failed") + + client.close() + + # Cleanup + for d in [test_dir_a, test_dir_b]: + try: + os.rmdir(d) + except OSError: + pass + + return 1 if failed else 0 + + +if __name__ == "__main__": + sys.exit(main()) From 4402a5b0ed46d44c4de81430f6b3dca16b268fe1 Mon Sep 17 00:00:00 2001 From: jleechan Date: Wed, 4 Mar 2026 22:03:05 -0800 Subject: [PATCH 2/5] Fix bash job spam: use disown instead of set +m set +m only suppresses notifications for jobs started after it runs. Jobs that complete between prompts still trigger Done output. Using disown removes jobs from bash job table entirely so bash never prints completion notifications for them. Co-Authored-By: Claude Opus 4.6 --- .../shell-integration/cmux-bash-integration.bash | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/Resources/shell-integration/cmux-bash-integration.bash b/Resources/shell-integration/cmux-bash-integration.bash index 4576212c..1cfd1919 100644 --- a/Resources/shell-integration/cmux-bash-integration.bash +++ b/Resources/shell-integration/cmux-bash-integration.bash @@ -62,7 +62,7 @@ _cmux_report_tty_once() { _CMUX_TTY_REPORTED=1 { _cmux_send "report_tty $_CMUX_TTY_NAME --tab=$CMUX_TAB_ID --panel=$CMUX_PANEL_ID" - } >/dev/null 2>&1 & + } >/dev/null 2>&1 & disown } _cmux_ports_kick() { @@ -74,7 +74,7 @@ _cmux_ports_kick() { _CMUX_PORTS_LAST_RUN=$SECONDS { _cmux_send "ports_kick --tab=$CMUX_TAB_ID --panel=$CMUX_PANEL_ID" - } >/dev/null 2>&1 & + } >/dev/null 2>&1 & disown } _cmux_prompt_command() { @@ -82,11 +82,6 @@ _cmux_prompt_command() { [[ -n "$CMUX_TAB_ID" ]] || return 0 [[ -n "$CMUX_PANEL_ID" ]] || return 0 - # Suppress bash job-done notifications for background tasks spawned below. - # Without this, every completed async probe prints "[N] Done ..." to the terminal. - local _cmux_old_monitor="${-//[^m]/}" - set +m - local now=$SECONDS local pwd="$PWD" @@ -128,7 +123,7 @@ _cmux_prompt_command() { { local qpwd="${pwd//\"/\\\"}" _cmux_send "report_pwd \"${qpwd}\" --tab=$CMUX_TAB_ID --panel=$CMUX_PANEL_ID" - } >/dev/null 2>&1 & + } >/dev/null 2>&1 & disown fi # Git branch/dirty can change without a directory change (e.g. `git checkout`), @@ -159,6 +154,7 @@ _cmux_prompt_command() { fi } >/dev/null 2>&1 & _CMUX_GIT_JOB_PID=$! + disown _CMUX_GIT_JOB_STARTED_AT=$now fi @@ -202,6 +198,7 @@ _cmux_prompt_command() { fi } >/dev/null 2>&1 & _CMUX_PR_JOB_PID=$! + disown _CMUX_PR_JOB_STARTED_AT=$now fi fi @@ -211,8 +208,6 @@ _cmux_prompt_command() { _cmux_ports_kick fi - # Restore job control if it was previously enabled. - [[ -n "$_cmux_old_monitor" ]] && set -m } _cmux_install_prompt_command() { From 00451417c2fecb5a075efff78b031a68380e7849 Mon Sep 17 00:00:00 2001 From: jleechan Date: Wed, 4 Mar 2026 22:09:11 -0800 Subject: [PATCH 3/5] Fix test false positives: verify new pane/tab identity before checking CWD MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Address PR review comments: - Test1: record original panel ID, wait for a *different* panel to report the expected CWD — prevents false pass when focus stays on source pane - Test2: record original tab ID, wait for a *different* tab with the expected CWD — prevents false pass when checking the old workspace - Remove unused `as e` exception bindings (Ruff F841) - Shell race (set -m) was already fixed in 4402a5b0 via disown Co-Authored-By: Claude Opus 4.6 --- tests/test_split_cwd_inheritance.py | 61 +++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 16 deletions(-) diff --git a/tests/test_split_cwd_inheritance.py b/tests/test_split_cwd_inheritance.py index bc192939..845c9a7c 100644 --- a/tests/test_split_cwd_inheritance.py +++ b/tests/test_split_cwd_inheritance.py @@ -59,12 +59,25 @@ def _wait_for_focused_cwd( client: cmux, expected: str, timeout: float = 12.0, + exclude_panel: str | None = None, ) -> dict[str, str]: + """Wait for focused_cwd to match expected. + + If exclude_panel is given, also require that focused_panel differs from + that value — ensuring we're checking the *new* pane, not the original. + """ def pred(): state = _parse_sidebar_state(client.sidebar_state()) cwd = state.get("focused_cwd", "") - return state if cwd == expected else None - return _wait_for(pred, timeout=timeout, interval=0.3, label=f"focused_cwd={expected!r}") + if cwd != expected: + return None + if exclude_panel and state.get("focused_panel", "") == exclude_panel: + return None + return state + label = f"focused_cwd={expected!r}" + if exclude_panel: + label += f" (panel != {exclude_panel})" + return _wait_for(pred, timeout=timeout, interval=0.3, label=label) def _send_cd_and_wait( @@ -115,42 +128,58 @@ def main() -> int: # --- Test 1: New split inherits test_dir_a --- print(" [test1] creating right split from test_dir_a...") + # Record the original panel so we can verify focus moves to the NEW pane. + original_panel = state.get("focused_panel", "") split_result = client.new_split("right") check("split created", bool(split_result)) - # Wait for the new pane's shell to start and report cwd. - # The split should inherit test_dir_a from the source pane. + # Wait for the NEW pane (different panel ID) to report test_dir_a. time.sleep(4) # wait for new bash to start + run PROMPT_COMMAND - - # Use report_pwd to manually seed the new pane's cwd if shell integration - # hasn't fired yet (macOS /bin/bash can be slow). - # Instead, just wait for sidebar to converge. try: - state = _wait_for_focused_cwd(client, test_dir_a, timeout=15.0) + state = _wait_for_focused_cwd( + client, test_dir_a, timeout=15.0, exclude_panel=original_panel, + ) + new_panel = state.get("focused_panel", "") + check("test1: focus moved to new pane", new_panel != original_panel, + f"original={original_panel!r}, current={new_panel!r}") check("test1: split inherited test_dir_a", True) - except AssertionError as e: - # Check what we got instead + except AssertionError: state = _parse_sidebar_state(client.sidebar_state()) check("test1: split inherited test_dir_a", False, - f"focused_cwd={state.get('focused_cwd')!r}") + f"focused_cwd={state.get('focused_cwd')!r}, focused_panel={state.get('focused_panel')!r}") # --- Test 2: New workspace tab inherits CWD --- # First cd to test_dir_b so we have a different dir to inherit print(" [test2] cd to test_dir_b, then creating new workspace tab...") _send_cd_and_wait(client, test_dir_b) + state = _parse_sidebar_state(client.sidebar_state()) + original_tab = state.get("tab", "") tab_result = client.new_tab() check("new tab created", bool(tab_result)) - # New workspace should inherit test_dir_b from the previous workspace + # New workspace should be a different tab AND inherit test_dir_b time.sleep(4) try: - state = _wait_for_focused_cwd(client, test_dir_b, timeout=15.0) + def _new_tab_with_cwd(): + s = _parse_sidebar_state(client.sidebar_state()) + tab_id = s.get("tab", "") + cwd = s.get("focused_cwd", "") + if tab_id != original_tab and cwd == test_dir_b: + return s + return None + + state = _wait_for( + _new_tab_with_cwd, timeout=15.0, interval=0.3, + label=f"new tab with focused_cwd={test_dir_b!r}", + ) + check("test2: focus moved to new tab", state.get("tab") != original_tab, + f"original={original_tab!r}, current={state.get('tab')!r}") check("test2: new workspace inherited test_dir_b", True) - except AssertionError as e: + except AssertionError: state = _parse_sidebar_state(client.sidebar_state()) check("test2: new workspace inherited test_dir_b", False, - f"focused_cwd={state.get('focused_cwd')!r}") + f"focused_cwd={state.get('focused_cwd')!r}, tab={state.get('tab')!r}") print(f"\n{passed} passed, {failed} failed") From 00b7357fdc7fdcd4670a003ee6cb7979c0663eaf Mon Sep 17 00:00:00 2001 From: jleechan Date: Wed, 4 Mar 2026 22:33:55 -0800 Subject: [PATCH 4/5] Add split CWD inheritance demo GIF Visual proof of fix: split panes inherit CWD from the source panel. Co-Authored-By: Claude Opus 4.6 --- docs/assets/split-cwd-inheritance-demo.gif | Bin 0 -> 849043 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/assets/split-cwd-inheritance-demo.gif diff --git a/docs/assets/split-cwd-inheritance-demo.gif b/docs/assets/split-cwd-inheritance-demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..5a1c1c9ccf14ba2e43584224a239be8fd97c6902 GIT binary patch literal 849043 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 F{tsg*JP7~* literal 0 HcmV?d00001 From 24a8056b496378ba6da2408854fdccc606b116e0 Mon Sep 17 00:00:00 2001 From: jleechan Date: Thu, 5 Mar 2026 19:54:30 -0800 Subject: [PATCH 5/5] tests: fix split CWD e2e assertion signal and early aborts --- tests/test_split_cwd_inheritance.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/tests/test_split_cwd_inheritance.py b/tests/test_split_cwd_inheritance.py index 845c9a7c..6677ee8e 100644 --- a/tests/test_split_cwd_inheritance.py +++ b/tests/test_split_cwd_inheritance.py @@ -22,7 +22,7 @@ from pathlib import Path sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) -from cmux import cmux, cmuxError # noqa: E402 +from cmux import cmux # noqa: E402 def _parse_sidebar_state(text: str) -> dict[str, str]: @@ -131,7 +131,12 @@ def main() -> int: # Record the original panel so we can verify focus moves to the NEW pane. original_panel = state.get("focused_panel", "") split_result = client.new_split("right") - check("split created", bool(split_result)) + if not split_result: + check("split created", False) + print(f"\n{passed} passed, {failed} failed") + client.close() + return 1 + check("split created", True) # Wait for the NEW pane (different panel ID) to report test_dir_a. time.sleep(4) # wait for new bash to start + run PROMPT_COMMAND @@ -142,7 +147,9 @@ def main() -> int: new_panel = state.get("focused_panel", "") check("test1: focus moved to new pane", new_panel != original_panel, f"original={original_panel!r}, current={new_panel!r}") - check("test1: split inherited test_dir_a", True) + check("test1: split inherited test_dir_a", + state.get("focused_cwd") == test_dir_a, + f"focused_cwd={state.get('focused_cwd')!r}") except AssertionError: state = _parse_sidebar_state(client.sidebar_state()) check("test1: split inherited test_dir_a", False, @@ -156,7 +163,12 @@ def main() -> int: original_tab = state.get("tab", "") tab_result = client.new_tab() - check("new tab created", bool(tab_result)) + if not tab_result: + check("new tab created", False) + print(f"\n{passed} passed, {failed} failed") + client.close() + return 1 + check("new tab created", True) # New workspace should be a different tab AND inherit test_dir_b time.sleep(4) @@ -175,7 +187,9 @@ def main() -> int: ) check("test2: focus moved to new tab", state.get("tab") != original_tab, f"original={original_tab!r}, current={state.get('tab')!r}") - check("test2: new workspace inherited test_dir_b", True) + check("test2: new workspace inherited test_dir_b", + state.get("focused_cwd") == test_dir_b, + f"focused_cwd={state.get('focused_cwd')!r}") except AssertionError: state = _parse_sidebar_state(client.sidebar_state()) check("test2: new workspace inherited test_dir_b", False,