# 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](./focus-behavior.md)). 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](../command-palette/using.md), but it can be remapped or disabled in **[Settings > Hotkeys](../keyboard-shortcuts/customizing.md)**.
- **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](./osc-kitty-protocol.md).

## 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**](./mouse-ownership.md). With **Text selection on**, the wheel stays in Solo instead. Normal terminal scrollback always uses your system scroll speed.

---

Are you a human? Read this doc on the web: https://soloterm.com/docs/terminal/keyboard-input
