Используя 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)
Однако возникают две проблемы.
- Несмотря на то, что "красный" указан в
indicatorON(red)
, отображается строкана самом деле черный . - После (повторной) загрузки
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