Files
herolib_python/aiprompts/libtmux_python.md
2025-08-22 13:11:04 +02:00

51 KiB

======================== CODE SNIPPETS

TITLE: Initial Project Setup and Dependency Installation DESCRIPTION: Steps to clone the libtmux repository, navigate into the project directory, and install all development dependencies using the uv package manager, including optional extras.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/developing.md#_snippet_0

LANGUAGE: console CODE:

$ git clone https://github.com/tmux-python/libtmux.git

LANGUAGE: console CODE:

$ cd libtmux

LANGUAGE: console CODE:

$ uv sync --all-extras --dev

TITLE: Install libtmux via pip DESCRIPTION: Installs the libtmux library for the current user using pip. This is the standard installation method for stable releases.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_0

LANGUAGE: console CODE:

$ pip install --user libtmux

TITLE: Install libtmux developmental releases DESCRIPTION: Installs pre-release versions (alpha, beta, release candidates) of libtmux using pip. This command is useful for testing new features before their general availability.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_1

LANGUAGE: console CODE:

$ pip install --user --upgrade --pre libtmux

TITLE: Install ptpython for command-line completion DESCRIPTION: Installs ptpython, an interactive Python shell, to provide enhanced command-line completion for Python development. This is particularly useful when interacting with libtmux.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_4

LANGUAGE: console CODE:

$ pip install --user ptpython

TITLE: Install libtmux from Git trunk DESCRIPTION: Installs libtmux directly from its Git repository's trunk in editable mode. This provides the very latest, potentially unstable, development version for active development or testing.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_2

LANGUAGE: console CODE:

$ pip install --user -e git+https://github.com/tmux-python/libtmux.git#egg=libtmux

TITLE: Building and Serving Project Documentation DESCRIPTION: Instructions for generating and serving the project documentation using Sphinx and sphinx-autobuild. Commands cover starting a preview server, manual builds, and continuous rebuilding with a watch mode (requires entr).

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/developing.md#_snippet_2

LANGUAGE: console CODE:

$ make start_docs

LANGUAGE: console CODE:

$ make start

LANGUAGE: console CODE:

$ cd docs/
$ make html

LANGUAGE: console CODE:

$ make serve

LANGUAGE: console CODE:

$ make build_docs

LANGUAGE: console CODE:

$ make serve_docs

LANGUAGE: console CODE:

$ make watch_docs

LANGUAGE: console CODE:

$ make dev_docs

TITLE: Start a new tmux session DESCRIPTION: Initiates a new tmux session with a specified session name ('foo') and window name ('bar'). This command creates the initial environment for subsequent libtmux interactions.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_3

LANGUAGE: console CODE:

$ tmux new-session -n bar -s foo

TITLE: Starting tmux and Python for libtmux interaction DESCRIPTION: This snippet demonstrates the initial setup required to interact with libtmux. It involves starting a tmux server in one terminal and then launching a Python interpreter in another to import the libtmux library.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/api/properties.md#_snippet_0

LANGUAGE: console CODE:

$ tmux

LANGUAGE: console CODE:

$ python

LANGUAGE: python CODE:

>>> import libtmux

TITLE: Launch ptpython interactive shell DESCRIPTION: Starts the ptpython interactive Python shell. This shell offers features like command-line completion for a more efficient and user-friendly development experience.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_5

LANGUAGE: console CODE:

$ ptpython

TITLE: libtmux Python API Reference DESCRIPTION: Key methods for interacting with tmux sessions, windows, and panes using the libtmux library.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_21

LANGUAGE: APIDOC CODE:

Session Class Methods:
  new_window(attach=True, window_name=None)
    - Creates a new tmux window.
    - Parameters:
      - attach: (bool) If False, creates in background.
      - window_name: (str) Optional name for the window.
    - Returns: Window object.

  kill_window(target)
    - Kills a tmux window.
    - Parameters:
      - target: (str) Can be window_id (e.g., @2) or window_name (e.g., 'ha in the bg').

  active_window()
    - Returns the currently active Window object.

  windows
    - Property to access a list of Window objects.

  windows.filter()
    - Method to filter the list of Window objects.

Window Class Methods:
  kill()
    - Kills the specific window object.

  split(attach=True)
    - Splits the window into a new pane.
    - Parameters:
      - attach: (bool) If False, creates in background without switching cursor.
    - Returns: Pane object.

  rename_window(new_name)
    - Renames the window.
    - Parameters:
      - new_name: (str) The new name for the window.

Pane Class Methods:
  select()
    - Selects (moves cursor to) the pane.

  send_keys(keys, enter=True, suppress_history=False)
    - Sends keys to the pane.
    - Parameters:
      - keys: (str) The string of keys to send.
      - enter: (bool) If True, presses Enter after sending keys.
      - suppress_history: (bool) If True, prevents command from appearing in shell history.

  enter()
    - Sends an Enter keypress to the pane.

