You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have searched existing issues and confirmed this has not been requested before.
I have checked existing pull requests for similar changes.
Feature type
New functionality
Feature summary
Optionally make activating a plain application result in the launcher
focus/raise an existing window of that application instead of launching a
new instance — macOS/Raycast-style run-or-raise. Proposed as an opt-in
setting, default off:
[shell.launcher]
run_or_raise = true
Motivation / use case
Today, launching an app from the launcher that is already running depends
on the app's own single-instance behaviour. Where that is missing (or
slow), Super+Space → type → Enter hands you a duplicate window, and the
user has to hunt for the old one. The dock already solves the equivalent
problem for pinned entries; the launcher is the other half of the same
muscle memory.
Plain application results: if a matching toplevel exists, activate it
through the existing compositor activation path; otherwise launch
exactly as today.
Desktop-entry actions ("New Window", Shift+Enter context entries)
always launch explicitly — an action is an explicit request for a new
thing, not an app focus.
Matching: reuse the dock's per-entry window-lookup-key derivation
wholesale rather than writing a second matcher — one canonical
application↔window matching implementation (StartupWMClass,
identity-key normalisation, app-id tails covering reverse-DNS ids like
KeePassXC/Nextcloud, Flatpak/Electron ids). The launcher and dock must
never grow subtly different matching algorithms.
Multiple matching windows: activate the most recent, using the same
selection rule the dock applies after a launch — so launcher and dock
agree on which window "the app" means, including mixed ext/wlr
ordering on Hyprland (the ordering concern raised in the feat(translations): add "focus existing window" option to multiple la… #3937 review).
I have a working implementation of exactly these semantics running
locally (extracted the dock's lookup-key derivation into a shared
function used by both buildDockSnapshot and launcher activation, going
through enrichedWindowsForApp + activateToplevelInfo) — happy to send
the PR promptly; opening this first because the design deserves a
maintainer yes before code.
Open questions:
Is [shell.launcher] run_or_raise the right key/shape, or would
maintainers prefer a different config surface (e.g. per-result
modifier: Enter = raise-if-running, Shift+Enter = always launch)?
Submission checklist
Feature type
New functionality
Feature summary
Optionally make activating a plain application result in the launcher
focus/raise an existing window of that application instead of launching a
new instance — macOS/Raycast-style run-or-raise. Proposed as an opt-in
setting, default off:
Motivation / use case
Today, launching an app from the launcher that is already running depends
on the app's own single-instance behaviour. Where that is missing (or
slow), Super+Space → type → Enter hands you a duplicate window, and the
user has to hunt for the old one. The dock already solves the equivalent
problem for pinned entries; the launcher is the other half of the same
muscle memory.
Proposed solution
[shell.launcher] run_or_raise, default off (currentbehaviour preserved; also consistent with the caution in the feat(translations): add "focus existing window" option to multiple la… #3937
review about changing activation defaults).
through the existing compositor activation path; otherwise launch
exactly as today.
always launch explicitly — an action is an explicit request for a new
thing, not an app focus.
wholesale rather than writing a second matcher — one canonical
application↔window matching implementation (StartupWMClass,
identity-key normalisation, app-id tails covering reverse-DNS ids like
KeePassXC/Nextcloud, Flatpak/Electron ids). The launcher and dock must
never grow subtly different matching algorithms.
selection rule the dock applies after a launch — so launcher and dock
agree on which window "the app" means, including mixed ext/wlr
ordering on Hyprland (the ordering concern raised in the feat(translations): add "focus existing window" option to multiple la… #3937 review).
I have a working implementation of exactly these semantics running
locally (extracted the dock's lookup-key derivation into a shared
function used by both
buildDockSnapshotand launcher activation, goingthrough
enrichedWindowsForApp+activateToplevelInfo) — happy to sendthe PR promptly; opening this first because the design deserves a
maintainer yes before code.
Open questions:
[shell.launcher] run_or_raisethe right key/shape, or wouldmaintainers prefer a different config surface (e.g. per-result
modifier: Enter = raise-if-running, Shift+Enter = always launch)?
window_activation.hseam be the sharedfoundation for this too? Happy to build on whichever shape lands
first to avoid churn/conflicts.
vs next-activatable (dock cycling parity)?
Alternatives considered
(keyboard-driven) get duplicates.
apps, as the feat(translations): add "focus existing window" option to multiple la… #3937 review notes.
References / related projects
the source of the matching/ordering cautions above)
launcher side has the same Wayland reality but a cleaner fix path
since the shell already owns the launch decision
Additional context
Disclaimer: AI-assisted tooling was used.