Молоток: цвет холста и ОШИБКА: LuaSkin: обратный вызов hs.hotkey - PullRequest
0 голосов
/ 17 октября 2019

Используя Hammerspoon, я хочу показать (нарисовать) линию на дисплее, когда я нажимаю определенные комбинации клавиш. Для этого я придумал следующий код:

-- Define the function to show the Indicator
function indicatorON(myColor)
    border = hs.canvas.new{x=0,y=20,h=8,w=1280}:appendElements( {
       type = "rectangle",
       action="strokeAndFill",
       fillColor= {myColor=1.0},
       frame = {h=8.0, w=1280.0, x=0.0, y =0.0}
      } ):show()
end

-- Define the function to delete the Indicator
function indicatorOFF()
    if border then
        border:delete()
    end
end

-- Indicator ON
hs.hotkey.bind({"ctrl","shift"}, "1", function()
    indicatorOFF()
    indicatorON(red)
end)

-- Indicator OFF
hs.hotkey.bind({"ctrl","shift"}, '0', function()
    indicatorOFF()
end)

Однако возникают две проблемы.

  1. Несмотря на то, что "красный" указан в indicatorON(red), отображается строкана самом деле черный .
  2. После (повторной) загрузки init.lua, нажатие Ctrl-1 показывает строку, а нажатие Ctrl-0 удаляет ее, как и ожидалось. Однако после этого повторное нажатие Ctrl-1 снова приводит к ошибке (test-a.lua - это файл, содержащий указанный выше код):
ERROR:   LuaSkin: hs.hotkey callback: /Users/myname/.hammerspoon/test-a.lua:17: attempt to index a userdata value (global 'border')
stack traceback:
/Users/myname/.hammerspoon/test-a.lua:17: in function 'indicatorOFF'
/Users/myname/.hammerspoon/test-a.lua:23: in function </Users/myname/.hammerspoon/test-a.lua:22>

Что является неправильным / отсутствует в приведенном выше коде? Буду признателен за любую помощь.

Hammspoon 0.9.75 macOSX 10.14.6

...