TITLE: Getting the active tmux window with libtmux DESCRIPTION: Demonstrates how to retrieve the currently active Window object from the session using session.active_window. This allows for subsequent manipulation of the current window.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_16

LANGUAGE: python CODE:

window = session.active_window

TITLE: Launch ptpython Interactive Shell DESCRIPTION: Shows how to start the ptpython interactive shell after its installation. This command initiates the enhanced Python environment for interactive coding and testing.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_3

LANGUAGE: console CODE:

ptpython

TITLE: Install libtmux Python Library DESCRIPTION: Instructions on how to install the libtmux Python library using pip. This command installs the package for the current user, making it available for Python scripts and interactive shells.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_0

LANGUAGE: console CODE:

pip install --user libtmux

TITLE: Initialize libtmux Server object DESCRIPTION: Imports the libtmux library and creates a Server object. This object serves as the primary interface for interacting with the tmux server, allowing control over sessions, windows, and panes.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_6

LANGUAGE: python CODE:

import libtmux
server = libtmux.Server()
server

TITLE: Execute raw tmux commands and instantiate objects DESCRIPTION: Illustrates direct execution of tmux commands via cmd() methods on Server, Session, and Window objects to create new sessions, windows, and panes. Also demonstrates how to construct Window and Pane objects from their respective IDs returned by these raw commands.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_7

LANGUAGE: python CODE:

server.cmd('new-session', '-d', '-P', '-F#{session_id}').stdout[0]

LANGUAGE: python CODE:

session.cmd('new-window', '-P').stdout[0]

LANGUAGE: python CODE:

Window.from_window_id(window_id=session.cmd('new-window', '-P', '-F#{window_id}').stdout[0], server=session.server)

LANGUAGE: python CODE:

window.cmd('split-window', '-P', '-F#{pane_id}').stdout[0]

LANGUAGE: python CODE:

Pane.from_pane_id(pane_id=window.cmd('split-window', '-P', '-F#{pane_id}').stdout[0], server=window.server)

TITLE: Install libtmux Python package DESCRIPTION: This console command uses pip to install the libtmux library, which includes the pytest plugin and its associated fixtures, making them available for use in Python testing environments.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/pytest-plugin/index.md#_snippet_0

LANGUAGE: console CODE:

pip install libtmux

TITLE: Killing a tmux window directly from its object DESCRIPTION: Illustrates how to obtain a Window object and then call its kill() method directly to close it. This provides an object-oriented way to manage windows.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_15

LANGUAGE: python CODE:

window = session.new_window(attach=False, window_name="check this out")
window

LANGUAGE: python CODE:

window.kill()

TITLE: List all tmux sessions DESCRIPTION: Retrieves a list of all active tmux sessions as Session objects using server.sessions. This provides an overview of currently running tmux environments accessible through the libtmux Server object.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_8

LANGUAGE: python CODE:

server.sessions

TITLE: Access a specific session from the list DESCRIPTION: Demonstrates accessing a specific Session object from the list returned by server.sessions, typically the first one. Note that the index is not guaranteed to be consistent if sessions are created or destroyed.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_9

LANGUAGE: python CODE:

server.sessions[0]

TITLE: Install ptpython for Enhanced Python Shell DESCRIPTION: Provides the command to install ptpython, an interactive Python shell. ptpython offers advanced features like autocompletion and syntax highlighting, enhancing the development experience.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_2

LANGUAGE: console CODE:

pip install --user ptpython

TITLE: Renaming a tmux window with libtmux DESCRIPTION: Shows how to rename the current tmux window using the window.rename_window() method. This updates the window's display name within tmux.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_18

LANGUAGE: python CODE:

window.rename_window('libtmuxower')

TITLE: Start tmux Server in Console DESCRIPTION: Initiates a new tmux server instance in the console, typically run in a separate terminal to host sessions.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/context_managers.md#_snippet_0

LANGUAGE: console CODE:

$ tmux

TITLE: Accessing libtmux Pane Properties DESCRIPTION: This section demonstrates how to get a Pane object from an active window and inspect its properties. It includes examples for pane_current_command, pane_height, pane_width, and pane_index, along with type checking.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/api/properties.md#_snippet_4

LANGUAGE: python CODE:

>>> pane = window.active_pane

>>> pane
Pane(%1 Window(@1 ...:..., Session($1 libtmux_...)))

LANGUAGE: python CODE:

>>> pane.pane_current_command
'...'

>>> type(pane.pane_current_command)
<class 'str'>

>>> pane.pane_height
'...'

>>> pane.pane_width
'...'

>>> pane.pane_index
'0'

TITLE: Assign a retrieved session to a variable DESCRIPTION: Demonstrates the common pattern of renaming a session and then retrieving it by its new name to assign it to a variable for further manipulation. This establishes a working Session object for subsequent operations.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_12

LANGUAGE: python CODE:

