1

我绑定了一些键来执行脚本。仅当 Visual Studio Code 窗口聚焦时,我才需要激活绑定。

我看到了 Hammerspoon 过滤器功能,但我不明白如何使用它。

应用名称:Code

hs.hotkey.bind({"ctrl"}, "b", function()
    local codeWindowFilter = hs.window.filter:setAppFilter('Code')
    codeWindowFilter:isAppAllowed("Code", function()

        mycode here

    end)
end)

但我得到了错误attempt to call a nil value (method 'setAppFilter')

这是正确的方法吗?有没有办法将所有绑定放入批准的过滤器?

提前谢谢你

4

3 回答 3

1

最终的解决方案是:

local frontmostApplication = hs.application.frontmostApplication()

if frontmostApplication and frontmostApplication:name() == "Code" then

   {my code here}

end
于 2019-02-01T09:33:12.380 回答
0

您可以像这样过滤应用

    wf_terminal = hs.window.filter.new{'Terminal','iTerm2'}
    for _, win in ipairs(wf_terminal:getWindows()) do
        if win ~= nil and string.find(win:title(), "nvim") then
            moveWindowToLeftHalf(win)
            win:focus()
        end
    end
于 2019-04-17T05:06:20.410 回答
0

根据此处的文档(http://www.hammerspoon.org/docs/hs.window.filter.html):

您需要遵循以下结构:

local wf=hs.window.filter
wf.default:setAppFilter('My IDE',{allowTitles=1})

或者

如此处所述,创建一个新的窗口过滤器:

虽然您可以自定义默认窗口过滤器,但通常建议您通过 mywf=hs.window.filter.new(); 在本地副本上进行自定义。默认的 windowfilter 可能会在多个 Hammerspoon 模块中使用,并且更改它可能会产生意想不到的后果......

因此,将您的代码更改为:

local codeWindowFilter = hs.window.filter.new():setAppFilter('Code')

.new() 方法创建一个新的窗口过滤器。:setAppFilter 调用新对象的方法,然后返回修改后的窗口过滤器对象。

于 2019-01-22T18:22:38.303 回答