summaryrefslogtreecommitdiff
path: root/docs/helix-keys.md
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-07-08 12:25:04 -0300
committerGabriel Schneider <[email protected]>2026-08-01 15:02:07 -0300
commit172eb56fee0b6bde698e72be2bca55a90fe81ce9 (patch)
treef2fd94709facf134c3670db4c1a20a5eaca1d53d /docs/helix-keys.md
parentb91e5ebf8b529d0ced0bf18e83b17df0bd2374ce (diff)
downloadpardes-172eb56fee0b6bde698e72be2bca55a90fe81ce9.tar.gz
pardes-172eb56fee0b6bde698e72be2bca55a90fe81ce9.zip
steam deck nice version
Diffstat (limited to 'docs/helix-keys.md')
-rw-r--r--docs/helix-keys.md17
1 files changed, 7 insertions, 10 deletions
diff --git a/docs/helix-keys.md b/docs/helix-keys.md
index 4a077c2c..3a73cf25 100644
--- a/docs/helix-keys.md
+++ b/docs/helix-keys.md
@@ -32,7 +32,7 @@ layer: gap offsets + ranges over the flat text). Differential harness:
`x`/`X`, terminal `n`/`N` (lookStep) and file `n`/`N` (searchStep) set
EXPLICIT ones. `d`/`c`/`y`/`~`/… act on the active selection either
way — that is the point of the model. The pardes-specific chords
- (normal-mode Enter look / Tab execute, the clipboard-`p` intercept)
+ (normal-mode Enter look / Tab execute)
act on EXPLICIT selections only and fall back to the word under the
cursor when the selection is implicit motion residue. Mode is reported
"select" ONLY while `v` extend mode is on (helix keeps mode normal for
@@ -82,7 +82,7 @@ with a reason in `test/hxcases/waivers.jsonl`.
| `c` | change (delete + insert mode); linewise selections open a fresh indented line | same shape as `d` | helix-verified |
| `y` | yank selection; bare cursor yanks the 1-wide selection (char under cursor) | line-yank vim-ism removed (phase 5); yank keeps selection AND cursor (helix). Also emits `set_clipboard` (OSC 52 out) | helix-verified |
| `u` / `U` | undo / redo | restores the pre-edit selection (helix); snapshot granularity, no `Alt-u`/`Alt-U` history walking (skipped) | helix-verified |
-| `p` (normal) | **async system-clipboard paste**: emits `get_clipboard`, reply arrives as `Event.paste` → sets yank register → pastes | pardes-specific plumbing; placement is helix semantics (B). hxdiff verifies it end-to-end through a fake clipboard that round-trips the yank | helix-verified |
+| `p` (normal) | paste the core's yank register after the selection | helix default-register semantics; yank still mirrors OUT via OSC 52 (`set_clipboard`) but `p` never reads the system clipboard back — most terminals refuse the OSC 52 read, which left `p` a silent no-op | helix-verified |
| `Esc` (normal) | cancel pending prefix / exit select mode; the selection is KEPT | helix Esc does not collapse selections; never drops to tty mode | helix-verified |
| `Esc` (insert) | back to normal mode, cursor right after the insertion (no vim left-step) | | helix-verified |
| `Enter` (normal) | acme **look** chord: EXPLICIT selection, else file-ish word under cursor | pardes-specific, keep (helix normal-mode Enter unbound). Covers helix `gf`. Implicit motion residue falls back to the cursor word | pardes-specific |
@@ -106,8 +106,7 @@ rule (typed runs only) — same as `d`/`c` today.
Phase 2 state added to `Pane`: `count` (accumulator, capped 0xffff),
`pending2` (m-mode sub-key), `pending_ch` (mr's `<from>`), `find_op`/`find_ch`
(Alt-. repeat). `pending` also holds `m` `[` `]` and the char-arg ops
-`f F t T r`. `Pardes.paste_before` carries `P` across the clipboard round
-trip. New pure text math in modal.zig (`findChar`, `matchBracket`,
+`f F t T r`. New pure text math in modal.zig (`findChar`, `matchBracket`,
`paragraphFwd/Bwd`, textobject/surround ranges, `replaceRange/Chars`,
`changeCase`, `joinLine`, `indentLines`, `adjustNumber`, `deleteSpan`,
`advanceBy`) with inline tests; `zig build unit-test` runs them.
@@ -146,8 +145,8 @@ trip. New pure text math in modal.zig (`findChar`, `matchBracket`,
| `Ctrl-a` / `Ctrl-x` | increment / decrement the decimal int under the cursor by count | helix-style: under the cursor only (no vim forward scan), `-` handled, i64 saturating, zero-padding width preserved (phase 5); cursor to the last digit, selection kept; terminals: no-op | helix-verified (phase 5) |
| `Alt-d` | delete without yanking | `normalDelete(yank=false)` | helix-verified (phase 5) |
| `Alt-c` | change without yanking | **skipped (phase 2)**: the pardes `Alt-c` window op (move pane to fresh column, any mode) wins — it's load-bearing global UX and the parent contract forbids touching it. `Alt-d` + `i` covers the behavior. Corpus-covered and waived (`alt-c-window-op`) | waived (phase 5) |
-| `P` | paste before | same async clipboard round trip as `p`: `Pardes.paste_before` stashes the intent, the `Event.paste` reply consumes it | helix-verified (phase 5) |
-| `p`/`P` semantics | yank ending `\n` pastes as whole lines below/above the SELECTION's line span; else inline at the selection's outer edge. The paste (× count) becomes the selection, head on its last char (helix) | terminals keep the run-splice-at-cursor path (before/after collapses). Still not pty-snap-testable (the snapshot harness never answers OSC 52), but hxdiff verifies it end-to-end via its fake clipboard | helix-verified (phase 5) |
+| `P` | paste before | same yank-register path as `p` | helix-verified (phase 5) |
+| `p`/`P` semantics | yank ending `\n` pastes as whole lines below/above the SELECTION's line span; else inline at the selection's outer edge. The paste (× count) becomes the selection, head on its last char (helix) | terminals keep the run-splice-at-cursor path (before/after collapses). Pinned by yankpaste.snap and the hxdiff yp cases | helix-verified (phase 5) |
### Selection manipulation
@@ -212,7 +211,7 @@ text.
| Key(s) | Helix behavior | Reason |
| --- | --- | --- |
| `?`, `*`, `Alt-*` | rsearch / selection-as-pattern | search — pardes has its own `/` n N (grep-based, kept as-is); helix regex search machinery not wanted |
-| `Space` mode, all rows (`f F e . b j g G k s S d D r a h ' w c C Alt-c p P y Y R / ?`) | pickers, LSP actions, clipboard menu, global search, palette | pickers/space-mode; clipboard already covered by pardes normal-`p` + OSC 52 yank |
+| `Space` mode, all rows (`f F e . b j g G k s S d D r a h ' w c C Alt-c p P y Y R / ?`) | pickers, LSP actions, clipboard menu, global search, palette | pickers/space-mode; clipboard: yank mirrors out via OSC 52, `p` pastes the register |
| Popup `Ctrl-u`/`Ctrl-d`, Completion menu, Signature help tables | LSP popups | LSP |
| Picker table (all rows), Prompt table (all rows) | picker / prompt internals | pickers — pardes' tag line is its own one-line editor |
| `gn` `gp` `ga` `gm` | next/prev/alternate buffer | buffer nav — pardes panes aren't a buffer list |
@@ -272,9 +271,7 @@ Files (all in `test/hxcases/`):
`alt-c-window-op` (the pardes window op deliberately shadows helix
change-noyank).
- `test/hxdiff.zig` builds `pardes-hxdiff`, which drives the sans-IO core
- headlessly at 80x24 (22 body rows, matching helix's 22 text rows) with
- a fake clipboard that round-trips the yank register (so `y`/`p`
- differential-test end-to-end despite the async OSC 52 plumbing).
+ headlessly at 80x24 (22 body rows, matching helix's 22 text rows).
Run it: