-
Notifications
You must be signed in to change notification settings - Fork 236
Open
Description
Status (2026-03-15): All libtmux blockers resolved — libtmux#635 is closed. L1, L2, L3 all shipped in libtmux v0.55.0 (2026-03-07). tmuxp pins
libtmux~=0.55.0. Phase 1 (import fixes) is complete (7/7 items, 21 tests pass). All remaining work is purely tmuxp-side — zero libtmux dependencies remain.
Summary
Tracking issue for reaching feature parity with tmuxinator (3.3.7) and teamocil (1.4.2). Based on a comprehensive source-level analysis of both projects, their importers, and the tmuxp builder/loader/CLI.
Tracking issue for libtmux-side API additions: tmux-python/libtmux#635
Phase 1: Import Fixes (No Builder/libtmux Changes) — COMPLETE
All 7 items done, 21 tests pass.
- I1. tmuxinator
pre/pre_windowmapping bugs — fixedpre→before_script,pre_window→shell_command_before(1967487a) - I2. tmuxinator
cli_args/tmux_optionsfragile parsing — useshlex.split()for flag-aware parsing (e8016019) - I3. teamocil redundant filter loops — replace with direct assignment (
f61343a3) - I4. teamocil v1.x format support — string panes,
commandskey (f61343a3) - I5. tmuxinator missing keys —
rvm,pre_tab,startup_window,startup_pane,synchronize(5cb75946) - I6. teamocil missing keys —
focus,options,heighthandling (466fc9b2) - I7. Importer TODOs — logging for unsupported/dropped keys, remove stale TODOs (
74656db5)
Phase 2: Builder Additions (tmuxp Only)
T1. No synchronize Config Key
- Desugared — importer maps
synchronize: true/before→options: {synchronize-panes: on}andsynchronize: after→options_after: {synchronize-panes: on}. Builder already handles bothoptionsandoptions_after. No builder change needed.
T3. No shell_command_after Config Key
- Teamocil importer produces
shell_command_after(fromfilters.after), but builder never reads it. - Implementation: Read
window_config.get("shell_command_after", [])inconfig_after_window()and send to panes. ~5 lines.
T2. No Pane Title Config Key — NOW UNBLOCKED
- Previously blocked on L1 — now resolved.
Pane.set_title(title)available in libtmux v0.55.0. - Implementation: Session-level
enable_pane_titles,pane_title_position,pane_title_formatviasession.set_option(). Per-panetitleviapane.set_title(). Update tmuxinator importer for named pane syntax (pane_name: command→title+shell_command).
T4. No Session Rename Mode / --here CLI Flag
-
tmuxp loadhas no--hereflag. Always creates new windows. - Implementation: Add
--heretocli/load.py. For first window:rename_window()+send_keys("cd <root>")instead ofnew_window(). Alsorename_session()when--hereis used.
Dead Config Keys
- Pop+warn for
socket_name,config,target - Implement
clearin builder (usepane.clear()) - Implement
start_window/start_panein builder (select matching window/pane after build)
Phase 3: libtmux Additions — COMPLETE
All items shipped in libtmux v0.55.0 (2026-03-07). Issue libtmux#635 is closed.
- L1.
Pane.set_title(title)—pane.py:834-859(unblocks T2) - L2.
Server(tmux_bin=...)—server.py:131-146(unblocks tmuxinatortmux_command) - L3. Pre-execution
logger.debug—common.py:263-268(unblocks T9)
Phase 4: New CLI Commands
T5. No stop / kill CLI Command
- tmuxp has no
stopcommand. Addtmuxp stop <session>— find session, callsession.kill(). Runon_project_stophook before kill.
T10. Missing Config Management Commands
- Missing:
new,copy,delete. Straightforward file operations.
Phase 5: CLI Flags & Larger Features
T7. --no-shell-command-before CLI Flag
- Skip
shell_command_beforefor debugging. Equivalent to tmuxinator--no-pre-window. Simple flag addition.
T9. --debug / Dry-Run CLI Flag — NOW UNBLOCKED
- Previously blocked on L3 — now resolved. Pre-execution logging available in libtmux v0.55.0.
- Implementation: Add
--debugflag tocli/load.py. Capture DEBUG-level log output from libtmux to show tmux commands that would be executed.
T6. No Lifecycle Hook Config Keys
- Config-driven shell command hooks (
on_project_start,on_project_exit, etc.). Complex, needs design. Depends on T5 foron_project_stop.
T8. Config Templating
- User-defined variable interpolation (Jinja2 or
string.Template). Significant architectural addition.
Dead Config Keys
Keys produced by importers but silently ignored by the builder:
| Key | Producer | Issue |
|---|---|---|
config |
tmuxinator | Dead data — extracted -f path unused |
socket_name |
tmuxinator | Dead data — CLI uses -L flag |
clear |
teamocil | Builder doesn't read it (libtmux has Pane.clear()) |
target (pane) |
teamocil | Accidentally preserved (libtmux has Pane.split(target=...)) |
shell_command_after |
teamocil | Builder has no after-command support (T3) |
Progress Summary
| Phase | Status | Items |
|---|---|---|
| Phase 1: Import Fixes | COMPLETE | 7/7 |
| Phase 2: Builder Additions | In progress | 1/5 done (T1 desugared) |
| Phase 3: libtmux Additions | COMPLETE | 3/3 |
| Phase 4: CLI Commands | Not started | 0/2 |
| Phase 5: CLI Flags & Features | Not started | 0/4 |
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels