Страницы

среда, 24 октября 2018 г.

Hammerspoon для Mac — автоматизируй меня полностью


Таким необычным названием создатели, видимо, хотели подчеркнуть многофункциональность и универсальность Hammerspoon. Их вряд ли можно упрекнуть, ведь благодаря поддержке Lua-скриптов перед нами открываются действительно огромные возможности.

Сразу стоит сказать, что с

Hammerspoon

нам придётся немножко повозиться с кодом. Но не пугайтесь, уметь писать его самому не обязательно (хотя в случае с Lua это очень легко), на сайте приведено много готовых примеров на основе расширений, которые можно использовать или видоизменять.

После установки Hammerspoon нужно включить для него универсальный доступ, после чего перейти в меню Open Config и в открывшемся окне текстового редактора добавить код нашего первого скрипта.

По традиции можно начать с Hello World или сразу перейти к более сложным вещам: разработчики подготовили

подробный гид. Мы с вами не будем размениваться по мелочам и сделаем шорткаты для перемещения окон. Для этого вставляем в наш init.lua следующий код, сохраняем документ и выбираем в меню Hammerspoon Reload Config.

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Y", function() local win = hs.window.focusedWindow() local f = win:frame() f.x = f.x - 10 f.y = f.y - 10 win:setFrame(f) end) hs.hotkey.bind({"cmd", "alt", "ctrl"}, "K", function() local win = hs.window.focusedWindow() local f = win:frame() f.y = f.y - 10 win:setFrame(f) end) hs.hotkey.bind({"cmd", "alt", "ctrl"}, "U", function() local win = hs.window.focusedWindow() local f = win:frame() f.x = f.x + 10 f.y = f.y - 10 win:setFrame(f) end) 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) hs.hotkey.bind({"cmd", "alt", "ctrl"}, "L", function() local win = hs.window.focusedWindow() local f = win:frame() f.x = f.x + 10 win:setFrame(f) end) hs.hotkey.bind({"cmd", "alt", "ctrl"}, "B", function() local win = hs.window.focusedWindow() local f = win:frame() f.x = f.x - 10 f.y = f.y + 10 win:setFrame(f) end) hs.hotkey.bind({"cmd", "alt", "ctrl"}, "J", function() local win = hs.window.focusedWindow() local f = win:frame() f.y = f.y + 10 win:setFrame(f) end) hs.hotkey.bind({"cmd", "alt", "ctrl"}, "N", function() local win = hs.window.focusedWindow() local f = win:frame() f.x = f.x + 10 f.y = f.y + 10 win:setFrame(f) end)

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

⌃⌥⌘, жмём на клавиши H/L для перемещения влево-вправо и J/K для перемещения вниз-вверх. Всё работает.

В качестве мини-программ можно привести в пример реализацию аналога популярной утилиты Caffeine, предотвращающей переход Mac в режим сна. В соответствующем скрипте всего с десяток строк кода.

local caffeine = hs.menubar.new() function setCaffeineDisplay(state) if state then caffeine:setTitle("AWAKE") else caffeine:setTitle("SLEEPY") end end function caffeineClicked() setCaffeineDisplay(hs.caffeinate.toggle("displayIdle")) end if caffeine then caffeine:setClickCallback(caffeineClicked) setCaffeineDisplay(hs.caffeinate.get("displayIdle")) end

После сохранения в строке меню появляется простая кнопка SLEEPY, меняющаяся на AWAKE, если запретить переход в режим сна.

В скрипт можно добавлять несколько фрагментов кода с теми или иными функциями, они будут работать независимо друг от друга. Всего в Hammerspoon доступно около

сотни API, которые позволяют автоматизировать самые различные действия: от перемещения окон, взаимодействия с буфером обмена и запуска AppleScript до всяческих процессов, основанных на событиях, вроде подключения к Сети, подсоединения USB-устройств и многих других.

Утилита весьма полезна, и если вы не боитесь повозиться с кодом, то без преувеличения сможете с её помощью свернуть горы.

Комментариев нет:

Отправить комментарий