diff --git a/config/elephant/symbols.toml b/config/elephant/symbols.toml index d06e9204..996a55b8 100644 --- a/config/elephant/symbols.toml +++ b/config/elephant/symbols.toml @@ -1 +1 @@ -command = 'wl-copy && (hyprctl dispatch "hl.dsp.send_shortcut({ mods = \"SHIFT\", key = \"Insert\" })" || hyprctl dispatch sendshortcut "SHIFT, Insert,")' +command = 'wl-copy && ((hyprctl dispatch "hl.dsp.send_key_state({ mods = \"SHIFT\", key = \"Insert\", state = \"down\", window = \"activewindow\" })" && sleep 0.05 && hyprctl dispatch "hl.dsp.send_key_state({ mods = \"SHIFT\", key = \"Insert\", state = \"up\", window = \"activewindow\" })") || hyprctl dispatch sendshortcut "SHIFT, Insert, activewindow")' diff --git a/default/hypr/bindings/clipboard.lua b/default/hypr/bindings/clipboard.lua index 7a874145..bc30414f 100644 --- a/default/hypr/bindings/clipboard.lua +++ b/default/hypr/bindings/clipboard.lua @@ -1,4 +1,16 @@ -hl.bind("SUPER + C", hl.dsp.send_shortcut({ mods = "CTRL", key = "Insert" }), { description = "Universal copy" }) -hl.bind("SUPER + V", hl.dsp.send_shortcut({ mods = "SHIFT", key = "Insert" }), { description = "Universal paste" }) -hl.bind("SUPER + X", hl.dsp.send_shortcut({ mods = "CTRL", key = "X" }), { description = "Universal cut" }) +-- Work around Hyprland send_shortcut sometimes leaving synthetic key state stuck/repeating. +-- https://github.com/hyprwm/Hyprland/discussions/14099 +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" }) + end +end + +hl.bind("SUPER + C", send_shortcut_once("CTRL", "Insert"), { description = "Universal copy" }) +hl.bind("SUPER + V", send_shortcut_once("SHIFT", "Insert"), { description = "Universal paste" }) +hl.bind("SUPER + X", send_shortcut_once("CTRL", "X"), { description = "Universal cut" }) hl.bind("SUPER + CTRL + V", hl.dsp.exec_cmd("omarchy-launch-walker -m clipboard"), { description = "Clipboard manager" })