server.sessions[0].rename_session('foo')

LANGUAGE: python CODE:

session = server.sessions.get(session_name="foo")

LANGUAGE: python CODE:

session

TITLE: Tagging and Releasing New Versions DESCRIPTION: Steps for preparing a new release, including updating version information in CHANGES and __init__.py, committing changes with a specific message, and creating Git tags. These actions trigger CI/CD for deployment to PyPI.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/developing.md#_snippet_6

LANGUAGE: console CODE:

$ git commit -m 'Tag v0.9.1'

LANGUAGE: console CODE:

$ git tag v0.9.1

LANGUAGE: console CODE:

$ git push

LANGUAGE: console CODE:

$ git push --tags

LANGUAGE: console CODE:

git commit -m 'build(libtmux): Tag v0.1.1'

LANGUAGE: console CODE:

git tag v0.1.1

TITLE: Creating a new tmux window with libtmux DESCRIPTION: Demonstrates how to create a new tmux window using session.new_window(). The attach=False argument creates the window in the background without switching to it. A custom window_name can be specified. The method returns the created Window object.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_13

LANGUAGE: python CODE:

session.new_window(attach=False, window_name="ha in the bg")

TITLE: Rename and retrieve sessions by name DESCRIPTION: Shows how to rename a tmux session using rename_session() and subsequently retrieve it using server.sessions.filter() or server.sessions.get() with the new session name. This illustrates session management by name.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_11

LANGUAGE: python CODE:

server.sessions[0].rename_session('foo')

LANGUAGE: python CODE:

server.sessions.filter(session_name="foo")[0]

LANGUAGE: python CODE:

server.sessions.get(session_name="foo")

TITLE: Launch Python Interpreter DESCRIPTION: Starts the Python interpreter in the console, enabling execution of Python code. Can be python or ptpython.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/context_managers.md#_snippet_1

LANGUAGE: console CODE:

$ python

TITLE: Running Project Tests DESCRIPTION: Commands to execute the test suite using pytest via uv or make. Includes a helper command for basic test execution and a watch mode for continuous testing on file changes (requires entr).

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/developing.md#_snippet_1

LANGUAGE: console CODE:

$ uv run py.test

LANGUAGE: console CODE:

$ make test

LANGUAGE: console CODE:

$ make watch_test

TITLE: Start tmux session in console DESCRIPTION: Initiates a new tmux server session in the console, providing the environment for libtmux interactions.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_0

LANGUAGE: console CODE:

tmux

TITLE: Formatting Code with Ruff Format DESCRIPTION: Commands to automatically format Python code using ruff format. These can be run via uv, directly with ruff format, or through a make target.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/developing.md#_snippet_4

LANGUAGE: console CODE:

$ uv run ruff format .

LANGUAGE: console CODE:

$ ruff format .

LANGUAGE: console CODE:

$ make ruff_format

TITLE: Splitting a tmux window into a new pane with libtmux DESCRIPTION: Explains how to split the current window into a new pane using window.split(). The attach=False argument prevents the cursor from switching to the newly created pane. The method returns the new Pane object.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_17

LANGUAGE: python CODE:

window.split(attach=False)

TITLE: Launch Python interpreter in console DESCRIPTION: Starts the Python interpreter in the console, ready for interactive commands and libtmux script execution.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_1

LANGUAGE: console CODE:

python

TITLE: Filter sessions by ID DESCRIPTION: Filters the list of sessions to find a specific session using its tmux ID (e.g., '$1') via server.sessions.filter(). This provides a reliable way to retrieve a session by its unique identifier.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_10

LANGUAGE: python CODE:

server.sessions.filter(session_id='$1')[0]

TITLE: Killing a tmux window by ID or name using libtmux DESCRIPTION: Shows how to terminate a tmux window using session.kill_window(). This method accepts either the window's ID (e.g., @2) or its name as a target. It's equivalent to the tmux kill-window -t command.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_14

LANGUAGE: python CODE:

session.kill_window(window.window_id)

LANGUAGE: python CODE:

session.kill_window('ha in the bg')

TITLE: Moving cursor across tmux windows and panes with libtmux DESCRIPTION: Illustrates how to control cursor movement when creating new panes or explicitly selecting existing ones. Omitting attach=False in window.split() moves the cursor, or pane.select() can be used for explicit selection.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_19

LANGUAGE: python CODE:

pane = window.split()

LANGUAGE: python CODE:

pane = window.split(attach=False)

LANGUAGE: python CODE:

pane.select()

TITLE: Get all tmux windows from libtmux Server DESCRIPTION: Retrieves a list of all tmux windows across all sessions managed by the libtmux server object.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_5

LANGUAGE: python CODE:

server.windows

TITLE: Get all tmux panes from libtmux Server DESCRIPTION: Retrieves a list of all tmux panes across all windows managed by the libtmux server object.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_6

LANGUAGE: python CODE:

