zle and bash’s readline own the line, the cursor and the redraw.
The way out is to stop letting the shell draw the line. That is what the TYBA command line does: PS1 leaves the screen and the box you type in belongs to the app.
It ships on. A fresh install already opens with it. To turn it off, use Settings → Code → TYBA command line, on the Use the TYBA line switch. The choice applies to new sessions — the mode is set when the shell is born, so a session already open stays as it is.
What you get
Command completion
Suggestions no longer depend on you having run the thing before. Each part of the line is completed by whoever knows about it:
The order is not alphabetical. What you use more, and used more recently, rises.
The first word comes from two sources because neither is enough on its own. The app reads
$PATH from disk, which costs the shell nothing. But nvm, asdf and direnv rewrite $PATH after the session is born, and aliases and functions do not exist on disk — those the shell itself reports, per session. The result is the list you would see typing in your own terminal, not the one the app would guess.⌘L (Ctrl+Alt+L off macOS) clears the screen without closing the session.
The history you already have
On first run, TYBA imports your shell history — zsh, bash and fish — so suggestions start out knowing what you run, instead of waiting for you to type it all again. It is read-only: your shell’s history files are not modified. To search inside it with scope and filters, see the command palette.Who gets the keystroke
The TYBA line is not always the keyboard’s owner, and that is correctness rather than comfort:ssh, psql, python, sudo asking for a password — all of them read what you type during the command. A box that swallowed those keys would take your password and send it nowhere.
Ctrl+C, Ctrl+D and Ctrl+Z reach the process even with the line focused — they are signals, not text. Ctrl+C also clears the box, which is what you expect from it.
While a command runs, the up and down arrows do not reach the program if the terminal is waiting for a whole line. There they would do nothing and would still show up as
^[[A in the stored output. In vim, htop, or a menu reading key by key, they pass through normally.If something gets stuck
It is the escape valve, and it exists because the heuristic can fail on a shell with an exotic configuration. To go back for good, turn the switch off in Settings — sessions already open stay as they are until you open another.Where it works
Without the shell integration markers there is no way to know the shell is at the prompt. In that case TYBA falls back to the classic terminal instead of guessing.
See also
Command blocks
What the TYBA line turns on alongside it.
Shell integration
The prerequisite, and why it never touches your dotfiles.
Command palette
History and snippets live there too, with no dependency on this page.
User settings
Where the switch lives, and the rest of the Code section.