Rune Editor v1.3.0
🔍 Editor & Find/Replace Architecture
We completely overhauled the CodeMirror search/replace UI to provide a seamless, bespoke SolidJS experience that matches Rune's rich aesthetics.
- Custom Find/Replace HUD: Built a completely custom, floating SolidJS component (
FindReplace.tsx) that docks perfectly below the titlebar. - Native Search Override: Disabled CodeMirror's default DOM search panel injection (
.cm-search { display: none !important }) while still hooking into its native high-performance Regex/Match engines. - Real-Time Match Indexing: Intercepted CodeMirror's update listener to perform lightweight cursor iterations, broadcasting real-time match indices (
e.g., 5 of 12) natively to our SolidJS UI viarune-search-results. - Selected Text Pre-filling: Dispatching
rune-search-set-queryon Find invocation to automatically prepopulate the search box with the currently highlighted editor selection. - Multi-Cursor Matching: Implemented
selectMatchesinto the keymap, allowing users to hitCtrl+Shift+Lto drop multiple cursors on all active regex/text matches instantly. - Scroll State Preservation: Engineered a
scrollStateCachetrackingscrollTopandscrollLeftto guarantee seamless context restoration when jumping between massive files and editor tabs.
🖥️ Terminal Panel Reactivity
- Workspace Isolation: Refactored
useTerminalPanel.tsto implement a reactivecreateEffecthooking directly into therootPath. Terminals are now strictly isolated per workspace—switching workspaces instantly executes akill_terminalbackend invocation and spins up a fresh PTY instance in the new directory. - Cross-Window ID Collision: Replaced sequential custom IDs with
crypto.randomUUID()to completely eliminate terminal state pollution between deeply nested window instances.
⚙️ Backend & Build Systems
- Tauri Auto-Updater Configured: Hooked the
@tauri-apps/plugin-updaterdirectly into our front-end. Resolved critical v2 capability locks by explicitly whitelisting"updater:default"and"process:default"indefault.json. - Updater Generation Script: Wrote an automated Node utility (
generate-latest-json.js) to scrape.sigsignatures from both Windows (nsis) and Linux (appimage) output bundles, formatting them into thelatest.jsonstandard required by Tauri's secure Github-release update pipeline. - Docker Artifact Extraction: Appended a lightweight Alpine container task to our
build-linux.ps1workflow, successfully mounting the locked Docker compilation volumes and ripping the final AppImage, DEB, and SIG artifacts back into our localtarget/release/bundle/linux/filesystem for publishing.
🐛 Bug Fixes
- Async Cleanup Panic: Fixed a critical SolidJS hydration warning in
useIndexerProgress.tswhereonCleanupwas being orphaned outside the render tree due toawaitblocks. Migrated to asynchronous promise chains (.then()) to lock cleanup registration into the synchronous initialization phase. - Reactivity Escapes: Patched missing variables (
matchCount) from hook exports, and fixed scoping issues withfindReplaceShortcutHandlerfailing to unregister during CodeMirror destruction. - Favicon Ghosting: Scrubbed legacy
favicon.icocalls preventing 404 console flooding during active development.