Skip to main content

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()

Release files for fastmux 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fastmux 0.0.2
File Size Uploaded
fastmux-0.0.2.tar.gz 18.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fastmux 0.0.2
File Interpreter ABI Platform
fastmux-0.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 36.9 kB

Release files / fastmux-0.0.2.tar.gz

Download URL fastmux-0.0.2.tar.gz
Size 18.3 kB
Tags Source
SHA-256 checksum
How to use checksums
bb1f147a391f97b828387f15286e58d45dde69aa23bc9d95d53ef3e5fd58ce80
BLAKE2b-256 checksum
How to use checksums
a8499468b14945380d10642612cedf10e7da5306268048120f79726d883b56cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / fastmux-0.0.2-py3-none-any.whl

Download URL fastmux-0.0.2-py3-none-any.whl
Size 18.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cb504c4c1beeae77b23ce51e4c28f4419b734240c0af883dae8d99f98e4edc42
BLAKE2b-256 checksum
How to use checksums
4d9aae24ddb4e6a63a6500a40fecf5891071407e011fba9ff3c4e929f2efac38
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page