当赋值给变量时,Lua Hammerspoon中的hs.window.focusedWindow()会为nil。

我在 osx 上使用一个叫做 hammerspoon 的自动化软件。

当我在 hammerspoon 的控制台中使用以下代码时,win 的值为 nil:

> local win = hs.window.focusedWindow()
> win
nil

但实际上该函数返回了一些值:

> hs.window.focusedWindow()
hs.window: Hammerspoon Console (0x60000025f798)

这种奇怪的行为会破坏所有的窗口移动/调整大小功能,例如:

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "H", function()
    local win = hs.window.focusedWindow()
    local f = win:frame()

    f.x = f.x - 10
    win:setFrame(f)
end)

Hammerspoon 给出以下错误:

/Users/mertnuhoglu/.hammerspoon/init.lua:6: attempt to index a nil value (local 'win')
stack traceback:
    /Users/mertnuhoglu/.hammerspoon/init.lua:6: in function </Users/mertnuhoglu/.hammerspoon/init.lua:4>
stack traceback:

我不知道这个问题是由我的电脑还是其他原因引起的。

我有 osx yosemite,版本号为 10.10.5 和 hammerspoon 0.9.43。

更新:

我找到了错误的解决方法。这是由于 osx 的隐私设置造成的。

解决方案:

Prefences > Security > Privacy > Allow Apps: Hammerspoon

但是,我仍然不明白为什么 hs.window.focusedWindow() 返回值,如果没有分配给一个变量,它会返回一些值,而当分配给一个变量时,它返回 nil

点赞
用户2420301
用户2420301

Hammerspoon 执行每个语句块作为自己的代码块,因此本地变量只在该代码块中可用,在执行完代码块后就不再存在。

如果您想在代码块执行后访问变量,请将其设置为全局变量,即删除 'local' 关键字。

2017-01-02 11:51:20