仓库 →

Keybindings

AtomCode's TUI is built on ratatui + crossterm; common keybindings stick close to the conventions of mainstream terminal tools. Run /keys in a session to dump this table into the current scrollback, or /help for the slash-command list.

Input editing

KeyAction
EnterSend the message
\ then EnterInsert newline (universal — a trailing backslash makes the line a continuation, works in every terminal)
Alt+EnterInsert newline (most terminals; macOS Apple Terminal needs "Use Option as Meta key" enabled under Settings → Profiles → Keyboard; Windows Terminal reserves it by default — release in settings)
Shift+EnterInsert newline (only terminals that disambiguate the modifier: Kitty / WezTerm / iTerm2 with Report Modifiers / Windows Terminal / Ghostty / Warp. Apple Terminal, xterm, GNOME Terminal, VS Code integrated terminal all collapse it to Enter — use \ + Enter instead)
Ctrl+EnterInsert newline (requires a Kitty-keyboard-protocol terminal such as Kitty or WezTerm)
Ctrl+JInsert newline when the terminal distinguishes the chord
EscClear current input / interrupt streaming output
Esc EscUndo the previous turn when the prompt is idle and empty
↑ / ↓Browse input history
→Fill a faint next-prompt suggestion into an empty input (press Enter separately to send)
Ctrl+RReverse-search input history (type to filter live; Ctrl+R again jumps to the next older match; Enter accepts into the input, Esc cancels)
TabAccept slash-command, skill, or file completion
Shift+TabCycle to the next execution mode when no completion menu is open (also works while streaming)
Ctrl+DDelete forward; when idle and empty, press twice within two seconds to quit
Ctrl+B / Ctrl+FMove one character left / right
Ctrl+UDelete to the start of the current line
Ctrl+WDelete a word
Ctrl+KDelete from cursor to end of line
Ctrl+AMove cursor to line start
Ctrl+EMove cursor to line end

Custom newline shortcuts

Open /config, search for “newline”, and select “Keyboard shortcuts / Newline”. Press Enter or A to add a chord, press that chord, then press Enter to confirm. Press M to type comma-separated names such as alt+j, ctrl+j; Tab also switches capture to manual entry. Delete removes the selected binding, Ctrl+D restores defaults, and Esc goes back.

[ui.keybindings]
newline = ["alt+j", "ctrl+j"]

The list replaces the default newline chords. Changes apply immediately and /keys shows the effective bindings. \ + Enter remains available. Use newline = [] to disable the chords, or remove the newline entry to restore defaults. Conflicts with existing actions or reserved keys, duplicate chords, and invalid names are rejected without changing the active bindings.

Plain printable characters cannot be shortcuts. Names accept ctrl, alt, shift, and cmd modifiers, letters, digits, enter, space, arrows, and f1–f24. AtomCode cannot detect or release shortcuts intercepted by the terminal or IDE; verify that manually entered chords reach the app.

Browse & scroll

KeyAction
PageUp / PageDownPage by the visible conversation height, keeping one overlap row
Mouse wheelScroll the conversation
/readOpen a read-only conversation snapshot with expanded tool output; no GUI or clipboard required
↑ / ↓ / j / kReader: scroll one line
PgUp / PgDn / Ctrl+B / Ctrl+FReader: page up / down
Ctrl+U / Ctrl+DReader: half-page up / down
Home / EndReader: jump to beginning / end
EscLeave the reader, preserving the draft and main scroll position; reopen /read to refresh the snapshot

Selection & copy

Key / actionEffect
Mouse dragSelect text in the chat area (atomcode-managed; auto-scrolls at selection edges)
Shift+ mouse dragUse the host terminal's native selection (bypasses atomcode; better for cross-viewport copy)
Ctrl+Shift+CCopy selection to system clipboard
Right-click menuSome terminals offer direct copy/paste (depends on the terminal, not atomcode)

Control flow

KeyAction
F2 / Shift+F2Switch to the next / previous configured model; Mac keyboards usually require Fn+F2 / Fn+Shift+F2
Ctrl+TCycle the active model's reasoning_effort
Ctrl+OShow / hide tool output and reasoning (verbose mode)
EscCancel the in-progress tool call or streaming output
Ctrl+CFirst press cancels the current action; second consecutive press exits

New screen (atomcode --tui)

Most keys are the same as above; these differ. Type /keys in a session for the full list.

KeyAction
Ctrl+OReasoning: one line / in full / folded, cycles (also /reasoning; Alt+R works too when the terminal sends Option as Meta)
Ctrl+TTool output: all / one summary each / summarised in groups, cycles; the opening step opens answered approvals too (the way to them while the mouse is handed back and a click cannot reach them)
Ctrl+GHand the mouse to the terminal (use its own selection), again to take it back (also /mouse). While it is handed back the wheel, the trackpad and ↑ ↓ scroll the conversation; with [ui] mouse = false it starts that way
Ctrl+P / Ctrl+NStep through the input history (always; with the mouse handed back ↑ ↓ scroll, so these are the way to the history)
Ctrl+XInterrupt the current turn and immediately send the queued messages, one per turn (each with its image); with nothing queued it is a plain interrupt
Double-tap EscOpen the rewind panel (same as /rewind) to pick an earlier prompt to roll back

Tool permission dialog

When the model is about to execute a dangerous action (destructive bash, writing sensitive files, deleting source code, etc.), AtomCode pops a confirmation dialog:

KeyAction
y / EnterAllow once
aAlways allow this pattern for the current session
n / EscDeny
Don't get greedy

"Always allow" is granted per tool name + argument pattern and only for the current session — it resets next launch. For permanent cross-session exceptions, manage them in config (e.g. allowlists for specific paths).

Next steps