Apps
Editor
# Editor — Deft Text Editor
A code editor for `.dft` files with syntax highlighting, multi-buffer editing, undo/redo, find/replace, code folding, and completion.
## Key Bindings
### Cursor Movement
| Key | Action |
|-----|--------|
| `Left` / `Right` | Move cursor left/right |
| `Up` / `Down` | Move cursor up/down |
| `Home` | Go to start of line |
| `End` | Go to end of line |
| `Ctrl+A` | Go to start of line |
| `Ctrl+E` | Go to end of line |
| `Ctrl+Left` | Move to previous word |
| `Ctrl+Right` | Move to next word |
| `Ctrl+Home` | Go to start of buffer |
| `Ctrl+End` | Go to end of buffer |
| `Page Up` / `Page Down` | Scroll page up/down |
### Selection
| Key | Action |
|-----|--------|
| `Shift+Left` / `Shift+Right` | Select left/right by character |
| `Shift+Up` / `Shift+Down` | Select up/down by line |
| `Shift+Home` / `Shift+End` | Select to line start/end |
| `Ctrl+Shift+Left` / `Ctrl+Shift+Right` | Select word left/right |
| `Ctrl+Shift+A` | Deselect |
| `Ctrl+Shift+E` | Select to end of line |
| `Ctrl+Shift+Home` / `Ctrl+Shift+End` | Select to buffer start/end |
| `Alt+A` | Select all |
### Editing
| Key | Action |
|-----|--------|
| `Enter` | Insert newline |
| `Backspace` | Delete character before cursor |
| `Delete` | Delete character after cursor |
| `Tab` | Insert tab |
| `Ctrl+Backspace` / `Alt+Backspace` | Delete word backward |
| `Ctrl+K` | Kill to end of line (at EOL, join with next line) |
| `Ctrl+K` `K` | Delete entire line |
| `Alt+Up` / `Alt+Down` | Move line up/down |
### Clipboard
| Key | Action |
|-----|--------|
| `Ctrl+C` | Copy selection |
| `Ctrl+X` | Cut selection |
| `Ctrl+V` | Paste |
### Undo / Redo
| Key | Action |
|-----|--------|
| `Ctrl+Z` | Undo |
| `Ctrl+Y` | Redo |
### File Operations
| Key | Action |
|-----|--------|
| `Ctrl+S` | Save file |
| `Ctrl+O` | Open file (picker) |
| `Ctrl+N` | New buffer |
| `Ctrl+W` | Close buffer |
| `Ctrl+Tab` | Next buffer |
File Watch (File ▸ File Watch): toggle watching the current file.
While watched, external changes on disk reload the buffer; unsaved edits
block the reload and are reported instead. A `● watch` indicator shows in
the status bar while the active file is watched.
### Find & Replace
| Key | Action |
|-----|--------|
| `Ctrl+/` | Open find |
| `Ctrl+H` | Open find/replace |
| `F3` | Find next match |
| `Ctrl+Shift+/` | Find selection in external panel |
| `Escape` | Exit find mode |
| `Enter` | Go to next match |
| `Tab` | Switch between find and replace fields |
| `Ctrl+Enter` | Replace all (in replace mode) |
### Code Folding
| Key | Action |
|-----|--------|
| `Alt+Z` | Toggle fold at cursor |
| `Ctrl+Shift+Z` | Fold all |
| `Ctrl+Alt+Z` | Unfold all |
| `Alt+0` | Unfold all |
| `Alt+1`..`Alt+6` | Fold to heading level N (markdown) |
### Evaluation & Navigation
| Key | Action |
|-----|--------|
| `Ctrl+Enter` | Evaluate current line/selection |
| `Alt+F` | Evaluate enclosing definition |
| `Ctrl+Space` | Trigger completion |
| `F2` | Go to definition |
| `F6` | Expand selection |
| `Shift+F6` | Shrink selection |
| `Ctrl+L` | Reload target |
### Completion Overlay (visible)
| Key | Action |
|-----|--------|
| `Up` / `Down` | Navigate completions |
| `Enter` | Accept completion |
| `Escape` | Hide completions |
| `Tab` | Cycle completion tier |
### Vi Mode (`:set driver=vi` or menu Edit → Driver: vi)
Modes: NORMAL (default), INSERT (`i` `a` `I` `A` `o` `O`), VISUAL (`v`),
VISUAL-LINE (`V`); `Esc` returns to NORMAL.
Engine chords stay live in every vi mode — `Ctrl+O` file-open, `Ctrl+S`
save, `Ctrl+F` find, `Ctrl+G` goto, `Ctrl+PgUp/PgDn` buffer cycling.
Vi-owned chords: `Ctrl+D`/`Ctrl+U` half-page scroll, `Ctrl+E`/`Ctrl+Y`
one-line scroll, `Ctrl+R` redo; in insert mode `Ctrl+W`/`Ctrl+U`/`Ctrl+H`
delete word / to line start / char back.
| Key | Action |
|-----|--------|
| `h j k l` / arrows | Move (with count) |
| `w W b B e E` | Word / WORD motions |
| `f{c} F{c} t{c} T{c}` | Find char on line; `;`/`,` repeat/reverse |
| `0 ^ $` | Line start / first non-blank / end |
| `{ }` | Paragraph motions (also `d{` `y}` etc.) |
| `H M L` | Top / middle / bottom of window |
| `gg` / `G` / `{n}G` | Buffer start / end / goto line |
| `%` | Jump to matching bracket |
| `x X s S` | Delete char / char back / char / line |
| `r{c}` `~` | Replace char / toggle case (with count) |
| `d c y` + motion | Operators, doubled for line-wise (`dd` `cc` `yy`) |
| `D C Y J` | To end of line: delete / change / yank line / join |
| `df{c}` `cf{c}` ... | Operator over f/F/t/T target |
| `cw` | Change word (behaves like `ce`) |
| `p P` | Paste after / before (with count) |
| `u` `Ctrl+R` | Undo / redo |
| `.` | Repeat last change |
| `>> <<` | Indent / outdent lines (count or visual) |
| `ZZ` | Save |
| `/ ? n N * #` | Search forward/backward, repeat, word under cursor |
| `:` | Command line: `w` `wq` `x` `q` `q!` `e <path>` `set driver=` `{n}` |
| `v V o gv Esc` | Visual modes, swap ends, reselect last range |
| visual + `d x y c s r ~ J p >>` | Operate on selection |
| `za zc zo zM zR` `zz zt zb` | Folds, recenter viewport |