Terminal keyboard input

When the terminal is focused, Solo encodes your keystrokes and sends them to the running process, the same way a standalone terminal would. This page covers how keys are routed, the macOS Option-as-Meta behavior, and the editing shortcuts Solo adds on top.

How keys reach the terminal

Keystrokes go to the running process only while the terminal is focused (see Focus behavior). Solo applies these routing rules before process input:

  • App shortcuts - a key combo with an enabled Solo command binding is handled by Solo first and never reaches the process. For example, Cmd/Ctrl+K is the default binding for the command palette, but it can be remapped or disabled in Settings > Hotkeys.
  • Copy and paste - the fixed native clipboard shortcuts are handled by Solo and are never sent as raw process bytes.
  • macOS window cycling - Cmd+Backquote and Cmd+Shift+Backquote remain native operating-system window-cycle shortcuts and are not sent to the process.

Other key combos without an enabled Solo binding pass through to the process unless the operating system reserves them.

Solo supports both classic xterm key encoding and the Kitty keyboard protocol for apps that request it. See OSC, links, and Kitty keyboard protocol.

Option as Meta on macOS

Terminal apps and shells built around readline/emacs keybindings expect the Alt key to act as Meta. In classic xterm mode, pressing Meta+B, for example, sends an Esc-prefixed b, which readline interprets as “back one word.” When a running app requests Kitty keyboard mode, Solo sends the negotiated Kitty Alt-modified encoding instead. On a Mac keyboard, Option normally types alternate characters (@, |, #, accents, and other layout-specific symbols).

Settings > Terminal > Use Option as Meta key controls which behavior you get, with independent toggles for the Left Option and Right Option keys. Both are treated as Meta by default.

  • Option as Meta on: ordinary Option+key chords use an Esc-prefixed physical key in classic xterm mode or a Kitty Alt-modified encoding in app-requested Kitty mode. Readline word movement (Option+B, Option+F), Option+D (delete word forward), and emacs Meta chords all work. macOS dead-key Option chords remain on native composition even when that Option side is set as Meta.
  • Option as Meta off: Option types the character your keyboard layout produces, including dead-key accents.

A common setup for international layouts is to keep one Option key as Meta for shell editing and leave the other for typing symbols.

Editing shortcuts on macOS

Solo translates familiar macOS text-editing chords into classic control sequences or their negotiated Kitty equivalents:

Shortcut Classic xterm mode App-requested Kitty mode Effect in readline/zsh
Option+← / Option+→ Esc b / Esc f Kitty Alt-modified left/right arrow CSI Jump back / forward one word
Option+Backspace Esc Delete Kitty Alt+Backspace CSI-u Delete the previous word
Cmd+Backspace or Cmd+Delete Ctrl+U Ctrl+U (Solo override) Kill the entire line
Cmd+← / Cmd+→ Ctrl+A / Ctrl+E Kitty Super-modified left/right arrow CSI Jump to line start / end

Notes:

  • The Option shortcuts require that Option key to be set as Meta (see above); macOS dead-key chords remain native composition.
  • Cmd+← and Cmd+→ are bound to Focus sidebar and Focus terminal by default, and app shortcuts win. To use them for line navigation instead, remap or disable those two commands in Settings > Hotkeys.
  • Cmd+Backspace and Cmd+Delete use Ctrl+U in both classic and Kitty keyboard modes.

Scroll wheel speed for TUI apps

Full-screen terminal apps like vim, less, and htop capture scroll input: instead of moving Solo's scrollback, Solo accumulates normalized wheel movement into mouse reports or alternate-scroll arrow reports. One browser wheel event can produce zero, one, or multiple reports depending on its delta, the carried remainder, and the configured speed. Some apps feel sluggish this way, scrolling one line per tick (a tick here means one logical report, not necessarily one browser wheel event).

Settings > Terminal > Scroll wheel speed multiplies the scroll events sent to these apps, from 1x to 6x.

This setting only affects reports sent while TUI controls mouse. With Text selection on, the wheel stays in Solo instead. Normal terminal scrollback always uses your system scroll speed.

Are you an agent? Read this doc via API: /api/v1/docs/terminal/keyboard-input