From 6d7268eb654e246700004ac426875a0d92db388e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Jul 2026 17:12:39 -0700 Subject: [PATCH] Support clipboard shortcuts in shell panels --- default/hypr/bindings/clipboard.lua | 12 +++++------- test/shell.d/hyprland-default-config-test.sh | 9 +++++++++ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/default/hypr/bindings/clipboard.lua b/default/hypr/bindings/clipboard.lua index 10a2f6df..0e10fdfe 100644 --- a/default/hypr/bindings/clipboard.lua +++ b/default/hypr/bindings/clipboard.lua @@ -1,12 +1,10 @@ --- Work around Hyprland send_shortcut sometimes leaving synthetic key state stuck/repeating. --- https://github.com/hyprwm/Hyprland/discussions/14099 +-- Send through the virtual keyboard so universal clipboard shortcuts reach +-- both normal windows and focused layer-shell surfaces such as Omarchy panels. +-- Hyprland's send_key_state with window = "activewindow" cannot target layers. local function send_shortcut_once(mods, key) return function() - hl.dispatch(hl.dsp.send_key_state({ mods = mods, key = key, state = "down", window = "activewindow" })) - - hl.timer(function() - hl.dispatch(hl.dsp.send_key_state({ mods = mods, key = key, state = "up", window = "activewindow" })) - end, { timeout = 50, type = "oneshot" }) + local modifier = mods:lower() + hl.dispatch(hl.dsp.exec_cmd("wtype -M " .. modifier .. " -k " .. key:lower() .. " -m " .. modifier)) end end diff --git a/test/shell.d/hyprland-default-config-test.sh b/test/shell.d/hyprland-default-config-test.sh index eef81760..c0bf70b7 100644 --- a/test/shell.d/hyprland-default-config-test.sh +++ b/test/shell.d/hyprland-default-config-test.sh @@ -105,6 +105,15 @@ grep -Fq $'SUPER + RETURN Terminal' <<<"$fresh_output" || fail "default applicat grep -Fq $'SUPER + SHIFT + A ChatGPT' <<<"$fresh_output" || fail "default application bindings include preinstalled web apps" pass "default application bindings load from package defaults" +grep -F 'hl.dsp.exec_cmd("wtype -M " .. modifier .. " -k " .. key:lower() .. " -m " .. modifier)' "$ROOT/default/hypr/bindings/clipboard.lua" >/dev/null || + fail "universal clipboard shortcuts use the virtual keyboard" +pass "universal clipboard shortcuts reach focused layer-shell fields" + +if grep -F 'hl.dsp.send_key_state' "$ROOT/default/hypr/bindings/clipboard.lua" >/dev/null; then + fail "universal clipboard shortcuts do not target only normal windows" +fi +pass "universal clipboard shortcuts do not exclude layer-shell fields" + removed_home="$tmpdir/removed-home" mkdir -p "$removed_home/.local/state/omarchy" touch "$removed_home/.local/state/omarchy/preinstalls-removed"