Hammerspoonで特定のアプリでだけキーバインドを有効にするのが意外と大変だったのでメモ。
まずキーマップを作って、アプリの変更を監視して、特定のタイトルを持つアプリが前面に来た時にキーバインドを有効にします。
.lua
local YourKeyMap = hs.hotkey.modal.new()
local function appTitle()
app = hs.application.frontmostApplication()
if app ~= nil then
return app:title()
end
end
local function chooseKeyMap()
if appTitle() == 'YourAppTitle' then
print('Turning ON keybindings for: ' .. appTitle())
YourKeyMap:enter()
else
print('Turnning OFF keybindings for: ' .. appTitle())
YourKeyMap:exit()
end
end
local function appWatcherFunction(appName, eventType, appObject)
if (eventType == hs.application.watcher.activated) then
chooseKeyMap()
end
end
local function sendKey(mods, key)
return function()
hs.eventtap.keyStroke(mods, key, 10000)
end
end
YourKeyMap:bind({'ctrl'}, 'a', sendKey({}, 'b'))
chooseKeyMap()
local appWatcher = hs.application.watcher.new(appWatcherFunction)
appWatcher:start()