sloshUsing it slosh.foo

Keys#

Everything is the leader (C-a by default) and then a key. Pressing the leader twice sends it to the program in the pane.

C-a ? shows a cheatsheet built from the bindings your config actually has. C-a p opens the same list as a palette you can type into.

Defaults#

keydoes
Entersplit whichever way there is more room: across the longer side, and the other axis if that will not fit
\ -split into columns / rows, when you mean one
h j k l, or arrowsmove focus
othe next pane
H J K L, or shift+arrowsmove the boundary between panes, or the pane itself when it is floating
0give every visible pane an even share
Spaceturn the layout a quarter turn
z(un)zoom this pane
mminimize pane to bar in the bottom
ffloat it above the layout, and back
Fa new floating shell, the throwaway terminal
= (+) -grow / shrink a focused float about its centre (- splits, when the pane is tiled)
xclose this pane
Xclose this tab, and everything in it
rrun a finished pane's command again
Pset this pane's purpose
> <push this pane to the next / previous tab (a toast says where it went)
bbreak this pane out into a tab of its own
cnew tab
Tab shift+Tabnext / previous tab
1…9go to that tab
ssearch: find a pane by name
wthe projects picker: every project under your roots, open or not (workspaces)
Wwrite this tab out as this project's layout (workspaces)
pthe command palette
PgUp PgDn Home Endscrollback (the wheel works too)
/search the scrollback: type, ↑ ↓ between matches, Enter keeps your place, Esc snaps back
tthe theme picker: every theme you can name, applied as you move, C-s keeps it (themes)
eedit the config, in a pane
?this list
ddetach, leave it running
qquit the session
C-asend a literal C-a

x/X, p/P, w/W and f/F are deliberately shifted pairs on one letter. Close this pane / close this tab; run a command / tag this pane; go to a project / write this project down; float this pane / float a fresh one. The shifted half is the same verb on a bigger thing, so the shift is less to remember than a second letter would have been.

Rebinding#

C-a is the default leader key, but if you want it back for start-of-line (and plenty of people do), it's easy to reconfigure:

keys { prefix "ctrl+b" }        // or ctrl+space, or alt+x, or ...

A keys block adds to the defaults rather than replacing them, so binding one key leaves the rest alone. "none" takes a binding away:

keys {
    bind "v" "split-cols"       // as well as \
    bind "-" "none"             // and no more splitting into rows
}

Modifiers are:

Named keys are:

the arrows can be written as ← → ↑ ↓ too, so a chord copied off the cheatsheet is a chord you can paste into a config.

Anything else is the character you press. That includes the shifted ones, which carry their own shift: "?" is "shift+slash", "H" is "shift+h", "|" is "shift+backslash".

slosh --check reads a config and says what it could not honour, one problem per line with a file and a line number. Worth running after editing bindings by hand.

Without the leader#

Bindings in a direct block fire the moment you press them:

keys {
    direct {
        bind "ctrl+alt+left" "focus-left"
        bind "ctrl+alt+right" "focus-right"
    }
}

That chord is then gone from every program in every pane, because it has to be. It is a footgun and it is yours; the cheatsheet lists direct bindings apart, under "without the leader", so the C-a then: caption above stays true.

Every action#

The name in the second half of a bind is an action. The full list, every action, its default key, and what it does can be found on the actions page. Any of them can be bound here, and any of them can be run from the palette without being bound at all.