Skip to content

feat: show app icons and improve Open In menu organization#707

Merged
matt2e merged 5 commits intomainfrom
cleaner-open-menu
May 11, 2026
Merged

feat: show app icons and improve Open In menu organization#707
matt2e merged 5 commits intomainfrom
cleaner-open-menu

Conversation

@matt2e
Copy link
Copy Markdown
Contributor

@matt2e matt2e commented May 11, 2026

Summary

  • Extract and display native app icons (as base64 PNGs) in the "Open In" menu using macOS sips for icon conversion
  • Organize menu items into sections (terminals, editors, file browsers) separated by dividers, sorted alphabetically within each section
  • Add Ghostty to the list of known terminal openers
  • Improve menu styling: use --bg-primary background, --border-muted separators, prevent icon dragging, and support iconSrc for image-based menu icons

Test plan

  • Verify app icons appear next to each app name in the "Open In" menu on macOS
  • Verify menu items are grouped by category (terminals, editors, file browsers) with separators between groups
  • Verify items within each group are sorted alphabetically
  • Verify "Copy Path" appears at the bottom separated from app entries
  • Verify non-macOS platforms still return an empty opener list without errors

🤖 Generated with Claude Code

matt2e and others added 5 commits May 11, 2026 15:54
Extract each app's icon on the backend using Info.plist and sips,
converting to a 32x32 base64 PNG data URI. Icon extraction runs in
parallel across threads for all detected apps. The frontend menu
system gains an iconSrc field for image-based icons alongside existing
Svelte component icons.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
Group "Open In" submenu items by app type (terminals, editors/IDEs,
file browsers, copy path) with separators between each group. Update
the shared menu surface to use --bg-primary for better contrast in
light themes and --border-muted for more visible separators.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
- Add ghostty (com.mitchellh.ghostty) to KNOWN_OPENERS so it can
  actually appear as an opener app, matching the frontend terminalAppIds
- Parallelize mdfind calls across threads instead of running them
  sequentially, reducing latency when detecting installed apps
- Replace manual temp file naming with the tempfile crate for robust
  unique file handling during icon extraction

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
- Replace match with empty Err arm with idiomatic if-let in
  thread join result handling
- Add draggable="false" to menu icon images to prevent accidental
  drag-and-drop within the menu

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
Sort terminal, editor/IDE, and file browser apps by name within
their respective sections in the Open In submenu.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
@matt2e matt2e requested review from baxen and wesbillman as code owners May 11, 2026 07:04
@matt2e matt2e merged commit beb8421 into main May 11, 2026
5 checks passed
@matt2e matt2e deleted the cleaner-open-menu branch May 11, 2026 07:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant