From 172eb56fee0b6bde698e72be2bca55a90fe81ce9 Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Wed, 8 Jul 2026 12:25:04 -0300 Subject: steam deck nice version --- docs/helix-keys.md | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'docs/helix-keys.md') 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 ``), `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: -- cgit v1.3