tmuxp.workspace.builder.ClassicWorkspaceBuilder
-
Load workspace from workspace
dictobject.Description#
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_progress : t
.Callable [[str], None] | None
- on_before_script : t
.Callable [[], None] | None
- on_script_output : t
.Callable [[str], None] | None
- on_build_event : t
.Callable [[dict[str, t.Any ]], 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 alistofwindows. -
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 beforebefore_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 frombefore_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
- session_exists (self, session_name: str) bool
-
Return true if tmux session already exists.
- Parameters
-
-
session_name(str) #
-
-
Build tmux workspace in session.
Description#
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
- PowerShell
LibTmux.Workspace\Invoke-TmuxWorkspaceApplies the exact reviewed
-Planafter PowerShell confirmation.-WhatIfpreviews without applying it; application is detached. - Julia
LibTmuxWorkspace.applyApplies a prepared
WorkspacePlanon an explicitServer, detached and under one deadline. Existing session names fail unless reuse is explicit. - Ruby
- Lua No source-verified Lua equivalent is recorded for this operation.
- TypeScript
- Rust
- Go
- Java
- C#
- C++
- Swift
- Kotlin No source-verified Kotlin equivalent is recorded for this operation.
- Scala No source-verified Scala equivalent is recorded for this operation.
- F# No source-verified F# equivalent is recorded for this operation.
- PowerShell
-
Return
libtmux.Windowiterating through session config dict.Description#
Generator yielding
libtmux.Windowby iterating throughsession_config['windows'].Applies
window_optionsto window.
-
Return
libtmux.Paneiterating through window config dict.Description#
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.
Description#
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.