Skip to main content

Drive and inspect tmux from Python: live session, window, and pane handles with CLI-style reprs

Project description

fastmux

fastmux is a pythonic binding to tmux. tmux() shows every session, window, and pane as a tree, and tmux(target) returns a live Session, Window, or Pane handle, using standard tmux target syntax such as mysess:1.2, %5, or @3. A Pane’s repr is its current screen, its transcript can be indexed and sliced like a list of lines, any scope can be searched rg-style, and panes are driven with send, send_keys, and friends. bgtmux will use it as the foundation for its managed background-session layer.

Install

pip install fastmux

You will also need tmux itself installed and on your PATH.

Getting started

import sys
from fastmux import *

Start a throwaway session running anything you like. It’s created detached, so your terminal is untouched:

s = new_session([sys.executable,'-u','-c','import time\n'
                                          'for i in range(30): print(f"line {i}")\n'
                                          'time.sleep(600)'],
                width=60, height=8)
p = s.pane
p.poll(wait_ms=2000)  # wait for output to arrive
p
line 23
line 24
line 25
line 26
line 27
line 28
line 29

A Pane’s repr is its live screen. The whole transcript (scrollback included) works like a list of lines:

len(p), p[0], p[-1], p[5:7].lines
(30, 'line 0', 'line 29', ('line 5', 'line 6'))

Split panes with the directional verbs rsplit, bsplit, lsplit, and asplit (no tmux -h/-v confusion), again without stealing focus:

p.bsplit(size=3, cmd="top")
s.windows
1: nbs* (2 panes) @0
  1.1: [60x4] %0 python (active)
  1.2: [60x3] %1 tmux

Panes can also be driven directly: p.send('ls\n') pastes text and polls for the response, p.send_keys('C-c') sends tmux key names, and p.wait() returns an exit status. See the full docs for the complete API.

Search any scope (one pane, a window, a session, or every terminal you have) and get rg-style hits whose target can be pasted straight back into tmux():

hits = s.search('line 2')
hits
0:1.1:2: line 2
0:1.1:20: line 20
0:1.1:21: line 21
0:1.1:22: line 22
0:1.1:23: line 23
0:1.1:24: line 24
0:1.1:25: line 25
0:1.1:26: line 26
0:1.1:27: line 27
0:1.1:28: line 28
0:1.1:29: line 29
tmux(hits[0].target)[-3:]
line 27
line 28
line 29
── 0:1.1 %0 · lines 27-30 of 30

And tmux() alone shows everything as a tree of sessions, windows, and panes:

tmux()
0: 1 windows
  1: nbs* (2 panes) @0
    1.1: [60x4] %0 python (active)
    1.2: [60x3] %1 top
s.kill()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastmux-0.0.2.tar.gz (18.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastmux-0.0.2-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

Details for the file fastmux-0.0.2.tar.gz.

File metadata

  • Download URL: fastmux-0.0.2.tar.gz
  • Upload date:
  • Size: 18.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for fastmux-0.0.2.tar.gz
Algorithm Hash digest
SHA256 bb1f147a391f97b828387f15286e58d45dde69aa23bc9d95d53ef3e5fd58ce80
MD5 ec5a141769b32515bb91b158572697d5
BLAKE2b-256 a8499468b14945380d10642612cedf10e7da5306268048120f79726d883b56cb

See more details on using hashes here.

File details

Details for the file fastmux-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: fastmux-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 18.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for fastmux-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cb504c4c1beeae77b23ce51e4c28f4419b734240c0af883dae8d99f98e4edc42
MD5 35acdb3a94994ffe32f9a59b5dd6bafa
BLAKE2b-256 4d9aae24ddb4e6a63a6500a40fecf5891071407e011fba9ff3c4e929f2efac38

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page