使用Hammerspoon(Lua + Mac问题)切换MRU浏览器选项卡

时间:2016-08-30 17:41:31

标签: macos lua

我决定让最近使用的标签切换功能适用于Chrome。为此,我安装了CLUT Chrome浏览器扩展程序,当前映射alt-w以切换到最后一个选项卡,并安装了Hammerspoon,它允许拦截系统击键。

在init.lua中我有这段代码:

local ctrlTab = hotkey.new({"ctrl"}, "tab", function()
  hs.eventtap.keyStroke({"alt"}, "w")
end)
chromeWatcher = hs.application.watcher.new(function(name, eventType, app)
  if eventType ~= hs.application.watcher.activated then return end
  if name == "Google Chrome" then
    ctrlTab:enable()
  else
    ctrlTab:disable()
  end
end)

chromeWatcher:start()

但是,我在Hammerspoon中遇到了这个错误:

attempt to index a nil value (global 'hotkey')

stack traceback:
    /Users/vonwao/.hammerspoon/init.lua:1: in main chunk
    [C]: in function 'xpcall'
    ...app/Contents/Resources/extensions/hs/_coresetup/init.lua:410: in function 'hs._coresetup.setup'
    (...tail calls...)

我搜索过,但无法弄清楚这个错误意味着什么。

编辑 - 这是最终的解决方案,如果有人想在Mac上切换MRU标签:

local ctrlTab = hs.hotkey.new({"ctrl"}, "tab", nil, function()
  hs.eventtap.keyStroke({"alt"}, "w")
end)
chromeWatcher = hs.application.watcher.new(function(name, eventType, app)
  if eventType ~= hs.application.watcher.activated then return end
  if name == "Google Chrome" then
    ctrlTab:enable()
  else
    ctrlTab:disable()
  end
end)

chromeWatcher:start()

1 个答案:

答案 0 :(得分:1)

你应该使用" hs.hotkey.new"在第一行。

另外,我建议你在hokey函数之前添加一个nil参数 - 你当前绑定到按下ctrl-tab的那一刻,然后发出一个击键。操作系统会立即看到所有这些键发生。如果在函数之前传递nil,则在释放ctrl-tab时将触发热键,并且仅解释alt-w。