-
Notifications
You must be signed in to change notification settings - Fork 0
Glossary
joselopezrosario edited this page Oct 3, 2026
·
10 revisions
Names match the code (apps/desktop/src), so a term here should always be grep-able. Read this before changing anything that touches the sidebar, the session tree, or keyboard navigation.
-
Rail (
#rail) — the far-left strip of project icons, with + at the bottom (add a project, or reopen a closed one). One tab stop; Ctrl+Shift+Up/Down steps between projects. Plain arrows do nothing here. -
Sidebar / session list / tree (
#sidebar-scroll) — the panel next to the rail: the project row, then worktrees, groups, sessions, and the Changes and Files sections for the selected project. "The tree" and "the session list" mean this same panel. -
Terminal area / canvas (
host, the layout tree inlayout.ts) — everything to the right of the sidebar: one pane, or several arranged in a split.
-
Project row (
.project-pick,data-key="project:<name>") — the list's first row: the project name, and a ⋯ button for the project menu. Enter or Space opens or closes all its worktrees (Right opens, Left closes); Delete/Backspace asks to close or remove the project. -
Worktree (
.wt-pick,data-wt) — a row for one Git worktree. Enter or Space opens or closes it (Right opens, Left closes). Its + button (.wt-plus), shown on hover or on the current row, opens the session launch menu. Ctrl+Shift+T opens the same menu. New session in the row's Ctrl+Shift+M menu does too. -
Group (
.group-pick,data-group) — a saved split layout with session panes or empty slots (what the tree shows as, for example, "2 side by side"). Opening a group is what turns it into a split in the terminal area. -
Session (
.session-row,data-session) — one agent/terminal instance, backed by a PTY thatskiffdowns. A session keeps running even if no pane shows it. -
Changes / Files (
.files-head,.file-row) — per-worktree sections listing changed files and the file tree. A change, file, folder, Changes or Files row shows its preview while it is current (see Peek). Enter goes into the preview. Space opens or closes a header or folder. Shift+Enter on a change opens the file. -
Closed project (
S.closedProjects) — a project kept inprojects.tomlwith its settings but taken off the rail. Reopen it from the rail's + menu, File › Open closed project…, or the switcher. Removing a project drops it fromprojects.toml. Both end its sessions and leave the folder on disk.
-
Pane (
.cellinlayout.ts) — one rectangle in the terminal area showing one session's live terminal. A single session with nothing else open is "one pane, no split." -
Split — two or more panes arranged by a
Layouttree ({type:"split", dir, a, b}). A split is the on-screen form of a group. -
Focused pane (
S.focused) — which pane currently owns the keys, as app state, drawn with a frame (.cell.focused). This can be true even when DOM focus is elsewhere (e.g., resting on a tree row) — see "Row keeps the keys" below. The frame is hidden while a group row is picked (.group-picked) or the keys are on the rail (.at-rail), since typing then does not reach the pane. -
Peek / preview (
.peek,terminal/peek.ts) — the overlay over the terminal area for the current change, file, folder, Changes or Files row. It shows a diff, a terminal tool, or a card with an Open button. It has no session, group or split. The current row owns it:select()inkeyboard.tsstarts it, and it ends when another row becomes current. Rows declare their preview inworkspace/rowActs.ts. While a preview shows, panes do not take the keys and a covered session does not count as seen. -
Empty slot (
slot:,layoutSlots.ts) — a place in a group layout that has no session yet. Its picker starts a session there. -
Focus mode (
S.focusMode,modes.ts) — the rail, the tree, the top bar and the status bar hide; the panes of the current view fill the window. Ctrl+Shift+Up/Down step through the view's panes. Other keys that move in the rail or tree do nothing. Going to another view (Next waiting, the palette, Back, a project key) ends it. -
Maximize (
S.maximized,modes.ts) — only the focused pane shows, with the same chrome hidden. Ctrl+Shift+Up/Down step to the next or previous pane of the view and maximize it in its place; Ctrl+Shift+Left/Right do nothing. Going to another view ends it.
- Region — one of the three Tab stops F6/Shift+F6 cycle through: rail, the session list, the terminal. The + and ⋯ buttons are not stops; their actions are in the Ctrl+Shift+M menus. A keyboard-navigation concept, not a visual container — the sidebar is one region even though it holds worktrees, groups, and sessions.
-
Current row / roving item (
S.roveKey,.current,currentRow()) — the one highlighted row in the tree, which also holds the list's one tab stop (roving tabindex pattern). Ctrl+Shift+Up/Down moves it and opens what it lands on right away. -
Rail level (
S.atRail) — after Ctrl+Shift+Left, the keys are on the rail: no row is lit, no pane is framed, the panes stay as they were. Ctrl+Shift+Up/Down then steps projects; Ctrl+Shift+Right goes back into the list. Focus landing anywhere outside the rail, its menus and its dialogs ends it. -
Row keeps the keys — after opening a session from the tree (by click, Enter, or Ctrl+Shift+Up/Down), DOM focus stays on the tree row, not the terminal. Typed characters, plain arrows included, still reach the terminal:
passToTerminal()inkeyboard.tsforwards them and moves the keys there. This is deliberate, so Delete/Escape/F2 keep acting on the row. - Highlighted target — the menu and rename keys use the current row. The menu key opens the project menu on the rail or with no row. Rename uses the focused session with no row; it does nothing on the rail. New session uses the row's worktree, else the focused pane's worktree. End session uses a highlighted session row, else the focused session, including on the rail. Ctrl+Shift+W follows the row with DOM focus, so a highlight left on a session row does not pull a session out of its group.
-
Menu hint keys (
hintKey()inui/menu.ts) — a menu shows each item's key on the right. While the menu is open, that key picks the item for the menu's own target. Enter always picks the lit item, so Ctrl+Shift held from the opening key does not run Maximize. -
Palette / switcher (
switcher,commands.ts) — Ctrl+Shift+P: every command, session and project by name. While it is open, it holds every app key except its own.
Skiff uses Ctrl+Shift+letter (⌘+Shift on macOS) and leaves bare Ctrl to the terminal. [keys] in projects.toml overrides any action. F1 (shortcuts) shows the full live keymap, overrides included. This page names only the keys that move you around.
-
Ctrl+Shift+Up/Down (
session-next/session-prev): the next or previous row in the tree — project, worktree, group, session, Changes or Files — from anywhere, opening it. A change, file or folder row shows its preview, and the preview takes the keys. On the rail, the next or previous project. In focus mode or maximize, the next or previous pane of the view. In Settings, the next or previous section. Plain Up/Down/Home/End do not move rows. -
Ctrl+Shift+Left/Right (
list-project/list-back): to the rail level and back into the list. In Settings, to the section tabs and into the section. -
F6 / Shift+F6 (
region-next/region-prev): step through the three regions, in order. -
Ctrl+Shift+M (
project-menu): the menu of the highlighted row; on the rail, the project menu. The Menu key and Shift+F10 open the same row menu. -
Ctrl+Shift+P (
palette): every command, session and project by name. -
Ctrl+Shift+Alt+Arrow (
focus-left/right/up/down): move pane focus within a split. Alt keeps Ctrl+Shift+Arrow free for list moves and terminal selection, and avoids Ctrl+Alt+Arrow, which GNOME and KDE take for workspace switching — see issue #22.