Workspace ManagerstableAPI Reference

Choose documentation 3

stable

Current version

stable
English

Prerelease This site documents an alpha of libtmux. Its structure, URLs and APIs are subject to change.

tmuxp.workspace.builder.ClassicWorkspaceBuilder

class tmuxp.workspace.builder.ClassicWorkspaceBuilder

Load workspace from workspace dict object.

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 calls
True

Before-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"]
1

Build events with before_script: before_script_started fires before the script runs; before_script_done fires in finally (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_names
True
>>> "before_script_done" in event_names
True
>>> 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_start
True

Discussed in Python workspace builder behavior , Python workspace internal API

Members

Initialize workspace loading.

Description#

Notes

TODO: Initialize libtmux.Session from here, in self.session.

Parameters

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.

Parameters
build ( self, session: Session | None = None, append: bool = False, ) → None

Build tmux workspace in session.

Description#

Optionally accepts session to build with only session object.

Without session, it will use libtmux.Server at self.server passed in on initialization to create a new Session object.

Parameters
In other ports Build a session from a workspace description

Return libtmux.Window iterating through session config dict.

Description#

Generator yielding libtmux.Window by iterating through session_config['windows'].

Applies window_options to 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.Pane iterating through window config dict.

Description#

Run shell_command with $ 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.

Parameters

Return current attached session.

Return True first window, used when iterating session windows.

Parameters
Esc

Type to search.

Reference preview Open reference