A TUI for shpool. Like tdupes/shpiel but even more enlightened — it's just perl.
shpool-table is shperl's counterpart in Rust.
shperl arranges your shpool sessions in a comely table. Select, create, kill, and attach to sessions with mere keystrokes. Upon detaching, you will find yourself back at the table. Starting/quitting shperl has no effect on your shpool sessions, so you can run shperl in multiple terminals or tmux panes.
shpool (3 sessions)
name created active
>acme -nw 2h now
stuxnet 2h 1m
* djt-miner 1d 3h
j down k up spc attach n new d kill D daemon q quit
>marks the selection.*marks attached sessions.
-
Set your table with whatever flavor you like:
-
L'amuse-bouche
perl -e "$(curl -fsSL https://raw.githubusercontent.com/GeoffChurch/shperl/main/shperl.pl)" -
Le plat de résistance
DEST=~/.local/bin/shperl curl -fLo "$DEST" https://raw.githubusercontent.com/GeoffChurch/shperl/main/shperl.pl chmod +x "$DEST"
-
shperl [--config-file PATH] [--log-file PATH] [--socket PATH] [-v ...]
These flags are forwarded verbatim to every shpool invocation, so e.g. shperl --socket /tmp/s2 manages sessions on a non-default daemon.
Keys:
| key | action |
|---|---|
j / down |
select next |
k / up |
select previous |
| space / enter | attach to selected session |
n |
create new session (prompts for name) |
d |
kill selected session (confirm with y) |
D |
start shpool daemon if not running, then refresh |
q / C-c |
quit shperl (doesn't affect sessions) |
Detaching from a shpool session (C-S C-q, or however you've configured it) returns you to shperl.
The session list also auto-refreshes when the terminal regains focus, so switching back from another window picks up sessions added/killed elsewhere without a keystroke.
shpool eventsto subscribe toshpool's events socket, so thatshperlcan refresh the table display at each event. Whenever the socket is unavailable,shperlfalls back to refreshing upon keystrokes and terminal focus events.shpool list --jsonfor the table display. TheDbinding runs the same call with--daemonize, which forks a daemon first if one isn't already running.shpool attach <name>for attach and create.shperlis stricter thanshpoolhere because it checks if a session name already exists before creating it.shpool kill <name>for kill.