Skip to content

feat: tmuxinator/teamocil feature parity (recut)#1046

Open
tony wants to merge 1 commit into
masterfrom
parity-recut
Open

feat: tmuxinator/teamocil feature parity (recut)#1046
tony wants to merge 1 commit into
masterfrom
parity-recut

Conversation

@tony

@tony tony commented Jun 6, 2026

Copy link
Copy Markdown
Member

Summary

This is a replacement recut for #1025. It keeps the parity work in three reviewable commits:

  • importer parity for tmuxinator/teamocil conversion
  • runtime/load parity for lifecycle hooks, here mode, pane titles, synchronization, templating, and config-management commands
  • docs, examples, changelog, and documented example tests

Closes #1031.

Review Fixes Folded In

  • Avoids respawning the active pane running tmuxp load --here.
  • Runs shell_command_after before synchronized panes are enabled.
  • Validates tmuxp delete targets before unlinking files.
  • Lets lifecycle hooks run without the previous undocumented timeout.
  • Normalizes --here outside tmux before existing-session handling.
  • Expands workspace-level config fallback paths before Server creation, including ./tmux.conf relative to the workspace file and ~/tmux.conf via HOME.

Parity Check

The final tree matches the original parity branch except for the intentional workspace config path-expansion fix and its regression coverage:

  • src/tmuxp/cli/load.py
  • tests/cli/test_load.py

Verification

Run before each commit and again at branch tip:

$ unset NO_COLOR; rm -rf docs/_build; uv run ruff check . --fix --show-fixes; uv run ruff format .; uv run mypy .; uv run py.test --reruns 0 -vvv; just build-docs;

Final branch-tip results:

  • uv run ruff check . --fix --show-fixes: all checks passed
  • uv run ruff format .: 144 files left unchanged
  • uv run mypy .: success, no issues in 144 source files
  • uv run py.test --reruns 0 -vvv: 1038 passed, 2 skipped
  • just build-docs: build succeeded with 76 existing warnings

NO_COLOR was unset for the gates because this local shell exports NO_COLOR=1, while existing color tests assert ANSI output in forced-color cases.

@codecov

codecov Bot commented Jun 6, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.92216% with 74 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.37%. Comparing base (91ac851) to head (e97cb73).

Files with missing lines Patch % Lines
src/tmuxp/cli/load.py 75.21% 23 Missing and 6 partials ⚠️
src/tmuxp/workspace/builder/classic.py 86.88% 9 Missing and 7 partials ⚠️
src/tmuxp/workspace/importers.py 90.90% 3 Missing and 10 partials ⚠️
src/tmuxp/cli/copy.py 87.80% 3 Missing and 2 partials ⚠️
src/tmuxp/cli/delete.py 92.10% 2 Missing and 1 partial ⚠️
src/tmuxp/util.py 90.32% 1 Missing and 2 partials ⚠️
src/tmuxp/cli/import_config.py 90.00% 2 Missing ⚠️
src/tmuxp/cli/new.py 96.29% 1 Missing and 1 partial ⚠️
src/tmuxp/workspace/loader.py 97.95% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1046      +/-   ##
==========================================
+ Coverage   82.56%   84.37%   +1.81%     
==========================================
  Files          31       35       +4     
  Lines        2770     3347     +577     
  Branches      518      663     +145     
==========================================
+ Hits         2287     2824     +537     
- Misses        346      361      +15     
- Partials      137      162      +25     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@tony tony force-pushed the parity-recut branch 2 times, most recently from dfaac96 to 4e9116c Compare June 7, 2026 11:46
@tony tony force-pushed the parity-recut branch 2 times, most recently from d294b1c to 8c05c5d Compare July 4, 2026 15:44
why: tmuxp lacked several tmuxinator and teamocil workflows, so configs
from those tools lost behavior on import and users missed the lifecycle
and session-management commands they relied on.

what:
- Add session lifecycle commands: tmuxp stop / new / copy / delete.
- Add project lifecycle hooks: on_project_start / restart / exit / stop.
- Add {{ variable }} config templating, filled via --set at load time.
- Add pane titles and window keys (synchronize, shell_command_after,
  clear).
- Add tmuxp load flags: --here, --no-shell-command-before, --debug.
- Broaden tmuxinator/teamocil imports: hooks, named panes, startup
  focus, synchronized windows, tmux CLI args, teamocil v1.x format.
- Extend the builder protocol build() with here= for current-window
  loads so all builders share the contract.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

here mode level 1: match teamocil — use set_environment + respawn-pane, keep send_keys cd only

1 participant