server.panes

TITLE: Sending commands to tmux panes remotely with libtmux DESCRIPTION: Details how to send keyboard inputs and commands to a tmux pane using pane.send_keys(). It covers sending keys without pressing Enter (enter=False), explicitly pressing Enter (pane.enter()), and suppressing commands from shell history (suppress_history=True).

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/quickstart.md#_snippet_20

LANGUAGE: python CODE:

window = session.new_window(attach=False, window_name="test")
pane = window.split(attach=False)
pane.send_keys('echo hey', enter=False)

LANGUAGE: python CODE:

pane.enter()

LANGUAGE: python CODE:

pane.send_keys('echo Howdy', enter=True, suppress_history=True)

TITLE: Get windows within a tmux session DESCRIPTION: Retrieves a list of all windows belonging to a specific libtmux session object, enabling navigation within that session.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_8

LANGUAGE: python CODE:

session.windows

TITLE: Linting and Fixing Code with Ruff DESCRIPTION: Commands to perform code linting and automatic fixes using the ruff tool. This includes execution via uv, direct ruff commands, make targets, and a watch mode for continuous linting (requires entr).

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/developing.md#_snippet_3

LANGUAGE: console CODE:

$ uv run ruff

LANGUAGE: console CODE:

$ ruff check .

LANGUAGE: console CODE:

$ make ruff

LANGUAGE: console CODE:

$ make watch_ruff

LANGUAGE: console CODE:

$ uv run ruff check . --fix

LANGUAGE: console CODE:

$ ruff check . --fix

TITLE: Create a New tmux Session via Console DESCRIPTION: Demonstrates how to create a new tmux session directly from the terminal using the tmux command-line utility. This example sets the session name to 'foo' and the initial window name to 'bar'.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_1

LANGUAGE: console CODE:

tmux new-session -s foo -n bar

TITLE: Performing Static Type Checks with Mypy DESCRIPTION: Commands to run static type analysis on the project using mypy. Options include running via uv, direct mypy commands, make targets, and a watch mode for continuous type checking (requires entr).

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/developing.md#_snippet_5

LANGUAGE: console CODE:

$ uv run mypy .

LANGUAGE: console CODE:

$ mypy .

LANGUAGE: console CODE:

$ make mypy

LANGUAGE: console CODE:

$ make watch_mypy

TITLE: Get panes within a tmux window DESCRIPTION: Retrieves a list of all panes belonging to a specific libtmux window object, enabling navigation within that window.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_12

LANGUAGE: python CODE:

window.panes

TITLE: Get active pane in a tmux window DESCRIPTION: Retrieves the currently active pane within a specific libtmux window object, indicating the current focus.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_13

LANGUAGE: python CODE:

window.active_pane

TITLE: Get all tmux sessions from libtmux Server DESCRIPTION: Retrieves a list of all active tmux sessions managed by the libtmux server object, allowing iteration and access to individual sessions.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_4

LANGUAGE: python CODE:

server.sessions

TITLE: Get active window and pane in a tmux session DESCRIPTION: Retrieves the currently active window and pane within a specific libtmux session object, useful for understanding the current focus.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_9

LANGUAGE: python CODE:

session.active_window

>>> session.active_pane

TITLE: Get specific tmux pane by ID DESCRIPTION: Retrieves a specific pane from a window's panes collection using its unique 'pane_id', allowing direct access to a pane.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_16

LANGUAGE: python CODE:

window.panes.get(pane_id=pane.pane_id)

TITLE: Create and manage temporary tmux servers in pytest DESCRIPTION: The TestServer fixture provides a factory for creating independent, temporary tmux server instances with unique socket names. This allows testing scenarios involving multiple servers or custom configurations, ensuring automatic cleanup after tests. The second example shows how to use it with a custom configuration file.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/pytest-plugin/index.md#_snippet_2

LANGUAGE: python CODE:

def test_something(TestServer):
    Server = TestServer()  # Get unique partial'd Server
    server = Server()      # Create server instance
    
    session = server.new_session()
    assert server.is_alive()

LANGUAGE: python CODE:

def test_with_config(TestServer, tmp_path):
    config_file = tmp_path / "tmux.conf"
    config_file.write_text("set -g status off")
    
    Server = TestServer()
    server = Server(config_file=str(config_file))

TITLE: Connecting to a libtmux Server DESCRIPTION: This snippet shows how to establish a connection to the default tmux server using libtmux.Server(). It initializes a Server object, which then allows interaction with tmux sessions, windows, and panes.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/api/properties.md#_snippet_1

LANGUAGE: python CODE:

>>> import libtmux
>>> t = libtmux.Server()
>>> t
Server(socket_path=/tmp/tmux-.../default)

TITLE: libtmux.Session Class API Reference DESCRIPTION: Comprehensive API documentation for the libtmux.Session class, which represents a tmux session. This class manages windows and panes, and provides methods for interacting with a tmux session programmatically. It exists within a libtmux.Server instance and is identified by a '$' prefix.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/api/sessions.md#_snippet_0

