44 lines
1.3 KiB
Lua
44 lines
1.3 KiB
Lua
-- Defaults for Japanese (JIS) keyboards, which only apply when the installed
|
|
-- layout is jp. See default/hypr/keyboard.lua.
|
|
|
|
local keyboard = require("default.hypr.keyboard")
|
|
|
|
if not keyboard.jis() then
|
|
return
|
|
end
|
|
|
|
-- Same down/up split as the universal clipboard shortcuts in clipboard.lua.
|
|
local function send_shortcut_once(mods, key)
|
|
hl.dispatch(hl.dsp.send_key_state({ mods = mods, key = key, state = "down" }))
|
|
|
|
hl.timer(function()
|
|
hl.dispatch(hl.dsp.send_key_state({ mods = mods, key = key, state = "up" }))
|
|
end, { timeout = 50, type = "oneshot" })
|
|
end
|
|
|
|
local function active_window_class()
|
|
local window = hl.get_active_window()
|
|
return ((window and window.class) or ""):lower()
|
|
end
|
|
|
|
-- On JIS, + is Shift + ;, so apps see Ctrl + Shift + semicolon and never zoom
|
|
-- in. Hand them Ctrl + keypad plus instead, which Chromium, Electron apps,
|
|
-- VS Code, and Firefox read as zoom in. Obsidian only listens for Ctrl + ^,
|
|
-- which JIS types without Shift.
|
|
local zoom_in_overrides = {
|
|
obsidian = { "CTRL", "asciicircum" },
|
|
}
|
|
|
|
o.bind("CTRL + SHIFT + semicolon", "Zoom in (JIS + key)", function()
|
|
local class = active_window_class()
|
|
|
|
for pattern, chord in pairs(zoom_in_overrides) do
|
|
if class:find(pattern, 1, true) then
|
|
send_shortcut_once(chord[1], chord[2])
|
|
return
|
|
end
|
|
end
|
|
|
|
send_shortcut_once("CTRL", "KP_Add")
|
|
end)
|