Hammerspoon:筛选正在使用的应用程序

我绑定了一些按键来执行脚本。我需要仅在“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)

但是我收到错误“尝试调用空值(方法'setAppFilter')”

这是正确的方式吗? 是否有方法将所有绑定放入已批准的筛选器中?

提前感谢您

点赞
用户2959166
用户2959166

根据这里的文档 (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() 创建一个本地副本来进行自定义; 默认的窗口过滤器可能会在几个 Hammerspoon 模块中使用,更改它可能会产生意外后果...

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

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

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

2019-01-22 18:22:38
用户5791103
用户5791103

最终解决方案是以下代码:

local frontmostApplication = hs.application.frontmostApplication()

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

   {我要执行的代码}

end
2019-02-01 09:33:12
用户2326199
用户2326199

你可以像这样筛选应用程序

     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-17 05:06:20