LANGUAGE: APIDOC CODE:

libtmux.Session Class:
  Represents a tmux session, a fundamental unit within the tmux terminal multiplexer.
  
  Inheritance:
    - Inherits from `libtmux.common.TMUX` (implied by context and typical libtmux structure)
  
  Attributes:
    - id (str): The unique identifier for the session, typically prefixed with '$' (e.g., '$313').
    - server (libtmux.Server): A reference to the parent `libtmux.Server` instance that contains this session.
    - windows (list[libtmux.Window]): A list of `libtmux.Window` objects currently open within this session.
    - name (str): The name of the session.
    
  Methods (common examples, full list generated by autoclass):
    - attach(): Attaches the current terminal to this tmux session.
    - kill_session(): Terminates and removes this tmux session.
    - new_window(attach: bool = True, window_name: str = None, start_directory: str = None) -> libtmux.Window:
        Creates a new window within this session.
        - attach (bool): If True, attach to the new window immediately.
        - window_name (str): Optional name for the new window.
        - start_directory (str): Optional starting directory for the new window.
        - Returns: The newly created `libtmux.Window` object.
    - find_where(attribute: str, value: str) -> Union[libtmux.Window, libtmux.Pane, None]:
        Finds a window or pane within the session based on an attribute and its value.
    - select_window(target_window: Union[str, int, libtmux.Window]):
        Selects a specific window within the session by name, index, or object.
    - rename_session(new_name: str):
        Renames the current session to `new_name`.
    - list_windows() -> list[libtmux.Window]:
        Returns a list of all `libtmux.Window` objects in the session.
    - find_window(target_window: Union[str, int]) -> Union[libtmux.Window, None]:
        Finds a window by name or index within the session.
    - attached_window() -> libtmux.Window:
        Returns the currently attached window in the session.
    - attached_pane() -> libtmux.Pane:
        Returns the currently attached pane in the session.

TITLE: Split tmux Windows and Create Panes with libtmux DESCRIPTION: Illustrates how to split a tmux window into new panes and create entirely new windows using libtmux. It covers creating panes both attached and detached, selecting panes, and initializing new windows with specific names.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_15

LANGUAGE: python CODE:

>>> window = session.active_window
>>> window.split(attach=False)
Pane(%2 Window(@1 1:... Session($1 ...)))
>>> pane = window.split()
>>> pane = window.split(attach=False)
>>> pane.select()
Pane(%3 Window(@1 1:..., Session($1 ...)))
>>> window = session.new_window(attach=False, window_name="test")
>>> window
Window(@2 2:test, Session($1 ...))
>>> pane = window.split(attach=False)
>>> pane
Pane(%5 Window(@2 2:test, Session($1 ...)))

TITLE: libtmux Server Context Manager Usage DESCRIPTION: Demonstrates using libtmux.Server() as a context manager. A temporary tmux server is created and automatically killed upon exiting the with block, ensuring resource cleanup.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/context_managers.md#_snippet_3

LANGUAGE: python CODE:

with Server() as server:
    session = server.new_session()
    print(server.is_alive())
True
print(server.is_alive())
False

TITLE: Connect to tmux Server using libtmux in Python DESCRIPTION: Illustrates how to import the libtmux library and establish a connection to the default tmux server. The Server() object represents the active tmux server instance, allowing for subsequent programmatic control.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_4

LANGUAGE: python CODE:

import libtmux
svr = libtmux.Server()
svr

TITLE: Split Window and Create Pane via libtmux Command DESCRIPTION: Demonstrates how to split an existing tmux window and create a new pane using the window.cmd() method in libtmux. This command returns the ID of the newly created pane, which can then be used to interact with it programmatically.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_8

LANGUAGE: python CODE:

window.cmd('split-window', '-P', '-F#{pane_id}').stdout[0]

TITLE: Instantiate libtmux Window Object from ID DESCRIPTION: Explains how to construct a Window object in libtmux directly from its window ID. This method is crucial for obtaining a rich, interactive object representation from raw command output, allowing for detailed control over specific windows.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_7

LANGUAGE: python CODE:

Window.from_window_id(window_id=session.cmd('new-window', '-P', '-F#{window_id}').stdout[0], server=session.server)

TITLE: libtmux Relational Object Model DESCRIPTION: This documentation outlines the hierarchical relationships between the core libtmux objects: Server, Session, Window, and Pane. It illustrates how these objects are connected, defining their parent-child dependencies within the libtmux abstraction.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/about.md#_snippet_0

LANGUAGE: APIDOC CODE:

Object           | Child            | Parent
---------------- | ---------------- | ----------------
{class}`Server`  | {class}`Session` | None
{class}`Session` | {class}`Window`  | {class}`Server`
{class}`Window`  | {class}`Pane`    | {class}`Session`
{class}`Pane`    | None             | {class}`Window`

