Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Keybindings

Every key tma binds or reads, in one place. The prefix and mouse bindings are the ones tma install-keys writes; for installing, rebinding, or removing them see Install the keybindings. The rest are keys the live surfaces read for themselves, so they need no binding at all.

Prefix bindings

Written to the managed file ~/.config/tma/tmux.conf. All are on your tmux prefix.

keytmux commanddoes
adisplay-popup -E -w 80% -h 60% 'tma'Open the picker in a popup.
Grun-shell 'tma watch --temporary-session --table --client "#{client_name}"'Open the full-width table in a dedicated temporary session.
jrun-shell 'tma jump --attention --client "#{client_name}"'Jump to whoever wants you: blocked first, then finished-unreviewed.
grun-shell 'tma jump --blocked --client "#{client_name}"'Jump to the longest-blocked agent.
brun-shell 'tma jump --back --client "#{client_name}"'Return one step along the jump trail.
hrun-shell 'tma jump --home --client "#{client_name}"'Return to the trail’s oldest origin.
Arun-shell 'tma act --menu --pane "#{pane_id}"'Open the action menu for the active pane.

G rather than g: g here is already jump --blocked. install-keys claims only keys that are unbound in stock tmux.

Only the run-shell bindings carry --client "#{client_name}", because only run-shell format-expands its command. display-popup and split-window do not, so the flag would arrive as the literal #{client_name}; the popup therefore lets tma resolve the acting client itself.

Mouse bindings

Opt-in (tma install-keys --mouse), bound in tmux’s root table so they need no prefix, and inert without set -g mouse on. Each row is a click on one of the #[range=user|tma:…] segments tma status prints.

clickdoes
left-click the blocked counttma jump --blocked: go to the longest-blocked agent.
left-click any other tma countOpen the picker popup, the same one prefix a opens.
right-click any tma segmenttma jump --menu: a tmux menu of every agent.
left-click outside a tma segmenttmux’s own switch-client -t=, so clicking a window name still switches to it.
right-click outside a tma segmentNothing. Alt-right-click still opens tmux’s own window menu.

Four bindings carry all of that: MouseDown1Status, MouseDown1StatusRight, MouseDown3Status, and MouseDown3StatusRight. The left-click chain matches in the order listed above, first match wins.

There is no click that dismisses the popup the counts open. tmux drops every mouse event that lands outside an open display-popup, so a second click on the status line never reaches a binding — Esc closes it.

Keys inside the picker

The picker’s own keys, once it is open. The pane you opened it from is never in the list, so jumping to where you already are is not offered.

keydoes
enterJump to the highlighted agent, clear its attention flag, close the picker.
tabOpen the tmux action menu for the highlighted agent.
ctrl-sToggle the scope between every session and the invoking one.
/ Move the selection (wraps at both ends).
backspaceDelete the last query character.
any printable characterAppend to the fuzzy query.
esc, ctrl-cClose.

Every printable key types, with none held back for a shortcut — an agent called auth and a branch called 2fa both have to be searchable, so the action menu sits on tab and there is no digit quick-select.

The mouse works inside the popup too, with set -g mouse on (no install-keys needed — the surface asks the terminal for reports itself):

gesturedoes
move the pointer over a rowUnderline it: what a click would take.
click a rowSelect it, the same as moving the highlight there with /.
click the selected row againJump to it and close, the same as enter. Two clicks, so a stray one cannot move your client.
wheel up / downMove the selection three rows, stopping at each end rather than wrapping.

Hover is an underline and selection is the reversed block, because they are different claims: the pointer’s and the keyboard’s. Any keypress drops the hover so only one row is marked, and the next pointer move brings it back.

A press anywhere else in the popup (the border, the preview half, the query line) does nothing.

The live preview needs a popup at least 76 columns wide, the same threshold tma watch uses. Narrower than that, the list takes the whole popup and nothing is captured.

Keys inside tma watch

keydoes
enterJump to the highlighted agent and clear its attention flag. A plain watcher stays open; the prefix G temporary watcher exits.
a, tabOpen the tmux action menu for the highlighted agent. (tab is the picker’s spelling; both work here.)
pSwap the live preview for the full-width status table, and back. Wide body only.
gFlatten the repo grouping, and regroup. Wide body only.
k / j, / Move the selection (wraps at both ends).
q, esc, ctrl-cQuit.

Both p and g change the wide body, which the pane gets at 76 columns or more. Below that the body is a single flat list and neither key changes what you see.

Note that a targets the pane under the cursor, not the pane tma watch itself runs in, which is what lets a screenful of blocked agents be answered from one place. See Author a custom action.

tma watch takes the same mouse gestures as the picker (hover underlines, click selects, click again jumps — with the same persistent/temporary behavior as enter; wheel moves three rows, and any key drops the hover). Group headers are not selectable, so hovering or clicking a ▸ repo line does nothing.

A plain tma watch is persistent: put it in a split, window, or second terminal and a jump leaves it running there. The managed prefix G placement is deliberately different. It opens a dedicated temporary session, records the pane where you pressed G as the return-trail origin, and destroys the temporary session when you jump or quit. No dashboard window is left behind in your work session.

While tma watch is running, that pane’s mouse belongs to tma: tmux’s own drag-to-select and scroll-into-copy-mode do not apply inside it (hold shift for your terminal’s native selection). Every other pane is untouched — tmux routes a mouse event by where the pointer is, and only the pane under it decides.

Keys inside tma jump --menu

The menu is tmux’s own display-menu, so tmux owns the keys.

keydoes
1-9Fire the nth entry. The tenth and later carry no digit.
/ , enterMove and fire.
q, escDismiss.

tma act --menu renders the same way, over the actions fireable on the target pane.

Jump directions

Which tma jump flag each key runs, and the one with no key.

flagkeydoes
--attentionprefix jThe next agent that wants you: blocked first, then finished-unreviewed.
--blockedprefix g, left-click the blocked countThe longest-blocked agent.
--nextnoneThe next agent after the current pane, in session then window then pane order. This is the default when no direction flag is given.
--backprefix bOne step back along the return trail.
--homeprefix hThe trail’s oldest origin, clearing the trail.
--pane <ID>noneA named pane. What a menu entry and the picker’s Enter both run.
--menuright-click any tma segmentA tmux menu of every agent.