--- title: "The prompt" description: "Ghost suggestions, tab completion that explains itself, syntax highlighting, and real multi-line editing." --- tty7 puts an editor at the shell prompt. Nothing to install, no plugin to source — the moment a supported shell starts in a pane, the prompt behaves like this. The tty7 prompt ## Ghost suggestions As you type, the rest of the line is filled in from your history, greyed out ahead of the cursor. | | | |---|---| | → | Accept the whole suggestion | | Keep typing | The suggestion narrows | | Anything that does not match | It disappears | Your existing shell history is what feeds it — there is no separate database to build up first, and it carries across sessions and reboots. ## Tab completion, with descriptions ⇥ opens a completion menu that knows what it is offering: - **Commands** from your PATH and your shell's builtins - **Files and directories**, with `cd`, `pushd`, `popd`, and `rmdir` offering directories only - **Flags and subcommands** with their descriptions, for about 100 common commands — `git`, `cargo`, `docker`, `kubectl`, `npm`, `brew` and the rest - **Values** where a flag only takes certain ones Explained tab completion When tty7 has nothing useful to offer, the ⇥ falls through to your shell's own completion, so a carefully configured zsh setup is not lost. To hand ⇥ back to the shell entirely, turn off **Settings → Input → Prompt → Tab completion** (`tab_completion` in `config.json`). ## Syntax highlighting The line you are typing is coloured as you type it: the command, its flags, its arguments, paths, quoted strings, operators, comments. It is a fast tokenizer, not a shell parser — it never changes what gets run. ## Line editing The prompt behaves like a text field, because it is one: - **Click to place the caret** anywhere in the line - **Select with the mouse**, drag to extend - **Word motion** and word delete - **Undo** Everything readline does still works — this sits on top, it does not replace it. On macOS, turn on **Settings → Input → Keyboard → Option (⌥) acts as Meta** if you want ⌥ B / ⌥ F to move by word instead of typing `∫` and `ƒ`. ## Typing with an IME Pinyin, Kana, Hangul and the rest work in a pane the way they do in a text field: the composition is drawn in place at the cursor and only the committed text reaches the program. Two rules decide who gets a keystroke: - **A plain printable key goes to the IME.** A key held with ⌃, ⌘, fn, or ⌥ does not — those are chords, not characters. - **A program that asks for every key gets every key.** When something turns on the kitty keyboard protocol's report-all-keys mode, the IME steps aside so the program sees raw input. On macOS with **Option (⌥) acts as Meta** turned on, ⌥ chords bypass the IME entirely, so ⌥ B reaches your shell as meta-b instead of being eaten as a dead key. Rendering CJK well is a separate question — see [fonts and the two-column grid](/customization/fonts#cjk-and-the-two-column-grid). ## Multi-line commands A command that wraps, or one you deliberately break across lines, edits in place. The grid shifts to keep the caret visible instead of scrolling the whole screen away. | | | |---|---| | ⇧ ⏎ · ⌥ ⏎ | Insert a newline instead of submitting | | ⏎ | Submit the whole buffer, however many lines it is | The newline key is rebindable as `InsertNewline` under **Settings → Keybindings**. ## Which shells The prompt features arrive through tty7's shell integration, which is injected automatically — nothing to add to your rc file — for **zsh**, **bash**, **fish**, **PowerShell**, and **WSL**. Other shells (nushell, elvish, xonsh, and the rest) run perfectly well in a pane; they simply do not get the prompt layer. The integration is also what reports the working directory, the exit code of each command, and where prompts begin — which is what the sidebar's branch readout, the "command finished" notification, and `tty7 procs` are built on. [How shell integration works →](/reference/shell-integration) ## Turning it off Each prompt feature is a switch, and turning one off hands its key straight back to the shell: | Setting | Key it releases | |---|---| | **Settings → Input → Prompt → Tab completion** | ⇥ → your shell's completion | | **Settings → Input → Prompt → History search** | ⌃ R → your shell's reverse-i-search, or your fzf binding | ### Giving the whole prompt back to the shell Turning off **Settings → Input → Prompt → Prompt editor** (`prompt_editor: false`) hands over not one key but the line itself. Every keystroke at the prompt — printable characters, arrows, IME commits, paste — goes straight to the PTY, and your shell's own line editor does the editing: zsh's ZLE, bash's readline, fish's reader. A widget you bound yourself runs exactly as it does outside tty7: ```zsh # ~/.zshrc — works at a tty7 prompt with the editor off bindkey '^[[A' history-beginning-search-backward-end ``` What you give up is the layer this page describes: ghost suggestions, the completion menu, the fuzzy ⌃ R, the multi-line editor, mouse caret placement and undo on the prompt. Tab completion and history search grey out in Settings while it is off — both are menus tty7 opens inside that editor, so there is nothing left for them to switch. What you keep is everything shell integration reports: prompt boundaries, the working directory, exit codes, "command finished" notifications, the sidebar's branch readout, `tty7 procs`. The setting moves the line editor, not the integration. It applies to open panes immediately, so there is nothing to restart, and a line you had half-typed is handed to the shell rather than dropped. Reach for this if the shell's own history traversal matters to you — shared history between panes, `HIST_FIND_NO_DUPS`, a prefix search bound to ↑ — or if a plugin you rely on (zsh-autosuggestions, zsh-syntax-highlighting, atuin) should own the line instead.