TITLE: Execute Raw tmux Commands with libtmux Server DESCRIPTION: Demonstrates how to execute arbitrary tmux commands using the server.cmd() method in libtmux. This method allows direct interaction with the tmux server, respecting the configured socket name, and can be used to display messages or create new sessions.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_5

LANGUAGE: python CODE:

server = Server(socket_name='libtmux_doctest')
server.cmd('display-message', 'hello world')
server.cmd('new-session', '-d', '-P', '-F#{session_id}').stdout[0]

TITLE: Import libtmux Library DESCRIPTION: Imports the libtmux library into a Python environment, making its functionalities available for use.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/context_managers.md#_snippet_2

LANGUAGE: python CODE:

import libtmux

TITLE: Send Keystrokes to tmux Panes with libtmux DESCRIPTION: Explains how to send keyboard inputs to a tmux pane using pane.send_keys(). It covers sending a complete command with an implicit Enter, and sending parts of a command followed by an explicit pane.enter() call.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_16

LANGUAGE: python CODE:

>>> pane.send_keys('echo hey send now')

>>> pane.send_keys('echo hey', enter=False)
>>> pane.enter()
Pane(%1 ...)

TITLE: libtmux Window Context Manager Usage DESCRIPTION: Shows how to use session.new_window() as a context manager. A temporary tmux window is created and automatically closed upon exiting the with block.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/context_managers.md#_snippet_5

LANGUAGE: python CODE:

server = Server()
session = server.new_session()
with session.new_window() as window:
    print(window in session.windows)
    pane = window.split()
True
print(window in session.windows)
False

TITLE: Dynamically Activate Sidebar Navigation Links DESCRIPTION: This JavaScript snippet identifies sidebar navigation links that point to the current hostname. If a link is not already marked as 'active', it replaces the anchor tag with a <span> element, applying an 'active' class to visually indicate the current page without altering the URL.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/_templates/sidebar/projects.html#_snippet_0

LANGUAGE: javascript CODE:

(() => {
  const sidebar = document.getElementById("sidebar-projects");
  sidebar.querySelectorAll(`a[href*="${window.location.hostname}"]`)
    .forEach((link) => {
      if (!link.classList.contains("active")) {
        const d = document.createElement('span');
        d.innerHTML = link.innerHTML;
        d.classList.add("active");
        link.parentNode.replaceChild(d, link);
      }
    });
})()

TITLE: Create New Window via Session Command in libtmux DESCRIPTION: Shows how to create a new window within an existing tmux session using the session.cmd() method. This command returns the ID of the newly created window in a formatted string, enabling further programmatic manipulation.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_6

LANGUAGE: python CODE:

session.cmd('new-window', '-P').stdout[0]

TITLE: Instantiate libtmux Pane Object from ID DESCRIPTION: Illustrates how to create a Pane object in libtmux directly from its pane ID. This allows for programmatic interaction with a specific pane based on its identifier, providing a structured way to manage pane properties and content.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_9

LANGUAGE: python CODE:

Pane.from_pane_id(pane_id=window.cmd('split-window', '-P', '-F#{pane_id}').stdout[0], server=window.server)

TITLE: libtmux Session Context Manager Usage DESCRIPTION: Illustrates using server.new_session() as a context manager. A temporary tmux session is created and automatically killed when the with block is exited, ensuring proper cleanup.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/context_managers.md#_snippet_4

LANGUAGE: python CODE:

server = Server()
with server.new_session() as session:
    print(session in server.sessions)
    window = session.new_window()
True
print(session in server.sessions)
False

TITLE: libtmux Pane Context Manager Usage DESCRIPTION: Demonstrates using window.split() as a context manager for a tmux pane. The pane is automatically killed and removed when the with block is exited.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/context_managers.md#_snippet_6

LANGUAGE: python CODE:

server = Server()
session = server.new_session()
window = session.new_window()
with window.split() as pane:
    print(pane in window.panes)
    pane.send_keys('echo "Hello"')
True
print(pane in window.panes)
False

TITLE: Create New Background Window in libtmux Session DESCRIPTION: Illustrates how to create a new tmux window within a session without immediately attaching to it, using session.new_window(attach=False). It also shows how to search for and retrieve this newly created window using filtering methods.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_12

LANGUAGE: python CODE:

bg_window = session.new_window(attach=False, window_name="ha in the bg")
bg_window
session.windows.filter(window_name__startswith="ha")
session.windows.get(window_name__startswith="ha")

TITLE: Rename tmux Windows using libtmux DESCRIPTION: Shows how to rename an existing tmux window programmatically using the rename_window() method of a window object in libtmux. This allows for dynamic naming of windows.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_14

LANGUAGE: python CODE:

>>> window.rename_window('libtmuxower')
Window(@1 1:libtmuxower, Session($1 ...))

