Add optional Vim keybindings and editor status #106

Merged
eleith merged 1 commits from feat/editor-vim-keybindings into main 2026-10-05 13:27:59 +00:00
Owner

Summary

Add optional Vim keybindings to both the Markdown source editor and text-asset editor using @replit/codemirror-vim@6.4.0.

  • Standard keybindings remain the default; browser localStorage remembers the choice.
  • Toggle with Ctrl+Alt+V only while the editor is focused. No clickable toggle, instance configuration, account preference, or global shortcut.
  • Add a quiet footer: Vim (Ctrl+Alt+V) on the left and the actual mode on the right, or Standard (Ctrl+Alt+V) with no mode.
  • Finish Vim input and return to Normal before applying generated content; preserve the source snapshot checks and single undoable replacement.
  • Style Vim cursors/search/prompts with the configured editor palette and existing application tokens.
  • Retain the existing application Save/navigation controls; no custom Save/quit Ex commands.
  • Include application integration tests, documentation (including Vimium exclusions), and a changeset.

Fixes #98.

Commit and dependency

31a68655 — [web] add optional Vim keybindings and editor status

Depends on the configured-editor-theme PR linked below. This PR targets feat/configured-editor-theme so its diff contains only the Vim work: 11 files, 557 additions / 2 deletions.

Verification

Previously completed during feature verification (not rerun merely to open this PR):

  • Root pnpm lint, pnpm check, and pnpm test passed after the footer/minimum-height changes.
  • Focused tests cover browser preference handling, shortcut filtering, compartment toggling, history preservation, generated-document replacement, and footer state/listener cleanup.
  • The real plugin imported without a browser DOM; owner visually approved the integration/footer.

Tests mock the public Vim/DOM boundaries and do not establish exhaustive real-browser Vim semantics. Remaining manual attention: counted insertions/dot-repeat, switching off during Insert, IME/completion, Attach/block-selection behavior, and Save/navigation while inserting. Vimium can intercept Escape; the documented URL exclusions should be applied when checking application behavior. No forced-focus workaround was added.

No application/theme/content builds, Docker operations, browser-testing framework, or live CSS updates were performed for this handoff.

Landing

Merge the parent color/theme PR into main first, preferably fast-forward-only. Then retarget this PR to main and fast-forward it, preserving the reviewed commit. Do not land it into the temporary theme branch or delete that base before retargeting.

No merge is being performed by the agent. TypeBox planning and untracked demo content are excluded.

Parent PR: #105 — #105

## Summary Add optional Vim keybindings to both the Markdown source editor and text-asset editor using `@replit/codemirror-vim@6.4.0`. - Standard keybindings remain the default; browser localStorage remembers the choice. - Toggle with Ctrl+Alt+V only while the editor is focused. No clickable toggle, instance configuration, account preference, or global shortcut. - Add a quiet footer: `Vim (Ctrl+Alt+V)` on the left and the actual mode on the right, or `Standard (Ctrl+Alt+V)` with no mode. - Finish Vim input and return to Normal before applying generated content; preserve the source snapshot checks and single undoable replacement. - Style Vim cursors/search/prompts with the configured editor palette and existing application tokens. - Retain the existing application Save/navigation controls; no custom Save/quit Ex commands. - Include application integration tests, documentation (including Vimium exclusions), and a changeset. Fixes #98. ## Commit and dependency `31a68655` — `[web] add optional Vim keybindings and editor status` Depends on the configured-editor-theme PR linked below. This PR targets `feat/configured-editor-theme` so its diff contains only the Vim work: 11 files, 557 additions / 2 deletions. ## Verification Previously completed during feature verification (not rerun merely to open this PR): - Root `pnpm lint`, `pnpm check`, and `pnpm test` passed after the footer/minimum-height changes. - Focused tests cover browser preference handling, shortcut filtering, compartment toggling, history preservation, generated-document replacement, and footer state/listener cleanup. - The real plugin imported without a browser DOM; owner visually approved the integration/footer. Tests mock the public Vim/DOM boundaries and do not establish exhaustive real-browser Vim semantics. Remaining manual attention: counted insertions/dot-repeat, switching off during Insert, IME/completion, Attach/block-selection behavior, and Save/navigation while inserting. Vimium can intercept Escape; the documented URL exclusions should be applied when checking application behavior. No forced-focus workaround was added. No application/theme/content builds, Docker operations, browser-testing framework, or live CSS updates were performed for this handoff. ## Landing Merge the parent color/theme PR into `main` first, preferably fast-forward-only. Then retarget this PR to `main` and fast-forward it, preserving the reviewed commit. Do not land it into the temporary theme branch or delete that base before retargeting. No merge is being performed by the agent. TypeBox planning and untracked demo content are excluded. Parent PR: #105 — https://git.eleith.com/eleith/luzzle/pulls/105
eleith added the enhancement label 2026-10-05 13:25:38 +00:00
eleith changed target branch from feat/configured-editor-theme to main 2026-10-05 13:27:49 +00:00
eleith added 1 commit 2026-10-05 13:27:49 +00:00
[web] add optional Vim keybindings and editor status
ci/woodpecker/pr/web Pipeline was successful
ci/woodpecker/push/web Pipeline was successful
31a6865562
Fixes #98
eleith merged commit 31a6865562 into main 2026-10-05 13:27:59 +00:00
eleith deleted branch feat/editor-vim-keybindings 2026-10-05 13:28:00 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: eleith/luzzle#106