tmuxp shell#

usage: tmuxp shell [-h] [-S socket-path] [-L socket-name] [-c COMMAND]
                   [--best | --pdb | --code | --ptipython | --ptpython | --ipython | --bpython]
                   [--use-pythonrc] [--no-startup] [--use-vi-mode]
                   [--no-vi-mode]
                   [session-name] [window-name]

Positional Arguments#

session-name
window-name

Named Arguments#

-S

pass-through for tmux -S

-L

pass-through for tmux -L

-c

instead of opening shell, execute python code in libtmux and exit

--best

use best shell available in site packages

Default: “best”

--pdb

use plain pdb

--code

use stdlib’s code.interact()

--ptipython

use ptpython + ipython

--ptpython

use ptpython

--ipython

use ipython

--bpython

use bpython

--use-pythonrc

load PYTHONSTARTUP env var and ~/.pythonrc.py script in –code

Default: False

--no-startup

load PYTHONSTARTUP env var and ~/.pythonrc.py script in –code

Default: False

--use-vi-mode

use vi-mode in ptpython/ptipython

Default: False

--no-vi-mode

use vi-mode in ptpython/ptipython

Default: False

Directly enter commands#

$ tmuxp shell -c 'python code'
../_images/tmuxp-shell.gif

Guide#

Launch into a python console with libtmux objects. Compare to django’s shell.

Automatically preloads current tmux server, session, window pane. Pass additional arguments to select a specific one of your choice:

(Pdb) server
<libtmux.server.Server object at 0x7f7dc8e69d10>
(Pdb) server.sessions
[Session($1 your_project)]
(Pdb) session
Session($1 your_project)
(Pdb) session.name
'your_project'
(Pdb) window
Window(@3 1:your_window, Session($1 your_project))
(Pdb) window.name
'your_window'
(Pdb) window.panes
[Pane(%6 Window(@3 1:your_window, Session($1 your_project)))
(Pdb) pane
Pane(%6 Window(@3 1:your_window, Session($1 your_project)))

Supports PEP 553’s PYTHONBREAKPOINT and compatible debuggers, for instance ipdb:

$ pip install --user ipdb
$ env PYTHONBREAKPOINT=ipdb.set_trace tmuxp shell

You can also pass in python code directly, similar to python -c, do this via tmuxp -c:

$ tmuxp shell -c 'print(session.name); print(window.name)'
my_server
my_window
$ tmuxp shell my_server -c 'print(session.name); print(window.name)'
my_server
my_window
$ tmuxp shell my_server my_window -c 'print(session.name); print(window.name)'
my_server
my_window
$ tmuxp shell my_server my_window -c 'print(window.name.upper())'
MY_WINDOW

Assuming inside a tmux pane or one is attached on default server:

$ tmuxp shell -c 'print(pane.id); print(pane.window.name)'
%2
my_window

Shell detection#

tmuxp shell detects the richest shell available in your site packages, you can also pick your shell via args:

  • --pdb: Use plain old breakpoint() (python 3.7+) or pdb.set_trace

  • --code: Drop into code.interact, accepts --use-pythonrc

  • --bpython: Drop into bpython

  • --ipython: Drop into ipython

  • --ptpython: Drop into ptpython, accepts --use-vi-mode

  • --ptipython: Drop into ipython + ptpython, accepts --use-vi-mode