TITLE: Accessing libtmux Window Properties DESCRIPTION: This snippet illustrates how to obtain a Window object from an active session and access its fundamental properties. It covers retrieving window_name, window_id, window_height, window_width, and window_panes.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/api/properties.md#_snippet_3

LANGUAGE: python CODE:

>>> window = session.active_window

>>> window
Window(@1 ...:..., Session($1 ...))

LANGUAGE: python CODE:

>>> window.window_name
'...'

>>> window.window_id
'@1'

>>> window.window_height
'...'

>>> window.window_width
'...'

LANGUAGE: python CODE:

>>> window.window_panes
'1'

TITLE: Close tmux Windows using libtmux DESCRIPTION: Demonstrates how to programmatically close or kill tmux windows using the libtmux Python library. This involves calling the kill() method on a window object to terminate it.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_13

LANGUAGE: python CODE:

>>> bg_window.kill()
>>> w = session.active_window
>>> w.kill()

TITLE: List and Filter tmux Sessions using libtmux DESCRIPTION: Shows how to retrieve a list of all active tmux sessions via server.sessions. It also demonstrates filtering sessions by attributes like history_limit and performing direct lookups by session_id or session_name for precise session management.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_10

LANGUAGE: python CODE:

server.sessions
server.sessions.filter(history_limit='2000')
server.sessions.get(session_id="$1")
server.sessions[0].rename_session('foo')
server.sessions.filter(session_name="foo")
server.sessions.get(session_name="foo")

TITLE: libtmux.Pane Class API Documentation Directive DESCRIPTION: This reStructuredText directive specifies the generation of comprehensive API documentation for the libtmux.Pane Python class. It instructs Sphinx to include all public, private, and inherited members, along with the class's inheritance hierarchy, ordered by source.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/api/panes.md#_snippet_0

LANGUAGE: APIDOC CODE:

.. autoclass:: libtmux.Pane
    :members:
    :inherited-members:
    :private-members:
    :show-inheritance:
    :member-order: bysource

TITLE: tmux Object Identifiers and Lookup DESCRIPTION: This section details the unique identifiers used by tmux for its various objects (Session, Window, Pane) and how libtmux utilizes these IDs for lookup and management. It also clarifies the distinction between unique IDs and positional indices within tmux.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/about.md#_snippet_1

LANGUAGE: APIDOC CODE:

Object           | Prefix | Example
---------------- | ------ | -----------------------------------------
{class}`Server`  | N/A    | N/A, uses `socket-name` and `socket-path`
{class}`Session` | `$`    | `$13`
{class}`Window`  | `@`    | `@3243`
{class}`Pane`    | `%`    | `%5433`

Tmux has unique IDs for sessions, windows and panes.
panes use `%`, such as `%1234`
windows use `@`, such as `@2345`
sessions use `$`, such as `$13`

Tmux provides `window_id` as a unique identifier.

What is a {pane,window}_index vs a {pane,window,session}_id?
Pane index refers to the order of a pane on the screen.
Window index refers to the number of the window in the session.
To assert pane, window and session data, libtmux will use
{meth}`Server.sessions()`, {meth}`Session.windows()`,
{meth}`Window.panes()` to update objects.

TITLE: Traverse tmux Objects in libtmux DESCRIPTION: Shows how to navigate the object hierarchy within libtmux, specifically accessing the parent window from a pane object and the parent session from a window object. This is useful for contextual operations.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_18

LANGUAGE: python CODE:

>>> pane.window
Window(@1 1:..., Session($1 ...))
>>> pane.window.session
Session($1 ...)

TITLE: Capture Output from tmux Panes using libtmux DESCRIPTION: Demonstrates how to clear a tmux pane and then capture its output after executing a command. This involves using pane.clear() to reset the pane and pane.cmd('capture-pane', '-p').stdout to retrieve the pane's content.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_17

LANGUAGE: python CODE:

>>> pane.clear()  # clear the pane
Pane(%1 ...)
>>> pane.send_keys("cowsay 'hello'", enter=True)
>>> print('\n'.join(pane.cmd('capture-pane', '-p').stdout))  # doctest: +SKIP
$ cowsay 'hello'
 _______
< hello >
 -------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
...

TITLE: Accessing libtmux Session Properties DESCRIPTION: This section demonstrates how to retrieve a Session object and access its basic attributes like session_name and session_id. It also shows how to inspect all available attributes using Obj.__dataclass_fields__.keys() and access session_windows.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/api/properties.md#_snippet_2

LANGUAGE: python CODE:

>>> session = server.sessions[0]
>>> session
Session($1 libtmux_...)

LANGUAGE: python CODE:

>>> session.session_name
'libtmux_...'

>>> session.session_id
'$1'

LANGUAGE: python CODE:

from libtmux.neo import Obj

>>> sorted(list(Obj.__dataclass_fields__.keys()))
['session_attached', 'session_created', ...]

