Spotlight、Alfred でも Vim Binding やりたくなってきたので、少し修正しました。
昨日書いたやり方はホワイトリスト方式ですので
ここにアプリ名追加すれば良いかと思ったら、はまってしまいました。
hammerspoon/filter.lua at 3e141946732a66547dd9e43d31fd2008a68c020a · Hammerspoon/hammerspoon
に記載のある通り、SKIP_APPS_TRANSIENT_WINDOWS で対象外アプリを設定しているようです。
原因っぽいのはわかりましたが、いまいち回避方法がわからない。。
ブラックリスト方式
hs.window.filter.default:allowApp'Spotlight' みたいにやれと書いてありますが、どうもうまくいかないのでブラックリスト方式でやってみました。
Editor、iterm、chrome を対象外にする方法です。
local function keyStroke(key, mods) mods = mods or {} return function() hs.eventtap.keyStroke(mods, key, 1000) end end local function disableAll(keySet) for k, v in pairs(keySet) do v:disable() end end local function enableAll(keySet) for k, v in pairs(keySet) do v:enable() end end local function hasValue (tab, val) for index, value in ipairs(tab) do if value == val then return true end end return false end local vimBinding = { hs.hotkey.bind({'ctrl'}, 'J', keyStroke('down')), hs.hotkey.bind({'ctrl'}, 'K', keyStroke('up')) } local notVimBindingApps = { "Atom", "CotEditor", "iTerm", "Google Chrome" } function handleGlobalAppEvent(name, event, app) if event == hs.application.watcher.activated then -- hs.alert(name) if hasValue(notVimBindingApps, name) then disableAll(vimBinding) else enableAll(vimBinding) end end end appsWatcher = hs.application.watcher.new(handleGlobalAppEvent) appsWatcher:start()