alpha
Login
or
Join now
isaaccorbrey.com
/
helicase
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Helix keybinds for JetBrains products
modal-editor
helix
jetbrains
plugin
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
helicase
/
plugin
/
src
/
at
main
2 folders
Isaac Corbrey
Helicase is on by default everywhere + Settings → Helicase panel
2mo ago
6b38efd5
main
Helicase is on by default everywhere + Settings → Helicase panel Hoist the enabled flag from per-editor HelicaseState to app-wide HelicaseSettings. Opening a new editor used to leave Helicase off until you re-toggled — wrong: modal editing is conceptually one state that spans the IDE. Now every editor inherits the live value; toggling via Ctrl-Shift-H flips it everywhere. Persistence: HelicasePersistentSettings (PersistentStateComponent on the application level) stores `enabledByDefault` to `helicase.xml` in IntelliJ's config dir. Survives restarts. HelicaseConfigurable registers a Settings → Helicase panel with the single checkbox; apply() writes to the persistent state AND updates the live HelicaseSettings.enabled so the change takes effect immediately rather than waiting for the next restart. Startup precedence: persistent default loads first, then TOML [helicase].enabled overrides if explicitly set. Power users managing everything via config.toml stay in control; everyone else gets a sensible GUI knob. Toggle action (Ctrl-Shift-H) is session-only — it doesn't write through to persistent. "Set in Preferences" = permanent, "press the toggle" = transient. Matches the Vim/Helix mental model where config = permanent, runtime = session. Also includes the InvokeIdeCommand handler dispatch in the typed and action wrappers (file-coupled to the .enabled hoist; can't be cleanly split).
2 months ago
test
Persist lastSearch across keystrokes so n/N actually work EditorBridge.read rebuilds EditorState from the editor's Document and CaretModel every keystroke — anything not stored on the editor was silently lost. Engine.search() updated EditorState.lastSearch, but write() never copied it back to HelicaseState, so the next read started with lastSearch=null and 'n' fell back to a no-op. Add lastSearch to HelicaseState (alongside mode and restoreCursor), include it in EditorBridge.read's EditorState, and persist it back in EditorBridge.write. Pattern matches how restoreCursor was already handled. New plugin test exercises the full round trip: search → write to editor → read back → n → next match. Would have failed before this fix.
2 months ago