Autosuggestions

Typing a repeated command finishes itself: as you type, the rest of the most recent matching command from this tab’s own history shows as dim ghost text after the cursor — fish’s interaction, computed entirely terminal-side.

The rest of the most recent matching command from this tab’s own history renders as dim ghost text after the cursor as you type. Right accepts all of it, Alt+Right accepts one shell-word, and nothing ever executes without an explicit accept. The rules:

The delay

Every keystroke past the first character flips a guess onto the screen the instant it computes - and while typing fast those guesses are the feature’s weakest. autosuggestions_delay_ms (default 0, fish parity - today’s behavior exactly) holds a qualifying suggestion back until your typing has been stable for that many milliseconds: no ghost churning while you type, one ghost appearing at the pause. 200-300 ms suits the churn complaint; the settings drawer’s Terminal card takes the number and applies it live.

The honesty clause: the delay changes when a suggestion is seen, never which suggestion wins - the same candidates compute under the same merge order either way, and at 0 the two behaviors are indistinguishable. Any keystroke restarts the wait and dismisses a showing ghost instantly, and Right / Alt+Right are unchanged the moment a ghost shows.

Paths

Beyond history, a typed path token completes itself from the filesystem: ~/sr ghosts its completion when one is certain, ./do ghosts cs/, /usr/bi ghosts n/. The same ghost, the same keys - Right accepts, Alt+Right takes a word, anything else dismisses. History still outranks paths: a command you have run before wins over the directory listing.

The rules specific to paths:

Command names

A fresh tab, an empty history: gi still finishes itself - to git, or whatever the shortest local match is. The command word at the command position completes from the executables on the tab’s $PATH, snapshotted when the tab spawns and never rescanned. The same ghost, the same keys.

The rules specific to command names:

Subcommands and flags

git che ghosts ckout - and git commit --am ghosts end, docker compose u ghosts p, rustc --emit=a ghosts sm, sudo apt ins ghosts tall. The words after the command complete from the embedded core tier - ninety-two commands’ trees derived once by maintainers from withfig/autocomplete at a pinned version (curated by rule-based audit; nothing runs --help, nothing reads man pages, nothing executes), each command carrying its subcommands, each subcommand its own flags, each flag the argument it takes - walked word by word to the seat the line has reached. An installed data file, the extended tier (532 more commands), adds beside the floor while Extended completions is on (the default; sudo just install stages it), and your own completions.toml beside the config overrides either tier whole. The same ghost, the same keys - and history still outranks every tier: a command you have run before wins over any entry.

The rules specific to the table:

Aliases

gc --dr ghosts git’s --dry-run: when the command word you type is an alias you have declared, its completions come from the command the alias runs. Declared by you, in the config file - DropTerm never reads your shell’s rc files, never runs alias in the session, and never guesses an alias it was not told. The map is authoritative for exactly what you declare.

Declare aliases in autosuggestions_aliases (default empty - no alias re-targets anything), one expansion per alias, hand-edited in the config file (the map is author-sized, not toggle-sized):

// ~/.config/cosmic/io.github.l1br3_io.CosmicExtDropterm/v1/autosuggestions_aliases
{
    "gc": "git checkout",
}

The rules specific to aliases:

Git generators

git checkout ma ghosts in from the repository’s main: when you type an argument where a branch, tag, or working-tree change belongs, the generator provider completes it from the repo the tab’s shell sits in. git switch takes branches, git checkout branches and tags, git add and git restore take your changed files - and the completions menu lists the whole matching set where the ghost settles for one.

The names come from git itself, read under a contract stricter than any peer ships:

The generators are always on - there is no toggle. They ride the same silent, cached, spawn-on-trigger contract as the packaged completions: nothing runs while you type, and a flip-free design means the only failure surface is the five-second silence above.

The menu

Ctrl+Space opens a second surface beside the ghost: a candidate list over what you have typed, built from every provider at once - every matching history line, every matching path entry, every matching $PATH name, every matching curated subcommand and flag - where the ghost must settle for one choice. The list is scoped to your keyword: git st leads with the curated stash and status and carries the history line after them, and ~/s over src and srv leads with both path entries, where the ghost settles for the shared r. A bare git - the command typed, the space echoed, nothing after - lists git’s whole curated subcommand table above the history lines: the seat rules scope the menu the moment the command word completes, and where the single-choice ghost stays silent for lack of anything to match, the list itself is information. git checkout - a later seat - lists no subcommands; the seat rules below hold at every boundary.

The rules: