mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-04 12:47:51 +02:00
44 lines
1.5 KiB
Lua
44 lines
1.5 KiB
Lua
-- 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
|
|
|
|
local terminal_classes = {
|
|
alacritty = true,
|
|
["com.mitchellh.ghostty"] = true,
|
|
foot = true,
|
|
kitty = true,
|
|
wezterm = true,
|
|
}
|
|
|
|
local function active_window_is_terminal()
|
|
local window = hl.get_active_window()
|
|
if not window or not window.class then
|
|
return false
|
|
end
|
|
|
|
return terminal_classes[window.class:lower()] == true
|
|
end
|
|
|
|
local function universal_clipboard_shortcut(default_mods, default_key, terminal_mods, terminal_key)
|
|
return function()
|
|
if active_window_is_terminal() then
|
|
send_shortcut_once(terminal_mods, terminal_key)()
|
|
else
|
|
send_shortcut_once(default_mods, default_key)()
|
|
end
|
|
end
|
|
end
|
|
|
|
o.bind("SUPER + C", "Universal copy", universal_clipboard_shortcut("CTRL", "C", "CTRL", "Insert"))
|
|
o.bind("SUPER + V", "Universal paste", universal_clipboard_shortcut("CTRL", "V", "SHIFT", "Insert"))
|
|
o.bind("SUPER + X", "Universal cut", send_shortcut_once("CTRL", "X"))
|
|
o.bind("SUPER + CTRL + V", "Clipboard manager", "omarchy-shell shell toggle omarchy.clipboard")
|