我在osx上使用名为hammerspoon的自动化软件.
当我在hammerspoon的控制台中使用以下代码时,win为零:
> local win = hs.window.focusedWindow()
> win
nil
Run Code Online (Sandbox Code Playgroud)
但实际上函数返回一些值:
> hs.window.focusedWindow()
hs.window: Hammerspoon Console (0x60000025f798)
Run Code Online (Sandbox Code Playgroud)
这种奇怪的行为会破坏所有窗口移动/大小调整功能,例如:
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)
Run Code Online (Sandbox Code Playgroud)
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:
Run Code Online (Sandbox Code Playgroud)
我不知道这个问题是由我的电脑还是其他原因引起的.
我有osx yosemite,版本10.10.5和hammerspoon 0.9.43.
我找到了错误的解决方案.这是由于osx的隐私设置.
解:
Prefences > Security > Privacy > Allow Apps: Hammerspoon
Run Code Online (Sandbox Code Playgroud)
但是,我仍然不明白为什么hs.window.focusedWindow()如果它没有分配给变量就会返回一些东西,并且nil当它被赋值给变量时它会返回.
Hammerspoon 将每一行作为它自己的块来执行,因此局部变量仅在该块中可用,并且一旦执行该块就不再可用。
如果您想在执行块后访问变量,请将它们设置为全局变量,即删除“local”关键字。
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |