9

私は、 osxでハンマースプーンという自動化ソフトウェアを使用しています。

ハンマースプーンのコンソールで次のコードを使用すると、winnil になります。

> 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)

ハンマースプーンは次のエラーを出します:

/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 ヨセミテ、バージョン 10.10.5、ハンマースプーン 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 に答える