Repository navigation
feat: Large Type — show the query across the screen (Ctrl+L) - #39
Open
AfonsoNeto wants to merge 3 commits into
Open
AfonsoNeto wants to merge 3 commits into
AfonsoNeto wants to merge 3 commits into
Conversation
Author
|
Hi — just a friendly follow-up on this one. I saw the big refactor that landed this week (the omacast rename, flattened layout, and the flea-search backend). This PR predates all of that and won't apply cleanly to the new tree anymore. The feature itself still ports cleanly — the fallback mechanism in |
Port onto the restructured omacast tree (flattened layout, flea-search
backend). Add fallback:large-type to the root-search fallbacks and answer
its open action with a { largeType: query } outcome for the window.
core/LargeType.js holds the testable policy: displayText (blank input
becomes a no-op, content kept exactly) and fitRange (bounded pixel sizes
for the overlay's Text.Fit). No new dependencies.
Port onto the restructured omacast tree. Ctrl+L shows the current query across the screen, as Alfred's Large Type does: the card hides and LargeTypeOverlay paints an opaque themed surface with the text fitted by Text.Fit between the core bounds. Esc, a click or Ctrl+L again restores the card with the query and focus intact. The mode resets in closePopups so hide/show cycles never leave it stale, and blank or whitespace-only queries are a no-op.
Port onto the restructured omacast tree. Document Ctrl+L and the fallback row in the README keyboard table and a short section with a screenshot, and record the feature in the CLAUDE.md status.
AfonsoNeto
force-pushed
the
feat/large-type
branch
from
November 3, 2026 21:55
8cbc48e to
f3815f6
Compare
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.
What
Type a message in the launcher, press Ctrl+L, and it appears in very large characters across the whole screen — Alfred's Large Type, which Raycast only covers through a third-party extension. Esc, a click, or Ctrl+L again returns to the launcher with the query and focus intact, ready to edit.
The full interaction loop (type → Ctrl+L → Esc → edit continues → Ctrl+L again):
A second entry point: a "Show in Large Type" row under the existing "Use "" with…" fallbacks (the same query-level mechanism as Search Google / Search DuckDuckGo). Happy to drop that row if you'd rather keep the root list untouched and shortcut-only.
How
core/LargeType.js(new): the testable policy —displayText()(blank/whitespace input becomes a no-op; content preserved exactly, markup included) andfitRange()(clamped pixel-size bounds so fitting can never run away).ui/LargeTypeOverlay.qml(new): an opaque, theme-following surface inside the existing launcher window — no second layer surface, so dismissal can't orphan anything. Text uses Qt's boundedText.Fitbetween the core bounds,Text.PlainText(user input is never markup), wrapping withWrapAtWordBoundaryOrAnywhereso long unbroken strings degrade gracefully.ui/LauncherWindow.qml: the Ctrl+L binding (verified unused — no plugin binding, and no Hyprland bind onLin Omarchy defaults), alargeTypeoutcome handler for the fallback row, and state reset inclosePopups()so hide/show cycles never leave the overlay stale.core/RootSearch.js/Backend.qml: the fallback row and its{ largeType: query }outcome;getActions/getItemInfowork through the existing fallback paths.Blank or whitespace-only queries are a no-op — never a blank takeover.
Testing
node --test tests/*.test.js: 146 pass, 0 fail on the new tree (3 skips are the Rust-helper integration tests, identical without a builtomacast-search); newtests/largetype.test.jscovers the display policy and fit bounds, and the root-search tests cover the row's placement, actions, and absence on the empty root and in submenus.bash -non all four scripts, manifest JSON check; alsobin/build-search+ the search-integration suite locally.wtype+grimscreenshots, re-verified on this tree): short text, accented Portuguese, literal<b>Hello</b>, a 300-character unbroken string (renders wrapped within margins, no crash), blank/whitespace no-ops, Esc restoring query + focus, Ctrl+L toggling,hyprctl layersshowing exactly oneomacastsurface while shown and zero when hidden. Overlay follows the live theme.Notes
FleaSearch.MAX_QUERY_LENGTH(256) bypass the native matcher and re-run the full synchronous JS search on every keystroke, so very long queries queue seconds of work. Measured live; worth a debounce discussion in a separate issue.