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

Options and hooks

Lua
  • Python Unavailable
  • Ruby Unavailable
  • Lua
  • TypeScript Unavailable
  • Rust Unavailable
  • Go Unavailable
  • Java Unavailable
  • .NET Unavailable
  • C++ Unavailable
  • Swift Unavailable

Options and hooks return Requests through the process lane. Session, Window and Pane handles select their own storage scope. Server methods default to server options; use scope = "global_session" or "global_window" for global defaults. Server hook methods require one of those explicit global scopes. There is no global pane scope. A scope that conflicts with the handle or built-in definition fails before I/O.

The release catalog records exact names, types and scopes for supported tmux releases. Names do not accept tmux’s abbreviations. Unknown releases fail with unsupported_version. User options support names such as @project_name, with ASCII letters, digits, underscores, dots and hyphens after @; broader native names return unsupported_name.

Read a settingLink to section

get_option(name, options) returns a record with present, inherited, type, requested scope and target. Scalar value preserves booleans, integers and bytes. Choice values use their canonical names. Keys, colours, styles and command options return native canonical text. Reads never execute that text. list_options(options) returns records sorted by name.

Reads include inherited values by default. Set inherit = false to inspect only the selected table. present = false distinguishes absence from an empty string, false or an explicit empty array. Local and inherited reads are separate observations; concurrent changes can occur between them.

Arrays return ordered entries, each with a native zero-based index and value. Indices may have gaps. An index read option selects a slot after reading the complete array, preserving the distinction between an absent slot and an empty string. An absent slot has present = false and no entries.

Change a settingLink to section

set_option(name, value, options) accepts booleans for flags, integers within the release-specific range, exact choice names and NUL-free strings for string, key, colour and style options. Native key, colour and style grammar is still checked by tmux. Command values use the program record described below. Input structure, types, bounds and scopes are checked before I/O.

Use index to write one array slot. To replace a sparse array, supply { entries = { { index = 0, value = "first" }, ... } }. The library copies and validates the whole input, clears the local array, then writes slots in index order in one stop-on-error command group. Empty entries create an explicit empty local array. A first local indexed write also creates a local array; it does not copy inherited slots.

Replacement is not atomic. Native value validation or hooks may fail after an earlier write; the returned error preserves the process result without claiming which slots completed. tmux can run hooks between group commands.

append = true concatenates a scalar string or an indexed string-array value. Whole-array append is unsupported: native separator splitting cannot preserve arbitrary string elements. Indexed colour or command append is rejected because tmux replaces those values instead of appending.

unset_option(name, options) removes a local override, restoring inheritance. For global defaults it restores tmux’s default. An optional index removes one array slot. The API never uses tmux’s wider -U operation, which can also remove pane overrides.

Store and run hook programsLink to section

set_hook(name, program, options) stores a tmux command program. Supply exactly one of commands, a dense sequence of argv sequences, or source, explicit tmux program text. commands encodes each argument as literal tmux-parser data in one command group. Commands retain their own native format and shell semantics. source is not pre-parsed; tmux aliases and grammar are resolved by tmux. Neither form is evaluated as Lua.

Use index for a built-in hook slot. Without an index, setting a built-in hook replaces its array with one program. append = true adds a program at the first free native slot. Indexed append is rejected because native command-array append replaces that slot. Invalid native source can clear an existing array before tmux reports failure; storing a hook is not transactional.

get_hook and list_hooks return the same presence and inheritance metadata as options. Built-in hooks have sparse entries containing index and canonical program source. Canonical text may expand aliases or reorder flags; it does not reconstruct the original argv. Custom @ hooks return a single source. They can be retrieved by name but are omitted from list_hooks, since tmux cannot distinguish them from ordinary user options. unset_hook removes the selected hook or slot.

Session, Window and Pane handles offer run_hook(name, options). Execution uses that live context’s native hook lookup. Only process limits are accepted; storage scopes, indices, append and replacement source do not select a hook for execution. Custom hook execution requires tmux 3.3 or newer. A successful process result means tmux completed its command; malformed custom source may still be ignored by tmux without an error.

Bounds and failuresLink to section

Settings use at most one MiB of encoded input and aggregate native output. Listings accept at most 4096 rows. Array replacement accepts at most 512 entries and remains subject to the aggregate argv and byte limits. Programs accept at most 1024 commands, 4096 arguments and one MiB after encoding.

process accepts deadline, timeout, output and cleanup limits. Caller-provided process environment, cwd and stdin are rejected. Output preserves bytes even when the caller uses a C locale. No operation changes the caller’s environment.

Canceling a client does not undo accepted tmux mutations. Errors distinguish not_sent, unknown and completed effects. A stale handle detected after a completed command retains that completed effect; it does not imply rollback.

Esc

Type to search.