Repository navigation
Keep the launcher surface mapped: ~24 ms to first frame - #37
Open
JonasThowsen wants to merge 3 commits into
Open
JonasThowsen wants to merge 3 commits into
JonasThowsen wants to merge 3 commits into
Conversation
Omarchy 4.0.4 removed ShellIpc and OverlayWindow, so the plugin no longer loaded. Use Quickshell's IpcHandler and a PanelWindow instead. Open: every show rebuilt the window's scene graph (~150 ms). The surface is now mapped once and kept: 1x1 with no input or focus while hidden, full monitor with exclusive focus when shown, following Hyprland's focused monitor in the background. Hotkey to first frame: ~190 ms -> ~25 ms. Typing: root search re-normalized every string and ran a quadratic DP on each keystroke. Add string and per-candidate caches, a sparse DP, a one-character fast path and a prefilter that skips candidates rank() would drop; update the list model in place instead of clearing it. Keystroke to frame: ~80-170 ms -> ~13-23 ms. Rankings are unchanged; tests/ranker-fast.test.js checks the fast paths against a dense reference. Also: smoke test times the hotkey path via the plugin's lastFrameAt, doctor no longer checks for socat, and the unit-test command works on Node 26. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
An output that disappears and returns under the same name (lid close, suspend, DPMS while locked) left the persistent surface on a dead screen; it reported shown but never drew again. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Upstream's calculator, agent hand-off, vim/emacs bindings, inline arguments, alerts, About panel and clipboard paste are kept as they are. On top of them: - LauncherWindow stays a single surface that is mapped once and kept (the 150 ms map cost per open is gone), follows the focused monitor and remaps when outputs change; rows update in place via rowMirror. - Ranker keeps the memoized/sparse fast paths and canSkip prefilter; RootSearch applies the new root filter in both the prefiltered query path and the empty root. - lastFrameAt IPC for tests/smoke.sh; doctor no longer checks for socat, since omarchy-shell only uses qs ipc. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Makes opening oma-cast and typing into it noticeably faster. Search results and rankings don't change.
LauncherWindowis now mapped once and kept. Mapping a freshPanelWindowon every open cost about 150 ms of scene-graph setup. When hidden, the window is 1×1 px with an empty input mask and no keyboard focus. When shown, it grows to cover the monitor and takesExclusivefocus. While hidden it follows Hyprland's focused monitor, so it's already in place when you open it.Quickshell.screenschanges, so it doesn't get stuck on the dead screen, reporting "shown" but never drawing. I hit this on a laptop after a long lock.rebuild()now diffs against a plainrowMirrorand onlysets the rows that changed, instead ofclear()+appendon every keystroke. Selection lookups read the mirror instead ofrows.get().canSkipprefilter thatRootSearchuses before decorating candidates. Scores and order are unchanged. The newtests/ranker-fast.test.jschecks them against a dense reference DP. The new Ctrl+P root filter is applied in the prefiltered path too.lastFrameAtIPC function returns the time of the first frame after the last show or hide.tests/smoke.shuses it to time the open path end to end.oma-cast doctorno longer checks for socat, becauseomarchy-shellin 4.0.6 only usesqs ipc. The docs that described a socket fast path are corrected.The branch merges current
mainand keeps the calculator, agent hand-off, vim/emacs bindings, argument pills, alerts, About panel and clipboard paste unchanged.Numbers (Omarchy 4.0.6, Quickshell 0.3.2, Hyprland 0.56.2)
Testing
node --test tests/*.test.js: 108/108 passtests/smoke.sh: all checks pass (doctor, IPC, root search, toggle latency under the 100 ms budget)5 ft to cm), search, and the commands filter throughoma-cast call rootSearch.search🤖 Generated with Claude Code