LANGUAGE: python CODE:

>>> session.session_windows
'...'

TITLE: Control and Rename tmux Sessions using libtmux DESCRIPTION: Demonstrates how to interact with a Session object in libtmux, specifically showing how to rename an existing tmux session programmatically. This allows for dynamic adjustment of session identifiers.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/README.md#_snippet_11

LANGUAGE: python CODE:

session
session.rename_session('my-session')

TITLE: Set a temporary home directory for pytest tests DESCRIPTION: This pytest fixture demonstrates how to temporarily set the HOME environment variable to a test-specific path. This is useful for isolating tests that rely on user-specific configuration files, such as .tmux.conf, ensuring a clean state for each test run by using monkeypatch.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/pytest-plugin/index.md#_snippet_3

LANGUAGE: python CODE:

import pathlib
import pytest

@pytest.fixture(autouse=True, scope="function")
def set_home(
    monkeypatch: pytest.MonkeyPatch,
    user_path: pathlib.Path,
):
    monkeypatch.setenv("HOME", str(user_path))

TITLE: Access and inspect first tmux session DESCRIPTION: Accesses the first session from the list of server sessions and displays its object representation, demonstrating how to select a specific session.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_7

LANGUAGE: python CODE:

session = server.sessions[0]
>>> session

TITLE: Access and inspect tmux window properties DESCRIPTION: Accesses the first window from a session and displays its 'window_index' property, illustrating how to retrieve window-specific attributes.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_10

LANGUAGE: python CODE:

window = session.windows[0]
>>> window.window_index

TITLE: Traverse up hierarchy from tmux pane DESCRIPTION: Accesses the first pane from a window and demonstrates traversing up the object hierarchy to its parent window, session, and server, verifying their IDs and relationships.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_14

LANGUAGE: python CODE:

pane = window.panes[0]
>>> pane.window.window_id == window.window_id
True
>>> pane.session.session_id == session.session_id
True
>>> pane.server is server
True

TITLE: Nested libtmux Context Managers for Cleanup DESCRIPTION: Showcases nesting libtmux context managers (server, session, window, pane) for hierarchical cleanup. All tmux objects are automatically cleaned up in reverse order upon exiting the outermost with block.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/context_managers.md#_snippet_7

LANGUAGE: python CODE:

with Server() as server:
    with server.new_session() as session:
        with session.new_window() as window:
            with window.split() as pane:
                pane.send_keys('echo "Hello"')
                # Do work with the pane
                # Everything is cleaned up automatically when exiting contexts

TITLE: Inspect libtmux Server object DESCRIPTION: Displays the representation of the libtmux server object, showing its current state and properties, such as the socket name.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_3

LANGUAGE: python CODE:

server

TITLE: Create new tmux session with libtmux DESCRIPTION: Creates a new tmux session programmatically using the libtmux server object. This establishes a test session for further operations and object traversal.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_2

LANGUAGE: python CODE:

session = server.new_session()

TITLE: Customize tmux session parameters in pytest DESCRIPTION: This Python fixture demonstrates how to override default session parameters for a tmux session created by the libtmux pytest plugin. It sets the session's initial dimensions (x and y) which are then passed to Server.new_session when a new session is created.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/pytest-plugin/index.md#_snippet_1

LANGUAGE: python CODE:

import pytest

@pytest.fixture
def session_params():
    return {
        'x': 800,
        'y': 600
    }


def test_something(session):
    assert session

TITLE: Filter tmux windows by index DESCRIPTION: Filters the list of windows within a session to find specific windows based on their 'window_index' property, demonstrating object filtering capabilities.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_15

LANGUAGE: python CODE:

session.windows.filter(window_index=window.window_index)

TITLE: Check object relationships in libtmux hierarchy DESCRIPTION: Verifies if a window is part of a session's windows, a pane is part of a window's panes, and a session is part of the server's sessions, confirming hierarchical integrity.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_17

LANGUAGE: python CODE:

window in session.windows
True
>>> pane in window.panes
True
>>> session in server.sessions
True

TITLE: Access parent session from tmux window DESCRIPTION: Retrieves the parent session object from a libtmux window and verifies its ID matches the original session, demonstrating upward traversal.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_11

LANGUAGE: python CODE:

window.session
>>> window.session.session_id == session.session_id

TITLE: Check if tmux window is active DESCRIPTION: Compares a window's ID with the active window's ID in the current session to determine if it is the active window.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_18

LANGUAGE: python CODE:

window.window_id == session.active_window.window_id

TITLE: Check if tmux pane is active DESCRIPTION: Compares a pane's ID with the active pane's ID in the current window to determine if it is the active pane.

SOURCE: https://github.com/tmux-python/libtmux/blob/master/docs/topics/traversal.md#_snippet_19

LANGUAGE: python CODE:

pane.pane_id == window.active_pane.pane_id