tmuxp.workspace.builder.ClassicWorkspaceBuilder
Python
- Python
- Ruby Unavailable
- Lua Unavailable
- TypeScript Unavailable
- Rust Unavailable
- Go Unavailable
- Java Unavailable
- .NET Unavailable
- C++ Unavailable
- Swift Unavailable
-
Load workspace from workspace
dictobject.Build tmux workspace from a configuration. Creates and names windows, sets options, splits windows into panes.
Examples
>>> import yaml>>> session_config = yaml.load('''... session_name: sample workspace... start_directory: '~'... windows:... - window_name: editor... layout: main-vertical... panes:... - shell_command:... - cmd: vim... - shell_command:... - cmd: echo "hey"...... - window_name: logging... panes:... - shell_command:... - cmd: tail | echo 'hi'...... - window_name: test... panes:... - shell_command:... - cmd: htop... ''', Loader=yaml.Loader)>>> builder = ClassicWorkspaceBuilder(session_config=session_config, server=server)New session:
>>> builder.build()>>> new_session = builder.session>>> new_session.name == 'sample workspace'True>>> len(new_session.windows)3>>> sorted([window.name for window in new_session.windows])['editor', 'logging', 'test']Existing session:
>>> len(session.windows)1>>> builder.build(session=session)_Caveat:_ Preserves old session name:
>>> session.name == 'sample workspace'False>>> len(session.windows)3>>> sorted([window.name for window in session.windows])['editor', 'logging', 'test']Progress callback:
>>> calls: list[str] = []>>> progress_cfg = {... "session_name": "progress-demo",... "windows": [{"window_name": "main", "panes": [{"shell_command": []}]}],... }>>> builder = ClassicWorkspaceBuilder(... session_config=progress_cfg,... server=server,... on_progress=calls.append,... )>>> builder.build()>>> "Workspace built" in callsTrueBefore-script hook:
>>> hook_calls: list[bool] = []>>> no_script_cfg = {... "session_name": "hook-demo",... "windows": [{"window_name": "main", "panes": [{"shell_command": []}]}],... }>>> builder = ClassicWorkspaceBuilder(... session_config=no_script_cfg,... server=server,... on_before_script=lambda: hook_calls.append(True),... )>>> builder.build()>>> hook_calls # no before_script in config, callback not fired[]Script output hook:
>>> script_lines: list[str] = []>>> no_script_cfg2 = {... "session_name": "script-output-demo",... "windows": [{"window_name": "main", "panes": [{"shell_command": []}]}],... }>>> builder = ClassicWorkspaceBuilder(... session_config=no_script_cfg2,... server=server,... on_script_output=script_lines.append,... )>>> builder.build()>>> script_lines # no before_script in config, callback not fired[]Build events hook:
>>> events: list[dict] = []>>> event_cfg = {... "session_name": "events-demo",... "windows": [{"window_name": "main", "panes": [{"shell_command": []}]}],... }>>> builder = ClassicWorkspaceBuilder(... session_config=event_cfg,... server=server,... on_build_event=events.append,... )>>> builder.build()>>> [e["event"] for e in events]['session_created', 'window_started', 'pane_creating','window_done', 'workspace_built']>>> next(e for e in events if e["event"] == "session_created")["session_pane_total"]1Build events with before_script:
before_script_startedfires before the script runs;before_script_donefires infinally(success or failure).>>> script_events: list[dict] = []>>> script_event_cfg = {... "session_name": "script-events-demo",... "before_script": "echo hello",... "windows": [{"window_name": "main", "panes": [{"shell_command": []}]}],... }>>> builder = ClassicWorkspaceBuilder(... session_config=script_event_cfg,... server=server,... on_build_event=script_events.append,... )>>> builder.build()>>> event_names = [e["event"] for e in script_events]>>> "before_script_started" in event_namesTrue>>> "before_script_done" in event_namesTrue>>> bs_start = event_names.index("before_script_started")>>> bs_done = event_names.index("before_script_done")>>> win_start = event_names.index("window_started")>>> bs_start < bs_done < win_startTrueDiscussed in Python workspace builder behavior , Python workspace internal API
Members
- on_before_script : t.Callable[[], None] | None
- __init__ ( self , session_config : dict[str, t.Any] , server : Server , plugins : list[t.Any] | None = None , on_progress : t.Callable[[str], None] | None = None , on_before_script : t.Callable[[], None] | None = None , on_script_output : t.Callable[[str], None] | None = None , on_build_event : t.Callable[[dict[str, t.Any]], None] | None = None ) None
-
Initialize workspace loading.
- Parameters
-
-
session_config ( dict[str, t.Any] ) – session config, includes a
listofwindows. -
server ( Server ) – tmux server to build session in
-
plugins ( list[t.Any] | None ) – plugins to be used for this session
-
on_progress ( t.Callable[[str], None] | None ) – callback for progress updates during building
-
on_before_script ( t.Callable[[], None] | None ) – called just before
before_scriptruns; use to clear the terminal (e.g. stop a spinner) so script output is not interleaved -
on_script_output ( t.Callable[[str], None] | None ) – called with each output line from
before_scriptsubprocess; when set, raw TTY tee is suppressed so the caller can route lines to a live panel instead -
on_build_event ( t.Callable[[dict[str, t.Any]], None] | None ) – called with a dict event at each structural build milestone (session created, window started/done, pane creating, workspace built); used by the CLI to render a live session tree
-
-
Return tmux session using in workspace builder session.
Discussed in Python workspace builder example , Python workspace internal API
-
Return true if tmux session already exists.
-
Build tmux workspace in session.
Optionally accepts
sessionto build with only session object.Without
session, it will uselibtmux.Serveratself.serverpassed in on initialization to create a new Session object.In other ports Build a session from a workspace description
- Ruby
LibTmux::Workspace::Plan#apply - Lua No source-verified Lua equivalent is recorded for this operation.
- TypeScript
builder.applyWorkspace - Rust
src.WorkspaceBuilder.build - Go
workspace.Build - Java
io.github.libtmux.workspace.WorkspaceBuilder.WorkspaceBuilder.build - .NET
LibTmux.Workspace.WorkspaceBuilder.BuildAsync - C++
libtmux::workspace::build - Swift
WorkspaceBuilder.build(_:on:)
- Ruby
-
-
Return
libtmux.Windowiterating through session config dict.Generator yielding
libtmux.Windowby iterating throughsession_config['windows'].Applies
window_optionsto window.- Parameters
- Returns
-
tuple of (
libtmux.Window,window_config) Newly created window, and the section from the tmuxp configuration that was used to create the window.
-
-
Return
libtmux.Paneiterating through window config dict.Run
shell_commandwith$ tmux send-keys.- Parameters
- Returns
-
tuple of (
libtmux.Pane,pane_config) Newly created pane, and the section from the tmuxp configuration that was used to create the pane.
-
-
Actions to apply to window after window and pane finished.
When building a tmux session, sometimes its easier to postpone things like setting options until after things are already structurally prepared.
-
Return current attached session.
-
Return True first window, used when iterating session windows.