These docs may be ahead of the current release (v0.10.1). See the changelog.
stetv0.10.1
Reference

Keybindings

Every rebindable stet shortcut, grouped by what it acts on. Press ? in the app for the same list.

The keyboard drives everything in stet. Press ? at any time to see this list inside the app. Overlays (pickers, menus, the quit confirm) carry their own keys in a hint row along their bottom edge, so those are not repeated here.

KeyActionRebind id
j / kmove in the tree, viewer, or problems panelfocus-down, focus-up, cursor-down, cursor-up, problem-down, problem-up
h / lcollapse / expand folders (tree) or hop the caret by word (viewer)collapse, expand, caret-prev, caret-next
tabcycle focus through the open panes; the search pane's tab cycles its fieldsswitch-pane
enteropen the focused item / jump to a problemopen, open-problem
ctrl-pgo to file: fuzzy-search the whole repogo-to-file
.jump to the most recently changed filelatest-file
njump to the next file with findingsnext-finding

Viewer

KeyActionRebind id
/find in the viewer; n/N cycle matches, esc clearsfind
ctrl-fproject search pane; regex/case/scope/glob togglessearch
vtoggle diff ↔ full file view for a changed filetoggle-view
zfold / unfold the region at the caretfold
xtoggle long-line wrap in the viewertoggle-wrap
atoggle the line provenance railprovenance
fload full content when truncatedload-full
ctrl-d / uhalf-page cursor movement in the viewerhalf-page-down, half-page-up
g / Gjump to first / last linefirst-line, last-line
F12go to definition of the symbol under the caretgo-to-definition
Shift+F12find references to the symbol under the caretfind-references
Shift+Ifind implementations of the symbol under the caretimplementations
Shift+Hcall hierarchy of the symbol (Tab flips direction)call-hierarchy
Khover: type and docs for the symbol under the carethover
Sfind symbols: outline of the open filesymbols
< / >back / forward through viewer historyback, forward
ycopy path (tree), path:line:col (viewer), or the selected result / problemcopy-reference
Ycopy the file (viewer) or every entry (problems)copy-file
Shift+↑ / ↓extend a line selection (drag also selects)select-up, select-down
Ccopy the selected lines (or the caret line)copy-selection

Tabs

KeyActionRebind id
ctrl-tpin / unpin the current file as a tabpin-tab
ctrl-wclose the active tabclose-tab
{ / }previous / next tabprev-tab, next-tab

Workspace

KeyActionRebind id
sscope picker: kinds, or drill into recent commitsscope
ttheme switcher: filter, live-preview, applytheme
wswitch to another git worktreeworktrees
ctoggle changes-only filter for the treechanges-only
ctrl-ssave current settings to configsave-settings
rre-run diagnosticsrun-checks
Rrestart language serversrestart-servers

Layout

KeyActionRebind id
ptoggle the problems panelproblems
ctrl-btoggle the file tree sidebartoggle-sidebar
[ / ] / \shrink (closes past min) / grow / reset the focused problems panel, else the treeshrink-pane, grow-pane, reset-pane
ddock the focused pane to the next edge, clockwisemove-pane
mtoggle zooming the focused pane to fill the windowzoom-pane

App

KeyActionRebind id
eopen in terminal editor (suspends TUI, --editor template)open-editor
oopen in GUI / IDE (renderer stays live, --ide template)open-ide
Oopen externally in the OS default app (images, PDFs, binaries)open-external
Shift+F10context menu for the focused row or symbol (or right-click)context-menu
?show all keybindings and the marks legendhelp
qquit (confirm with y)quit

Custom keybindings

Every key above is rebindable through the keybindings section of your configuration: map a rebind id from the tables to a combo, a list of combos, or false to unbind it.

~/.config/stet/config.jsonc
{
  "keybindings": {
    "toggle-sidebar": "ctrl+e", // one combo
    "cursor-down": ["j", ""], // several
    "provenance": false, // unbind
  },
}

A combo is optional ctrl/shift modifiers joined by + or -, then a key: a letter, a symbol (?, [), an arrow ( or up), an F-key, or one of tab, enter, return, esc, space, backspace, delete, insert, home, end, pageup, pagedown. A single uppercase letter means shift ("G" is "shift+g"). Modifiers match exactly, so binding "s" never fires on ctrl+s; the one exception is shift on a symbol key, which is ignored.

The tables list each action's primary combo. Several movement actions keep an arrow as a second default: / beside j / k, and / beside h / l.

An unknown id, or a combo that does not parse, keeps the default. Binding one combo to two actions leaves both registered, and which of them fires follows stet's internal dispatch order rather than the order of these tables, so unbind the one you do not want with false rather than relying on the winner. Startup surfaces only the first configuration problem it finds, so a keybinding issue can sit behind an unrelated one; ? and --help always show the bindings actually in effect.

Keys inside overlays (pickers, menus, the quit confirm, the search pane) and ctrl+c are fixed. A committed find also holds n and N to cycle its matches until esc clears it, ahead of the global n.

Mouse

The keyboard drives everything, but the mouse works too. Click a file to open it, a folder to expand or collapse it, a diff line to move the cursor there, or a problem to select it. Double-click a file in the tree, or a tab in the strip, to pin it as a tab; double-click a problem to jump to it. Clicks also work in the overlays and the search pane, and hovering a theme in the switcher previews it live. Clicking a pane focuses it, so clicking the problems panel's chrome focuses it without changing the selection, and the wheel scrolls whichever pane the pointer is over. Right-click a tree row or a viewer symbol for a context menu of the actions that apply there, the same menu Shift+F10 opens on the focused pane.

The viewer's context menu opened on a symbol, listing the code intelligence pulls above copy and open actions

The menu carries whatever applies where you opened it, so it is shorter elsewhere: the code intelligence rows above need a symbol under the caret, and a directory in the tree offers only Copy path. Nothing in it is shown greyed out.

Drag across diff lines to select a range. Holding the pointer at the top or bottom edge scrolls the viewer and continues the selection. Shift-click extends the range when the terminal forwards Shift+mouse; some terminals reserve that gesture for native text selection, so drag or Shift+↑ / Shift+↓ is portable.

On this page