9

我在 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当它分配给变量时它会返回。

4

1 回答 1

2

Hammerspoon 将每一行作为它自己的块执行,因此局部变量仅在该块中可用,并且在块执行后不再可用。

如果你想在一个块执行后访问变量,使它们成为全局变量,即去掉'local'关键字。

于 2017-01-02T11:51:20.920 回答