2539 symbols, extracted from source. Every type name in a signature links to its own entry; every cross-reference in a doc comment resolves against the same table.
Server 1 type, 2 functions and constants
tmux(1) Server [server_manual].
-
-
Wrap
fetch_objs: treat a not-yet-started server as empty.A fresh
Servercan be introspected viaServer.sessions,Server.windows, etc. before the daemon is up. Other tmux errors, such as socket permission failures, still propagate.
-
Return True if the error indicates the tmux server is not running.
tmux signals this in two ways: 1. "no server running" (socket exists but no daemon is listening) 2. "error connecting to ... (No such file or directory)" (socket file is missing)
Session 1 type, 2 functions and constants
tmux(1) Session [session_manual].
-
Raise exception session name invalid, modeled after tmux function.
tmux(1) session names may not be empty, or include periods or colons. These delimiters are reserved for noting session, window and pane.
- Parameters
- Raises
-
-
exc.BadSessionName – Invalid session name.
-
Window 2 types, 3 functions and constants
Used for *adjustment* in Session.new_window() .
tmux(1) Window [window_manual].
- WINDOW_DIRECTION_FLAG_MAP : dict[WindowDirection, str] = { WindowDirection.Before: "-b", WindowDirection.After: "-a", }
Pane 2 types, 2 functions and constants
Used for *adjustment* in Pane.split() .
tmux(1) Pane [pane_manual].
- PANE_DIRECTION_FLAG_MAP : dict[PaneDirection, list[str]] = { # -v is assumed, but for explicitness it is passed PaneDirection.Above: ["-v", "-b"], PaneDirection.Below: ["-v"], PaneDirection.Right: ["-h"], PaneDirection.Left: ["-h", "-b"], }
Client 1 type
tmux(1) Client [client_manual].
Hooks 1 type, 3 functions and constants
Mixin for manager scoped hooks in tmux.
- HOOK_SCOPE_FLAG_MAP : dict[OptionScope, str] = { OptionScope.Server: "-g", OptionScope.Session: "", OptionScope.Window: "-w", OptionScope.Pane: "-p", }
Options 2 types
Scope used with set-option and show-option(s) commands.
Mixin for managing tmux options based on scope.
Options — Functions 6 functions and constants
-
Convert raw option strings to python types.
Examples
>>> convert_value("on")True>>> convert_value("off")False>>> convert_value("1")1>>> convert_value("50")50>>> convert_value("%50")'%50'
-
Recursively convert values to python types via
convert_value.>>> convert_values(None)
>>> convert_values("on") True >>> convert_values("off") False
>>> convert_values(["on"]) [True] >>> convert_values(["off"]) [False]
>>> convert_values({"window_index": "1"}) {'window_index': 1}
>>> convert_values({"visual-bell": "on"}) {'visual-bell': True}
- explode_arrays ( _dict : UntypedOptionsDict , force_array : bool = False ) ExplodedUntypedOptionsDict
-
Explode flat, naive options dict's option arrays.
Examples
>>> import io>>> many_more_options = io.StringIO(r'''... terminal-features[0] xterm*:clipboard:ccolour:cstyle:focus... terminal-features[1] screen*:title... ''')>>> many_more_flat_dict = parse_options_to_dict(many_more_options)>>> many_more_flat_dict == {... "terminal-features[0]": "xterm*:clipboard:ccolour:cstyle:focus",... "terminal-features[1]": "screen*:title",}True>>> explode_arrays(many_more_flat_dict) == {... "terminal-features": {0: "xterm*:clipboard:ccolour:cstyle:focus",... 1: "screen*:title"}}Truetmux arrays allow non-sequential indexes, so we need to support that:
>>> explode_arrays(parse_options_to_dict(io.StringIO(r'''... terminal-features[0] xterm*:clipboard:ccolour:cstyle:focus... terminal-features[5] screen*:title... '''))) == {... "terminal-features": {0: "xterm*:clipboard:ccolour:cstyle:focus",... 5: "screen*:title"}}TrueUse
force_array=Truefor hooks, which always use array format:>>> from libtmux._internal.sparse_array import SparseArray>>> hooks_output = io.StringIO(r'''... session-renamed[0] display-message 'renamed'... session-renamed[5] refresh-client... pane-focus-in[0] run-shell 'echo focus'... ''')>>> hooks_exploded = explode_arrays(... parse_options_to_dict(hooks_output),... force_array=True,... )Each hook becomes a SparseArray preserving indices:
>>> isinstance(hooks_exploded["session-renamed"], SparseArray)True>>> hooks_exploded["session-renamed"][0]"display-message 'renamed'">>> hooks_exploded["session-renamed"][5]'refresh-client'>>> sorted(hooks_exploded["session-renamed"].keys())[0, 5]
- explode_complex ( _dict : ExplodedUntypedOptionsDict ) ExplodedComplexUntypedOptionsDict
-
Explode arrayed option's complex values.
Examples
>>> import io>>> explode_complex(explode_arrays(parse_options_to_dict(io.StringIO(r'''... terminal-features[0] xterm*:clipboard:ccolour:cstyle:focus... terminal-features[5] screen*:title... ''')))){'terminal-features': {'xterm*': ['clipboard', 'ccolour', 'cstyle', 'focus'], 'screen*': ['title']}}>>> explode_complex(explode_arrays(parse_options_to_dict(io.StringIO(r'''... terminal-features[0] xterm*:clipboard:ccolour:cstyle:focus... terminal-features[5] screen*:title... ''')))) == {... "terminal-features": {"xterm*": ["clipboard", "ccolour", "cstyle", "focus"],... "screen*": ["title"]}}True>>> explode_complex(explode_arrays(parse_options_to_dict(io.StringIO(r'''... command-alias[0] split-pane=split-window... command-alias[1] splitp=split-window... command-alias[2] "server-info=show-messages -JT"... ''')))) == {... "command-alias": {"split-pane": "split-window",... "splitp": "split-window",... "server-info": "show-messages -JT"}}True>>> explode_complex(explode_arrays({"terminal-features": {0: "xterm*:clipboard:ccolour:cstyle:focus",... 1: "screen*:title"}})){'terminal-features': {0: 'xterm*:clipboard:ccolour:cstyle:focus', 1: 'screen*:title'}}>>> explode_complex(explode_arrays({"terminal-features": {0: "xterm*:clipboard:ccolour:cstyle:focus",... 8: "screen*:title"}})) == SparseArray({'terminal-features': {0:... 'xterm*:clipboard:ccolour:cstyle:focus', 8: 'screen*:title'}})True>>> explode_complex(explode_arrays(parse_options_to_dict(io.StringIO(r'''... terminal-overrides[0] xterm-256color:Tc... terminal-overrides[1] *:U8=0... ''')))) == {... "terminal-overrides": {"xterm-256color": {"Tc": None},... "*": {"U8": 0}}}True>>> explode_complex(explode_arrays(parse_options_to_dict(io.StringIO(r'''... user-keys[100] "\e[test"... user-keys[6] "\e\n"... user-keys[0] "\e[5;30012~"... ''')))) == {... "user-keys": {0: "\\e[5;30012~",... 6: "\\e\\n",... 100: "\\e[test"}}True>>> explode_complex(explode_arrays(parse_options_to_dict(io.StringIO(r'''... status-format[0] "#[align=left range=left #{E:status-left-style}]#[push-default]#{T;=/#{status-left-length}:status-left}#[pop-default]#[norange default]#[list=on align=#{status-justify}]#[list=left-marker]<#[list=right-marker]>#[list=on]#{W:#[range=window|#{window_index} #{E:window-status-style}#{?#{&&:#{window_last_flag},#{!=:#{E:window-status-last-style},default}}, #{E:window-status-last-style},}#{?#{&&:#{window_bell_flag},#{!=:#{E:window-status-bell-style},default}}, #{E:window-status-bell-style},#{?#{&&:#{||:#{window_activity_flag},#{window_silence_flag}},#{!=:#{E:window-status-activity-style},default}}, #{E:window-status-activity-style},}}]#[push-default]#{T:window-status-format}#[pop-default]#[norange default]#{?window_end_flag,,#{window-status-separator}},#[range=window|#{window_index} list=focus #{?#{!=:#{E:window-status-current-style},default},#{E:window-status-current-style},#{E:window-status-style}}#{?#{&&:#{window_last_flag},#{!=:#{E:window-status-last-style},default}}, #{E:window-status-last-style},}#{?#{&&:#{window_bell_flag},#{!=:#{E:window-status-bell-style},default}}, #{E:window-status-bell-style},#{?#{&&:#{||:#{window_activity_flag},#{window_silence_flag}},#{!=:#{E:window-status-activity-style},default}}, #{E:window-status-activity-style},}}]#[push-default]#{T:window-status-current-format}#[pop-default]#[norange list=on default]#{?window_end_flag,,#{window-status-separator}}}#[nolist align=right range=right #{E:status-right-style}]#[push-default]#{T;=/#{status-right-length}:status-right}#[pop-default]#[norange default]"... status-format[1] "#[align=centre]#{P:#{?pane_active,#[reverse],}#{pane_index}[#{pane_width}x#{pane_height}]#[default] }"... ''')))) == {... "status-format": {0: "#[align=left range=left #{E:status-left-style}]#[push-default]#{T;=/#{status-left-length}:status-left}#[pop-default]#[norange default]#[list=on align=#{status-justify}]#[list=left-marker]<#[list=right-marker]>#[list=on]#{W:#[range=window|#{window_index} #{E:window-status-style}#{?#{&&:#{window_last_flag},#{!=:#{E:window-status-last-style},default}}, #{E:window-status-last-style},}#{?#{&&:#{window_bell_flag},#{!=:#{E:window-status-bell-style},default}}, #{E:window-status-bell-style},#{?#{&&:#{||:#{window_activity_flag},#{window_silence_flag}},#{!=:#{E:window-status-activity-style},default}}, #{E:window-status-activity-style},}}]#[push-default]#{T:window-status-format}#[pop-default]#[norange default]#{?window_end_flag,,#{window-status-separator}},#[range=window|#{window_index} list=focus #{?#{!=:#{E:window-status-current-style},default},#{E:window-status-current-style},#{E:window-status-style}}#{?#{&&:#{window_last_flag},#{!=:#{E:window-status-last-style},default}}, #{E:window-status-last-style},}#{?#{&&:#{window_bell_flag},#{!=:#{E:window-status-bell-style},default}}, #{E:window-status-bell-style},#{?#{&&:#{||:#{window_activity_flag},#{window_silence_flag}},#{!=:#{E:window-status-activity-style},default}}, #{E:window-status-activity-style},}}]#[push-default]#{T:window-status-current-format}#[pop-default]#[norange list=on default]#{?window_end_flag,,#{window-status-separator}}}#[nolist align=right range=right #{E:status-right-style}]#[push-default]#{T;=/#{status-right-length}:status-right}#[pop-default]#[norange default]",... 1: "#[align=centre]#{P:#{?pane_active,#[reverse],}#{pane_index}[#{pane_width}x#{pane_height}]#[default] }",... }}True
- handle_option_error ( error : str ) type[exc.OptionError]
-
Raise exception if error in option command found.
In tmux 3.0, show-option and show-window-option return invalid option instead of unknown option. See https://github.com/tmux/tmux/blob/3.0/cmd-show-options.c.
In tmux >2.4, there are 3 different types of option errors:
- unknown option
- invalid option
- ambiguous option
In tmux <2.4, unknown option was the only option.
All errors raised will have the base error of
exc.OptionError. So to catch any option error, useexcept exc.OptionError.Examples
>>> result = server.cmd(... 'set-option',... 'unknown-option-name',... )>>> bool(isinstance(result.stderr, list) and len(result.stderr))True>>> import pytest>>> from libtmux import exc>>> with pytest.raises(exc.OptionError):... handle_option_error(result.stderr[0])- Parameters
-
-
error ( str ) – Error response from subprocess call.
-
- Raises
- parse_options_to_dict ( stdout : t.IO[str] ) UntypedOptionsDict
-
Process subprocess.stdout options or hook output to flat, naive, untyped dict.
Does not explode arrays or deep values.
Examples
>>> import io>>> raw_options = io.StringIO("status-keys vi")>>> parse_options_to_dict(raw_options) == {"status-keys": "vi"}True>>> int_options = io.StringIO("message-limit 50")>>> parse_options_to_dict(int_options) == {"message-limit": "50"}True>>> empty_option = io.StringIO("user-keys")>>> parse_options_to_dict(empty_option) == {"user-keys": None}True>>> array_option = io.StringIO("command-alias[0] split-pane=split-window")>>> parse_options_to_dict(array_option) == {... "command-alias[0]": "split-pane=split-window"}True>>> array_option = io.StringIO("command-alias[40] split-pane=split-window")>>> parse_options_to_dict(array_option) == {... "command-alias[40]": "split-pane=split-window"}True>>> many_options = io.StringIO(r'''status-keys... command-alias[0] split-pane=split-window... ''')>>> parse_options_to_dict(many_options) == {... "command-alias[0]": "split-pane=split-window",... "status-keys": None,}True>>> many_more_options = io.StringIO(r'''... terminal-features[0] xterm*:clipboard:ccolour:cstyle:focus... terminal-features[1] screen*:title... ''')>>> parse_options_to_dict(many_more_options) == {... "terminal-features[0]": "xterm*:clipboard:ccolour:cstyle:focus",... "terminal-features[1]": "screen*:title",}True>>> quoted_option = io.StringIO(r'''... command-alias[0] "choose-session=choose-tree -s"... ''')>>> parse_options_to_dict(quoted_option) == {... "command-alias[0]": "choose-session=choose-tree -s",... }True
Options — Constants and variables 11 functions and constants
- ConvertedValues : TypeAlias = ( ConvertedValue | list[ConvertedValue] | dict[str, ConvertedValue] | SparseArray[ConvertedValue] )
- ExplodedComplexUntypedOptionsDict : TypeAlias = dict[ str, str | int | list[str | int] | dict[str, list[str | int]] | SparseArray[str | int] | None, ]
- ExplodedUntypedOptionsDict : TypeAlias = dict[ str, str | int | list[str] | dict[str, list[str]], ]
- OPTION_SCOPE_FLAG_MAP : dict[OptionScope, str] = { OptionScope.Server: "-s", OptionScope.Session: "", OptionScope.Window: "-w", OptionScope.Pane: "-p", }
Layout and geometry 1 type, 1 function or constant
Used for *adjustment* in resize_window, resize_pane.
- RESIZE_ADJUSTMENT_DIRECTION_FLAG_MAP : dict[ResizeAdjustmentDirection, str] = { ResizeAdjustmentDirection.Up: "-U", ResizeAdjustmentDirection.Down: "-D", ResizeAdjustmentDirection.Left: "-L", ResizeAdjustmentDirection.Right: "-R", }
Environment 1 type
Mixin for manager session and server level environment variables in tmux.
Versions 13 functions and constants
-
Return a synthetic version string when tmux lacks
-V.OpenBSD ships a
-V-less base tmux, so assume the maximum supported version; any other platform is genuinely too old.
-
Return libtmux version is a PEP386 compliant format.
- Returns
-
distutils.version.LooseVersion libtmux version
-
Return tmux version.
If tmux is built from git master, the version returned will be the latest version appended with -master, e.g.
2.4-master.If using OpenBSD's base system tmux, the version will have
-openbsdappended to the latest version, e.g.2.4-openbsd.- Parameters
-
-
tmux_bin ( str | None ) – Path to tmux binary. If *None*, uses the system tmux from
shutil.which.
-
- Returns
-
distutils.version.LooseVersiontmux version according to *tmux_bin* if provided, otherwise the system tmux fromshutil.which
-
Return the tmux version string verbatim, preserving letter suffixes.
get_versionnormalizes point releases for numeric comparison ("3.7a"becomesLooseVersion("3.7")). This helper keeps the raw suffix, so callers can distinguish patch releases whose behavior differs -- for example the tmux 3.7 break-pane crash, reverted in 3.7a.Examples
>>> isinstance(get_version_str(), str)True
-
Return True if tmux version greater than minimum.
-
Return True if tmux version greater or equal to minimum.
-
Return True if tmux version less than minimum.
-
Return True if tmux version less or equal to minimum.
-
-
Return True if tmux meets version requirement. Version >= 3.2a.
- Parameters
- Returns
-
bool True if tmux meets minimum required version.
- Raises
-
-
libtmux.exc.VersionTooLow – tmux version below minimum required for libtmux
-
-
Return True if tmux version installed.
Commands 3 types
Command protocol for tmux command.
Command mixin for tmux command.
Run any tmux(1) command through subprocess.
Formats 2 types, 21 functions and constants
Format logs for tmuxp.
Provides greater technical details than standard log Formatter.
- _SCOPE_OVERRIDES : dict[str, str] = { "cursor_x": "pane", # ft->wp->base.cx "cursor_y": "pane", # ft->wp->base.cy "cursor_flag": "pane", # ft->wp->base.mode "cursor_character": "pane", # ft->wp "mouse_all_flag": "pane", # ft->wp->base.mode MODE_MOUSE_ALL "mouse_any_flag": "pane", # ft->wp->base.mode ALL_MOUSE_MODES "mouse_button_flag": "pane", # ft->wp->base.mode MODE_MOUSE_BUTTON "mouse_sgr_flag": "pane", # ft->wp->base.mode MODE_MOUSE_SGR "mouse_standard_flag": "pane", # ft->wp->base.mode MODE_MOUSE_STANDARD "scroll_region_lower": "pane", # ft->wp->base.rlower "scroll_region_upper": "pane", # ft->wp->base.rupper "alternate_saved_x": "pane", # ft->wp->base.saved_cx "alternate_saved_y": "pane", # ft->wp->base.saved_cy "history_bytes": "pane", # ft->wp "history_limit": "pane", # ft->wp->base.grid->hlimit "history_size": "pane", # ft->wp->base.grid->hsize "insert_flag": "pane", # ft->wp->base.mode MODE_INSERT "keypad_cursor_flag": "pane", # ft->wp->base.mode MODE_KCURSOR "keypad_flag": "pane", # ft->wp->base.mode MODE_KKEYPAD "origin_flag": "pane", # ft->wp->base.mode MODE_ORIGIN "wrap_flag": "pane", # ft->wp->base.mode MODE_WRAP "active_window_index": "session", # ft->s->curw->idx "last_window_index": "session", # ft->s # tmux 3.7 pane-scope tokens that don't carry the pane_ prefix. "bracket_paste_flag": "pane", # ft->wp->screen->mode MODE_BRACKETPASTE "synchronized_output_flag": "pane", # ft->wp->base.mode MODE_SYNC }
- _SCOPE_PREFIXES : tuple[tuple[str, str], ...] = ( ("copy_cursor_", "event"), ("pane_", "pane"), ("window_", "window"), ("session_", "session"), ("client_", "client"), ("buffer_", "buffer"), ("mouse_", "event"), ("cursor_", "event"), ("selection_", "event"), ("scroll_", "event"), ("popup_", "event"), )
- CLIENT_FORMATS = [ "client_cwd", "client_height", "client_width", "client_tty", "client_termname", "client_created", "client_created_string", "client_activity", "client_activity_string", "client_prefix", "client_utf8", "client_readonly", "client_session", "client_last_session", ]
- FIELD_VERSION : dict[str, str] = { # Post-3.2a additions (verified against tmux's format.c at each gated # release tag, e.g. https://github.com/tmux/tmux/blob/3.6a/format.c). "pane_dead_signal": "3.3", "pane_dead_time": "3.3", # tmux 3.7 additions (verified against format.c / tmux.1 at the 3.7 tag). "bracket_paste_flag": "3.7", "pane_flags": "3.7", "pane_floating_flag": "3.7", "pane_pb_progress": "3.7", "pane_pb_state": "3.7", "pane_pipe_pid": "3.7", "pane_x": "3.7", "pane_y": "3.7", "pane_z": "3.7", "pane_zoomed_flag": "3.7", "synchronized_output_flag": "3.7", }
-
Minimum tmux version that registers each format token.
Field names absent from this dict default to
"3.2a"(always-safe within the supported tmux range). Entries here represent tokens added after 3.2a that need explicit gating to keep the-Ftemplate compatible with older tmux versions.
- PANE_FORMATS = [ "history_size", "history_limit", "history_bytes", "pane_index", "pane_width", "pane_height", "pane_title", "pane_id", "pane_active", "pane_dead", "pane_in_mode", "pane_synchronized", "pane_tty", "pane_pid", "pane_start_command", "pane_start_path", "pane_current_path", "pane_current_command", "cursor_x", "cursor_y", "scroll_region_upper", "scroll_region_lower", "saved_cursor_x", "saved_cursor_y", "alternate_on", "alternate_saved_x", "alternate_saved_y", "cursor_flag", "insert_flag", "keypad_cursor_flag", "keypad_flag", "wrap_flag", "mouse_standard_flag", "mouse_button_flag", "mouse_any_flag", "mouse_utf8_flag", # tmux 3.7 "pane_flags", "pane_floating_flag", "pane_x", "pane_y", "pane_z", "pane_zoomed_flag", "pane_pb_progress", "pane_pb_state", "pane_pipe_pid", "bracket_paste_flag", "synchronized_output_flag", ]
- SCOPES_BY_LIST_CMD : dict[str, frozenset[str]] = { "list-sessions": frozenset({"universal", "session", "window", "pane"}), "list-windows": frozenset({"universal", "session", "window", "pane"}), "list-panes": frozenset({"universal", "session", "window", "pane"}), "list-clients": frozenset({"universal", "session", "window", "pane", "client"}), }
-
Format-token scopes a given tmux
list-*subcommand can resolve.A token whose scope is in the set is safe to include in that subcommand's
-Ftemplate. A token whose scope is *outside* the set may be unavailable for that command, so libtmux leaves it out.The relationship is asymmetric: when tmux lists a parent object, it can also report fields for that parent's active child. A session row can include its current window and active pane fields, and a client row can include the attached session, current window, and active pane.
clientscope is the exception in the other direction: it appears only inlist-clientsbecause session/window/pane listings do not have a client attachment to report.
- SESSION_FORMATS = [ "session_name", "session_windows", "session_width", "session_height", "session_id", "session_created", "session_created_string", "session_attached", # "session_grouped", Apparently unused in tmux. "session_group", ]
- WINDOW_FORMATS = [ # format_window() "window_id", "window_name", "window_width", "window_height", "window_layout", "window_panes", # format_winlink() "window_index", "window_flags", "window_active", "window_bell_flag", "window_activity_flag", "window_silence_flag", ]
- _best_winlink ( rows : OutputsRaw ) OutputRaw
-
Pick the winlink row tmux would select.
A
list-windowslisting enumerates winlinks --(session, index, window)edges -- not windows.link-windowcan attach one window to a session at several indexes at once, so the samewindow_idmay appear on several rows, each with a differentwindow_index.tmux selects the current winlink when it contains the window, otherwise the first.
#{window_active}identifies the current row, and the lowestwindow_indexis tmux's first -- chosen explicitly here, so the caller need not pre-sort the rows.Examples
One row is the whole answer:
>>> from libtmux.neo import _best_winlink>>> _best_winlink([{"window_id": "@0", "window_index": "1"}])["window_index"]'1'A window linked into one session twice gives two rows. When the session is sitting on the higher-indexed link, that is the one tmux acts on:
>>> _best_winlink([... {"window_id": "@0", "window_index": "1", "window_active": "0"},... {"window_id": "@0", "window_index": "5", "window_active": "1"},... ])["window_index"]'5'When the session is sitting on some *other* window, neither link is current, and tmux falls back to the first:
>>> _best_winlink([... {"window_id": "@0", "window_index": "1", "window_active": "0"},... {"window_id": "@0", "window_index": "5", "window_active": "0"},... ])["window_index"]'1'The fallback reads the lowest index, not the first row, so a listing that happened to arrive high-index-first still answers tmux's first:
>>> _best_winlink([... {"window_id": "@0", "window_index": "5", "window_active": "0"},... {"window_id": "@0", "window_index": "1", "window_active": "0"},... ])["window_index"]'1'- Parameters
-
-
rows ( OutputsRaw ) – Non-empty rows for one object id in one session. Order does not matter: the current winlink wins, otherwise the lowest
window_index.
-
- Returns
-
OutputRaw The row naming the winlink tmux would act on.
-
Return True if tmux failed because the
-ttarget does not exist.A live tmux server rejects an unknown target with
can't find <kind>: <target>on stderr (cmd_find_targetin tmux'scmd-find.c), for every object kind and every supported tmux version. Every *other* failure -- a stopped daemon, a missing socket, a permission error -- says something else, and stays aLibTmuxException.This is the mirror image of
libtmux.server._is_daemon_not_up_error: together they answer "is the object gone, or is the server gone?" from the same stderr text.Examples
>>> from libtmux.neo import _is_target_not_found_error>>> _is_target_not_found_error("can't find pane: %99")True>>> _is_target_not_found_error("can't find window: @99")True>>> _is_target_not_found_error("can't find session: $99")TrueA server that isn't there is a different answer:
>>> _is_target_not_found_error("no server running on /tmp/tmux-1000/default")False>>> _is_target_not_found_error(... "error connecting to /tmp/tmux-1000/nope (No such file or directory)"... )False- Parameters
-
-
stderr_text ( str ) – tmux's stderr, as carried by the raised
LibTmuxException.
-
- Returns
-
bool True when the object named by
-tdoes not exist on a reachable server.
-
Convert a tmux version string into a comparable
LooseVersion.tmux master is reported as
"master"(or e.g."3.6a-master"); treat it as larger than any tagged release.Examples
>>> from libtmux.neo import _normalize_tmux_version>>> _normalize_tmux_version("3.6a") < _normalize_tmux_version("master")True>>> _normalize_tmux_version("3.2a") < _normalize_tmux_version("3.6a")True
-
Resolve a format token's scope from its name.
Returns
"universal"for cross-scope tokens (e.g.version,socket_path,host). Returns"event"for runtime-only tokens that never appear in alist-*output (mouse, cursor, selection, popup). Returns"context"for tokens registered outsideformat.c's static table (only resolve in a specific command or mode context). Returns"pane"/"window"/"session"/"client"/"buffer"for scope-prefixed tokens.Fields that don't match any prefix, override, or known-token table fall back to
"unknown"."unknown"is intentionally absent from everySCOPES_BY_LIST_CMDentry, so an unclassified field is excluded from everylist-*-Ftemplate — preventing a future untracked field from being silently emitted under a list command where it might crash older tmux. Add such a field to_SCOPE_OVERRIDES(or the appropriate prefix / known-token table) to admit it.Examples
>>> from libtmux.neo import _token_scope>>> _token_scope("pane_id")'pane'>>> _token_scope("window_zoomed_flag")'window'>>> _token_scope("client_name")'client'>>> _token_scope("version")'universal'>>> _token_scope("mouse_x")'event'Tokens whose name doesn't carry a scope prefix can still be scope-gated via
_SCOPE_OVERRIDES(verified against tmux'sformat_cb_*). The override also corrects prefix-misclassified tokens — e.g.mouse_all_flagis a per-pane mode bit, not a runtime mouse event:>>> _token_scope("mouse_all_flag")'pane'>>> _token_scope("active_window_index")'session'Context-only tokens (registered outside
format.c's static table) route to the"context"scope and are excluded from everylist-*-Ftemplate:>>> _token_scope("command_list_alias")'context'>>> _token_scope("search_match")'context'Unclassified tokens fall back to
"unknown", also excluded from every list command:>>> _token_scope("libtmux_test_nonexistent_token")'unknown'
-
Fetch the single
list-*row whose *obj_key* equals *obj_id*.A listing enumerates winlinks, so a window linked into one session at two indexes matches twice.
_best_winlinkthen picks the row tmux itself would act on, rather than whichever sorted last.Examples
>>> from libtmux.neo import fetch_obj>>> fetch_obj(... server=pane.server,... obj_key="pane_id",... obj_id=pane.pane_id,... list_cmd="list-panes",... list_extra_args=("-t", pane.pane_id),... )["pane_id"] == pane.pane_idTrueA pane that does not exist on a live server is a
TmuxObjectDoesNotExist, not a bare tmux error:>>> from libtmux import exc>>> try:... fetch_obj(... server=pane.server,... obj_key="pane_id",... obj_id="%99999",... list_cmd="list-panes",... list_extra_args=("-t", "%99999"),... )... except exc.TmuxObjectDoesNotExist as e:... print(e)Could not find pane_id=%99999 for list-panes ('-t', '%99999')- Parameters
-
-
server ( Server ) – The tmux server to query.
-
obj_key ( str ) – Identity field to match, e.g.
"pane_id". -
obj_id ( str ) – Value the identity field must equal, e.g.
"%3". -
list_cmd ( ListCmd ) – tmux list subcommand to run.
-
list_extra_args ( ListExtraArgs ) – Extra arguments appended verbatim to the tmux command, e.g.
("-t", "%3")to scope the listing to one object's parent.
-
- Returns
-
OutputRaw The matching row, as a dict of tmux format fields.
- Raises
-
-
TmuxObjectDoesNotExist – When the object does not exist -- whether tmux said so on stderr (
can't find pane: %99, for a-t-scoped listing) or the object simply never appeared in the rows. -
LibTmuxException – For every other tmux failure, notably an unreachable server.
-
- fetch_objs ( server : Server , list_cmd : ListCmd , list_extra_args : ListExtraArgs = None , filter : str | None = None , # noqa: A002 ) OutputsRaw
-
Fetch a listing of raw data from a tmux command.
Runs a tmux list command (e.g.
list-sessions) with the format string fromget_output_formatand parses each line of output into a dict.Examples
>>> from libtmux.neo import fetch_objs>>> objs = fetch_objs(server=server, list_cmd="list-sessions")>>> isinstance(objs, list)True>>> isinstance(objs[0], dict)True>>> 'session_id' in objs[0]True- Parameters
-
-
server ( Server ) – The tmux server to query.
-
list_cmd ( ListCmd ) – The tmux list command to run, e.g.
"list-sessions","list-windows", or"list-panes". -
list_extra_args ( ListExtraArgs ) – Extra arguments appended to the tmux command (e.g.
("-a",)for all windows/panes, or["-t", session_id]to filter). -
filter ( str | None ) – Filter expression evaluated by tmux (
-fflag). tmux omits rows whose expanded expression is false before libtmux parses the result. tmux silently expands a malformed filter (unclosed#{...}, unknown format token) to empty, which is treated as false — every row is suppressed and no stderr is emitted. A bad filter is indistinguishable from "filter matched nothing"; verify the expression against the FORMATS section oftmux(1). See native-filtering for the typed wrappers that share this caveat. Warning: added 0.57
-
- Returns
-
OutputsRaw A list of dicts, each mapping tmux format field names to their non-empty string values.
- Raises
-
-
LibTmuxException – If the tmux command writes to stderr.
-
-
Return field names and tmux format string filtered by scope and version.
Only emits tokens whose scope is reachable from *list_cmd* (per
SCOPES_BY_LIST_CMD) and whose minimum tmux version (perFIELD_VERSION) is at or below *tmux_version*. Runtime-only tokens (mouse_*,cursor_*, popups) are excluded from everylist-*template — they only resolve in event-time format contexts.Examples
>>> from libtmux.neo import get_output_format>>> fields, fmt = get_output_format("list-sessions", "3.6a")>>> 'session_id' in fieldsTrue>>> 'pane_id' in fields # active pane for the listed sessionTrue>>> 'client_name' in fields # upward not allowedFalse>>> 'server' in fieldsFalsePane scope picks up window and session tokens too:
>>> fields, _ = get_output_format("list-panes", "3.6a")>>> all(t in fields for t in ('pane_id', 'window_id', 'session_id'))Truelist-clientsadds fields for the attached client:>>> fields, _ = get_output_format("list-clients", "3.6a")>>> 'client_name' in fieldsTrue>>> 'pane_id' in fieldsTrue- Parameters
-
-
list_cmd ( str ) – The tmux list subcommand the format string is being built for. Determines which token scopes are reachable.
-
tmux_version ( str ) – The live tmux version. Used to gate post-3.2a tokens. Defaults to
"3.2a"(the project's minimum) for safe fallback when the caller can't yet detect the version.
-
- Returns
-
tuple[tuple[str, ...], str] A tuple of (field_names, tmux_format_string) restricted to tokens the given *list_cmd* and *tmux_version* can resolve.
-
Parse a tmux
-Fline into a dict keyed by Obj field name.The (*list_cmd*, *tmux_version*) pair must match what was passed to
get_output_formatwhen the-Ftemplate was built — otherwise the field order won't line up with the split values.Examples
>>> from libtmux.neo import get_output_format, parse_output>>> from libtmux.formats import FORMAT_SEPARATOR>>> fields, fmt = get_output_format("list-sessions", "3.6a")>>> values = [''] * len(fields)>>> values[fields.index('session_id')] = '$1'>>> result = parse_output(... FORMAT_SEPARATOR.join(values) + FORMAT_SEPARATOR,... list_cmd="list-sessions",... tmux_version="3.6a",... )>>> result['session_id']'$1'>>> 'pane_id' in resultFalse- Parameters
-
-
output ( str ) – Raw tmux output line produced with a template from
get_output_format. -
list_cmd ( str ) – Same value passed to
get_output_format. -
tmux_version ( str ) – Same value passed to
get_output_format.
-
- Returns
-
OutputRaw A dict mapping field names to non-empty string values.
Queries 1 function or constant
-
Return the raw
tmux -Vversion token, letter suffix intact.Runs
tmux -Vand extracts the version token (e.g."3.7a","master","next-3.8"). Not memoized --get_versionandget_version_streach cache their own result on top of this query.- Parameters
- Returns
-
str Raw version token from
tmux -V. - Raises
-
-
_TmuxVersionUnavailable – tmux predates the
-Vflag; callers apply_no_version_flag_fallback. -
VersionTooLow – tmux reported another error on
-V.
-
Errors 34 types, 2 functions and constants
Internal signal: this tmux predates the -V flag (pre-1.7).
Base Exception for libtmux Errors.
Raised when a deprecated function, method, or parameter is used.
Application binary for tmux not found.
Raised when the process is not running inside a tmux pane.
A lookup expected one object and matched none.
A lookup expected one object and matched several.
tmux has no object with the id that was asked for.
Raised if tmux below the minimum version to use libtmux.
Root error for any error involving invalid, ambiguous or bad options.
Option unknown to tmux show-option(s) or show-window-option(s).
Unknown color option.
Option invalid to tmux.
Option that could potentially match more than one.
Function timed out without meeting condition.
Error unpacking variable.
If *adjustment_direction* is set, *adjustment* must be set.
Requires digit (int or str digit) or a percentage.
Raise if tmuxp convert encounters an unknown filetype.
Raised when an invalid field name is specified.
Base Exception for Tmuxp Errors.
Error parsing tmuxp workspace data.
Workspace file is empty.
Base error for resolving and validating a workspace builder.
Configured workspace_builder could not be resolved.
Configured workspace_builder failed to import.
Resolved workspace_builder object is not a usable builder.
A workspace_builder_paths entry is not a usable directory.
A workspace_builder_options value is invalid.
Base Exception for Tmuxp Errors.
Raises if shell script could not be found.
Shell script execution error.
Tmuxp configuration validation base error.
Tmuxp configuration error for invalid plugins.
-
Render a
QueryList.getlookup back askey=valuetext.Examples
>>> from libtmux.exc import _format_query>>> _format_query({"pane_id": "%0"})"pane_id='%0'">>> _format_query({"window_name": "shared", "window_index": "1"})"window_name='shared', window_index='1'">>> _format_query({})''
-
Raise
LibTmuxExceptiontagged with the tmux subcommand on stderr.Centralizes the
if proc.stderr: raise exc.LibTmuxException(proc.stderr)pattern scattered across the wrappers. Tags the exception with the originating tmux subcommand so downstream consumers (e.g. libtmux-mcp'shandle_tool_errors) keep the "which tmux command failed" context.Examples
>>> from libtmux.common import raise_if_stderr>>> from libtmux import exc>>> proc = session.cmd("display-message", "-p", "#{session_id}")>>> raise_if_stderr(proc, "display-message") # no stderr → no raise- Parameters
-
-
proc ( tmux_cmd ) – Result of a
Server.cmd/Session.cmd/ etc. call. -
subcommand ( str ) – The tmux subcommand the wrapper invoked, e.g.
"last-window","swap-pane". Surfaces instr(exc)as a"<subcommand>: …"prefix.
-
- Raises
-
-
LibTmuxException – When
proc.stderris non-empty.
-
Errors — Session 6 types
Session does not exist in the server.
Disallowed session name for tmux (empty, contains periods or colons).
tmux session not found.
Session missing while loading tmuxp workspace.
Active session cannot be found while loading tmuxp workspace.
Tmuxp configuration error for session name missing.
Errors — Window 8 types
Any type of window related error.
Multiple active windows.
No active window found.
No windows exist for object.
ValueError for libtmux.Window.resize_window.
tmux window not found.
Tmuxp configuration error for window list missing.
Tmuxp configuration error for missing window_name.
Errors — Pane 4 types
Any type of pane related error.
Pane not found.
tmux pane not found.
Testing utilities 13 functions and constants
-
Kill the tmux daemon on
socket_nameand unlink the socket file.Invoked from the
serverandTestServerfixture finalizers to guarantee teardown even when the daemon has already exited (killis a no-op then) and the socket file was left on disk. tmux does not reliablyunlink(2)its socket on non-graceful exit, so/tmp/tmux-<uid>/otherwise accumulates stale entries across test runs.Conservative: suppresses
LibTmuxException/OSErroron both the kill and the unlink. A finalizer that raises replaces the real test failure with a cleanup error, and cleanup failures are not actionable (socket already gone, permissions changed, race with a concurrent pytest-xdist worker).
-
Clear out any unnecessary environment variables that could interrupt tests.
tmux show-environment tests were being interrupted due to a lot of crazy env vars.
- config_file ( user_path : pathlib.Path ) pathlib.Path
-
Return fixture for
.tmux.confconfiguration.-
base-index -g 1
These guarantee pane and windows targets can be reliably referenced and asserted.
Note: You will need to set the home directory, see set_home.
-
- control_mode ( server : Server , session : Session ) t.Callable[[], ControlMode]
-
Return
ControlModecontext manager factory.Returns a callable that creates
ControlModecontext managers bound to the test's server and session. Use as a context manager to spawn a control-mode tmux client.While the control-mode client is active,
Server.list_clients()will include it.Examples
>>> from libtmux._internal.control_mode import ControlMode>>> def test_example(control_mode):... with control_mode() as ctl:... assert ctl.client_name != ''
- home_path ( tmp_path_factory : pytest.TempPathFactory ) pathlib.Path
-
Temporary
/home/path.
-
Return default username to set for user_path fixture.
- server ( request : pytest.FixtureRequest , monkeypatch : pytest.MonkeyPatch , config_file : pathlib.Path ) Server
-
Return new, temporary
libtmux.Server.>>> from libtmux.server import Server
>>> def test_example(server: Server) -> None: ... assert isinstance(server, Server) ... session = server.new_session('my session') ... assert len(server.sessions) == 1 ... assert [session.name.startswith('my') for session in server.sessions]
.. :: >>> locals().keys() dict_keys(...)
>>> source = ''.join([e.source for e in request._pyfuncitem.dtest.examples][:3]) >>> pytester = request.getfixturevalue('pytester')
>>> pytester.makepyfile(**{'whatever.py': source}) PosixPath(...)
>>> result = pytester.runpytest('whatever.py', '--disable-warnings') ===...
>>> result.assert_outcomes(passed=1)
-
Return new, temporary
libtmux.Session.>>> from libtmux.session import Session
>>> def test_example(session: "Session") -> None: ... assert isinstance(session.name, str) ... assert session.name.startswith('libtmux_') ... window = session.new_window(window_name='new one') ... assert window.name == 'new one'
.. :: >>> locals().keys() dict_keys(...)
>>> source = ''.join([e.source for e in request._pyfuncitem.dtest.examples][:3]) >>> pytester = request.getfixturevalue('pytester')
>>> pytester.makepyfile(**{'whatever.py': source}) PosixPath(...)
>>> result = pytester.runpytest('whatever.py', '--disable-warnings') ===...
>>> result.assert_outcomes(passed=1)
-
Return default session creation parameters.
>>> import pytest >>> from libtmux.session import Session
>>> @pytest.fixture ... def session_params(session_params): ... return { ... 'x': 800, ... 'y': 600, ... }
>>> def test_example(session: "Session") -> None: ... assert isinstance(session.name, str) ... assert session.name.startswith('libtmux_') ... window = session.new_window(window_name='new one') ... assert window.name == 'new one'
.. :: >>> locals().keys() dict_keys(...)
>>> source = ''.join([e.source for e in request._pyfuncitem.dtest.examples][:4]) >>> pytester = request.getfixturevalue('pytester')
>>> pytester.makepyfile(**{'whatever.py': source}) PosixPath(...)
>>> result = pytester.runpytest('whatever.py', '--disable-warnings') ===...
>>> result.assert_outcomes(passed=1)
Discussed in Testing with libtmux
-
Create a temporary tmux server that cleans up after itself.
This is similar to the server pytest fixture, but can be used outside of pytest. The server will be killed when the test completes.
Examples
>>> server = Server() # Create server instance>>> server.new_session()Session($... ...)>>> server.is_alive()True>>> # Each call creates a new server with unique socket>>> server2 = Server()>>> server2.socket_name != server.socket_nameTrue
- user_path ( home_path : pathlib.Path , home_user_name : str ) pathlib.Path
-
Ensure and return temporary user directory.
Note: You will need to set the home directory, see set_home.
- zshrc ( user_path : pathlib.Path ) pathlib.Path
-
Suppress ZSH default message.
Needs a startup file .zshenv, .zprofile, .zshrc, .zlogin.
Internal 7 types, 51 functions and constants
tmux hooks data structure.
Context manager that spawns a tmux control-mode client.
Skip default fields in dataclass object representation.
Raised when QueryList.items is called without a primary key.
Raised when a filter names a lookup that does not exist.
Filter list of object/dictionaries. For small, local datasets.
Support non-sequential indexes while maintaining list -like behavior.
- __email__ = "[email protected]"
- LOOKUP_NAME_MAP : Mapping[str, LookupProtocol] = { "eq": lookup_exact, "exact": lookup_exact, "iexact": lookup_iexact, "contains": lookup_contains, "icontains": lookup_icontains, "startswith": lookup_startswith, "istartswith": lookup_istartswith, "endswith": lookup_endswith, "iendswith": lookup_iendswith, "in": lookup_in, "nin": lookup_nin, "regex": lookup_regex, "iregex": lookup_iregex, }
-
Environment variable tmux exports with
socket_path,server_pid,session_id.Discussed in Attaching to tmux , Testing with libtmux · Environment
-
Environment variable tmux exports with the pane's id, e.g.
%3.Discussed in Attaching to tmux , Testing with libtmux · Python MCP topics · Environment
- is_sparse_array_list ( items : ExplodedComplexUntypedOptionsDict ) TypeGuard[HookArray]
-
Fetch values in objects and keys, supported nested data.
With dictionaries:
>>> keygetter({ "food": { "breakfast": "cereal" } }, "food") {'breakfast': 'cereal'}
>>> keygetter({ "food": { "breakfast": "cereal" } }, "food__breakfast") 'cereal'
With objects:
>>> from typing import List, Optional >>> from dataclasses import dataclass, field
>>> @dataclass() ... class Food: ... fruit: List[str] = field(default_factory=list) ... breakfast: Optional[str] = None
>>> @dataclass() ... class Restaurant: ... place: str ... city: str ... state: str ... food: Food = field(default_factory=Food)
>>> restaurant = Restaurant( ... place="Largo", ... city="Tampa", ... state="Florida", ... food=Food( ... fruit=["banana", "orange"], breakfast="cereal" ... ) ... )
>>> restaurant Restaurant(place='Largo', city='Tampa', state='Florida', food=Food(fruit=['banana', 'orange'], breakfast='cereal'))
>>> keygetter(restaurant, "food") Food(fruit=['banana', 'orange'], breakfast='cereal')
>>> keygetter(restaurant, "food__breakfast") 'cereal'
-
Return the pane id recorded in
$TMUX_PANE.The
%sigil is load-bearing: libtmux passes this id straight to tmux as a-ttarget, and tmux'scmd_findroutes a target to its pane slot *by sigil*. A sigil-less value would be matched against session names instead, silently resolving to the wrong object.Examples
>>> from libtmux._internal.env import pane_id_from_env>>> pane_id_from_env({"TMUX_PANE": "%3"})'%3'>>> pane_id_from_env({})Traceback (most recent call last):...libtmux.exc.NotInsideTmux: Not inside a tmux pane: $TMUX_PANE is unset or empty>>> pane_id_from_env({"TMUX_PANE": "3"})Traceback (most recent call last):...libtmux.exc.NotInsideTmux: Not inside a tmux pane: $TMUX_PANE is not a pane id...- Parameters
-
-
env ( t.Mapping[str, str] | None ) – Environment to read. Defaults to
os.environ.
-
- Returns
-
str The pane id, e.g.
"%3". - Raises
-
-
NotInsideTmux – When
$TMUX_PANEis unset, empty, or is not a%-prefixed id.
-
-
-
Check if field lookup key, e.g. "my__path__contains" has comparator, return val.
If comparator not used or value not found, return None.
>>> parse_lookup({ "food": "red apple" }, "food__istartswith", "__istartswith") 'red apple'
It can also look up objects:
>>> from dataclasses import dataclass
>>> @dataclass() ... class Inventory: ... food: str
>>> item = Inventory(food="red apple")
>>> item Inventory(food='red apple')
>>> parse_lookup(item, "food__istartswith", "__istartswith") 'red apple'
-
Return *env*, defaulting to the live process environment.
Examples
>>> from libtmux._internal.env import resolve_env>>> resolve_env({"TMUX_PANE": "%1"}){'TMUX_PANE': '%1'}>>> resolve_env() is os.environTrue- Parameters
-
-
env ( t.Mapping[str, str] | None ) – Environment to read. Defaults to
os.environ.
-
- Returns
-
typing.MappingThe mapping to read tmux variables from.
-
Return the tmux socket path recorded in
$TMUX.$TMUXis"<socket_path>,<server_pid>,<session_id>". The pid and session id are integers, so any comma in the value belongs to the socket path -- split from the *right*.The pid and session id are deliberately discarded: both are frozen at pane spawn, and the session id goes stale as soon as the pane's window is moved between sessions.
Examples
>>> from libtmux._internal.env import socket_path_from_env>>> socket_path_from_env({"TMUX": "/tmp/tmux-1000/default,84215,0"})'/tmp/tmux-1000/default'A comma in the socket path is safe, because the split runs from the right:
>>> socket_path_from_env({"TMUX": "/tmp/od,d/sock,84215,3"})'/tmp/od,d/sock'Outside tmux there is nothing to read:
>>> socket_path_from_env({})Traceback (most recent call last):...libtmux.exc.NotInsideTmux: Not inside a tmux pane: $TMUX is unset or empty- Parameters
-
-
env ( t.Mapping[str, str] | None ) – Environment to read. Defaults to
os.environ.
-
- Returns
-
str Path of the tmux server's socket.
- Raises
-
-
NotInsideTmux – When
$TMUXis unset, empty, or not shaped like tmux's triple.
-
Internal — Options 5 types
Container for tmux server options.
Container for tmux session options.
Container for tmux window options.
Container for tmux pane options.
Container for all tmux options (server, session, window, and pane).
Other 2 types, 2 functions and constants
Sentinel meaning "whichever scope tmux would use".
Dataclass of generic tmux object.
- __all__ = ( "Client", "Pane", "Server", "Session", "Window", "__author__", "__copyright__", "__description__", "__email__", "__license__", "__package_name__", "__title__", "__version__", )
- DEFAULT_OPTION_SCOPE : _DefaultOptionScope = _DefaultOptionScope()
By module 73 modules
-
libtmux_mcp 1
-
libtmux_mcp.models 24
- Buffer
Content - Buffer
Ref - Capture
Since Result - Environment
Result - Environment
Set Result - Hook
Entry - Hook
List Result - Option
Result - Option
Set Result - Pane
Content Match - Pane
Info - Pane
Snapshot - Run
Command Result - Search
Panes Result - Send
Keys Batch Result - Send
Keys Operation - Send
Keys Operation Result - Server
Info - Session
Info - Tool
Call Batch Result - Tool
Call Operation - Tool
Call Operation Result - Wait
For Text Result - Window
Info
- Buffer
-
libtmux_mcp.prompts 2
-
libtmux_mcp.resources 1
-
libtmux_mcp.server 4
-
libtmux_mcp.tools 1
-
libtmux.__about__ 4
-
libtmux.client 1
-
libtmux.common 25
- Cmd
Mixin - Cmd
Protocol - Environment
Mixin - tmux
_cmd - logger
- Pane
Dict - Session
Dict - TMUX
_MAX _VERSION - TMUX
_MIN _VERSION - Window
Dict - Window
Option Dict - _Tmux
Version Unavailable - _no
_version _flag _fallback - _query
_version - get
_libtmux _version - get
_version - get
_version _str - has
_gt _version - has
_gte _version - has
_lt _version - has
_lte _version - has
_minimum _version - has
_version - raise
_if _stderr - session
_check _name
- Cmd
-
libtmux.exc 28
- Tmux
Object Does Not Exist - Unknown
Color Option - Adjustment
Direction Requires Adjustment - Ambiguous
Option - Bad
Session Name - Deprecated
Error - Invalid
Option - Lib
Tmux Exception - Multiple
Active Windows - Multiple
Objects Returned - No
Active Window - Not
Inside Tmux - No
Windows Exist - Object
Does Not Exist - Option
Error - Pane
Adjustment Direction Requires Adjustment - Pane
Error - Pane
Not Found - Requires
Digit Or Percentage - Tmux
Command Not Found - Tmux
Session Exists - Unknown
Option - Variable
Unpacking Error - Version
Too Low - Wait
Timeout - Window
Adjustment Direction Requires Adjustment - Window
Error - _format
_query
- Tmux
-
libtmux.formats 5
-
libtmux.hooks 4
-
libtmux.options 18
-
libtmux.pane 1
-
libtmux.pytest_plugin 14
-
libtmux.server 3
-
libtmux.session 1
-
libtmux.window 1
-
tmuxp.cli 7
-
tmuxp.exc 17
- Active
Session Missing Workspace Exception - Before
Load Script Error - Before
Load Script Not Exists - Empty
Workspace Exception - Invalid
Workspace Builder - Invalid
Workspace Builder Option - Pane
Not Found - Session
Missing Workspace Exception - Session
Not Found - Window
Not Found - Workspace
Builder Import Error - Workspace
Builder Not Found - Workspace
Builder Path Error - Tmuxp
Exception - Tmuxp
Plugin Exception - Workspace
Builder Error - Workspace
Error
- Active
-
tmuxp.types 1
-
libtmux_mcp.prompts.recipes 4
-
libtmux_mcp.resources.hierarchy 2
-
libtmux_mcp.tools.batch_tools 3
-
libtmux_mcp.tools.buffer_tools 6
-
libtmux_mcp.tools.env_tools 3
-
libtmux_mcp.tools.hook_tools 3
-
libtmux_mcp.tools.option_tools 3
-
libtmux_mcp.tools.pane_tools 23
- capture
_pane - capture
_since - clear
_pane - display
_message - enter
_copy _mode - exit
_copy _mode - find
_pane _by _position - get
_pane _info - kill
_pane - paste
_text - pipe
_pane - register
- resize
_pane - respawn
_pane - run
_command - search
_panes - select
_pane - send
_keys - send
_keys _batch - set
_pane _title - snapshot
_pane - swap
_pane - wait
_for _text
- capture
-
libtmux_mcp.tools.server_tools 7
-
libtmux_mcp.tools.session_tools 7
-
libtmux_mcp.tools.wait_for_tools 3
-
libtmux_mcp.tools.window_tools 9
-
libtmux._internal.constants 9
-
libtmux._internal.control_mode 1
-
libtmux._internal.dataclasses 1
-
libtmux._internal.env 5
-
libtmux._internal.query_list 21
-
libtmux._internal.sparse_array 4
-
libtmux._internal.types 1
-
tmuxp.cli.convert 4
-
tmuxp.cli.debug_info 5
-
tmuxp.cli.edit 3
-
tmuxp.cli.freeze 4
-
tmuxp.cli.ls 5
-
tmuxp.cli.search 19
- CLISearch
Namespace - Search
Pattern - Search
Token - Workspace
Fields - Workspace
Search Result - Invalid
Field Error - DEFAULT
_FIELDS - FIELD
_ALIASES - SEARCH
_DESCRIPTION - VALID
_FIELDS - command
_search - compile
_search _patterns - create
_search _subparser - evaluate
_match - extract
_workspace _fields - find
_search _matches - highlight
_matches - normalize
_fields - parse
_query _terms
- CLISearch
-
tmuxp.cli.shell 4
-
tmuxp.cli.utils 4
-
tmuxp.workspace.constants 1
-
tmuxp.workspace.importers 2
-
tmuxp.workspace.loader 4
-
tmuxp.workspace.options 4
-
libtmux_mcp.tools.pane_tools.capture_since 2
-
libtmux_mcp.tools.pane_tools.io 1
-
libtmux_mcp.tools.pane_tools.lifecycle 1
-
libtmux_mcp.tools.pane_tools.search 4
-
libtmux_mcp.tools.pane_tools.state 2
-
tmuxp.workspace.builder.classic 2