Apps
Git
# Deft Git Client
A Magit-style two-pane git client: status list (top) + diff/log view (bottom). Stage, unstage, commit, pull, push, and browse history.
## Key Bindings
### Tab Bar
| Key | Action |
|-----|--------|
| `Ctrl+Page Down` | Cycle focus Projects → Changes → Log → Stashes |
| `Ctrl+Page Up` | Cycle focus in reverse (Projects → Stashes → Log → Changes) |
### Status Pane
| Key | Action |
|-----|--------|
| `Up` / `Down` | Move cursor |
| `j` / `k` | Move cursor (vim-style) |
| `Enter` | Stage or unstage item under cursor |
| `Ctrl+Page Down` | Switch to the next tab (diff/log view) |
| `s` | Stage file under cursor |
| `u` | Unstage file under cursor |
| `Ctrl+Space` | Mark/unmark file under cursor (marked rows show `*`) |
| `R` | Revert file under cursor |
| `I` | Append file to `.gitignore` |
| `S` | Stage all files |
| `U` | Unstage all files |
| `c` | Enter commit message input |
| `z` | Stash changes (optional message) |
| `l` | Switch to log view |
| `F` | Git pull |
| `P` | Git push |
| `Ctrl+P` | Force push (`--force-with-lease`) |
| `g` / `r` | Refresh status |
| `q` | Quit/back to status |
While any files are marked, `s`, `u`, `R`, `I`, `D` and the "Remove from
Repo" menu actions apply to every marked file instead of the file under
the cursor. `Ctrl+Space` advances the cursor so consecutive files can be
marked quickly.
### Diff Pane
| Key | Action |
|-----|--------|
| `Up` / `Down` | Scroll diff |
| `Page Up` / `Page Down` | Fast scroll |
| `Ctrl+Page Up` / `Escape` | Back to the previous tab (status pane) |
### Log View
| Key | Action |
|-----|--------|
| `Up` / `Down` / `j` / `k` | Move through commits (diff pane shows commit details) |
| `q` / `Escape` | Back to status view |
### Stashes Tab
| Key | Action |
|-----|--------|
| `z` | Stash current changes (prompts for an optional message) |
| `a` | Apply stash under cursor |
| `p` | Pop stash under cursor |
| `d` | Drop stash under cursor |
| `Enter` | Apply stash under cursor |
`z` opens the input bar; press `Enter` with an empty message to stash
without a label.
### Commit Input Mode
| Key | Action |
|-----|--------|
| `Enter` | Confirm commit |
| `Escape` | Cancel commit |
| `Up` / `Down` | Recall older / newer commit messages (cycled from history) |
| `Backspace` | Delete character before cursor |
| `Delete` | Delete character after cursor |
| `Left` / `Right` | Move cursor |
| `Home` / `End` | Cursor to start/end |
### Commit Message History
Submitted commit/amend messages are persisted to
`.deft/local/git/commit-history.dft` (newest last, duplicates collapsed,
capped at 50). While the commit input is open, `Up` recalls older
messages and `Down` walks back toward the draft you were typing.
## Pie Menu
Hold the pie trigger (Super by default; `[config/set "ui/pie-trigger" :f1]`
to change it) with the git panel focused, hover the hub to descend, then
release on a slice. Accelerators mirror the changes-pane keys:
| Dir | Slice | Key |
|-----|-------|-----|
| N | Commit | `c` |
| NE | Amend | `a` |
| E | Push | `P` |
| SE | Pull | `F` |
| S | Unstage All | `U` |
| SW | Unstage | `u` |
| W | Stage | `s` |
| NW | Stage All | `S` |
Stage/Unstage act on the file under the changes cursor; Stage All /
Unstage All apply to every file. Refresh, branch and remote commands stay
on the app menu bar and Ctrl+B.