使用 Hammerspoon 选择菜单项

Selecting a Menu Item with Hammerspoon

我尝试使用 Hammerspoon 通过以下脚本在 Firefox 中打开一个新的 window:

function newWindow() 
    local app = hs.application.find("Firefox")
    
    print(hs.inspect.inspect(app))
    print(app:title())
    print(app:bundleID())

    local item = app:findMenuItem("File")
    
    print(item)
end

hs.hotkey.bind({'alt', 'ctrl', 'cmd'}, 'n', newWindow)

虽然脚本能够找到 Firefox,但找不到我要查找的菜单项。但与此同时,我可以使用 app:getMenuItems() 检索整个菜单结构。

有没有人知道原因或任何应用程序的工作示例?

我正在使用 MacOS Big Sur 11.2.3

我想你要找的是app:selectMenuItem()方法:

function newWindow() 
    local app = hs.application.find("Firefox")
    app:selectMenuItem({"File", "New Window"})
end
hs.hotkey.bind({'alt', 'ctrl', 'cmd'}, 'n', newWindow)

来自文档:

hs.application:selectMenuItem(menuitem[, isRegex]) -> true or nil

选择一个菜单项(即模拟点击菜单项)

参数:

  • menuitem - select 的菜单项,指定为字符串或 table。有关详细信息,请参阅 hs.application:findMenuItem() 的菜单项参数。
  • isRegex - 一个可选的布尔值,默认为 false,仅当 menuItem 是字符串时才使用。如果设置为 true,menuItem 将被视为正则表达式而不是严格的字符串来匹配

Returns:

如果找到并select编辑了菜单项,则为 True,否则为 nil(例如,因为找不到菜单项)

备注:

根据涉及的菜单项类型,这将激活或tick/untick菜单项

http://www.hammerspoon.org/docs/hs.application.html#selectMenuItem

-- 编辑--

为避免多语言菜单结构,您还可以使用键盘快捷键打开新的 window:

function newWindow() 
    local app = hs.application.find("Firefox")
    hs.eventtap.keyStroke({'cmd'}, 'N', nil, app)
end
hs.hotkey.bind({'alt', 'ctrl', 'cmd'}, 'n', newWindow)