Keyboard Maestro — как я автоматизировал Mac
«Работать нужно не 24 часа в сутки, а головой»
— Стив Джобс.
Впервые я услышал восторженные отзывы о Keyboard Maestro около года назад. С этим названием мне доводилось сталкиваться довольно часто, поэтому инетерес к данной утилите продолжал постепенно расти, но каждый раз, когда я заходил на официальный сайт Keyboard Maestro с целью загрузить себе бесплатную триал-версию, меня отталкивала мысль, что это «как-то слишком сложно». Около месяца назад я наконец попробовал Keyboard Maestro и сейчас с трудом удерживаюсь, чтобы не начать эту статью с десятка эпитетов о том, насколько замечательна утилита. Давайте все же разберемся по порядку.
Содержание
Введение
Честно скажу, мне довольно сложно собраться с мыслями и сформулировать описание Keyboard Maestro (чтобы получилось понятно для среднестатистического пользователя), но я попробую. Keyboard Maestro — надежный, мощный и функциональный помощник для вашего Mac. Когда вы не знаете, как сделать существующее меню, программу или какую-то функцию более удобной и быстрой, смело запускайте Keyboard Maestro и попробуйте усовершенствовать это. У вас обязательно все получится.
Другими словами, Keyboard Maestro позволяет вам взять существующие приложения, меню, сочетания клавиш — все, что умеет ваш Mac — и автоматизировать их конкретно для вашего процесса работы.
Впрочем, суть Keyboard Maestro не заключается в постоянной настройке вашей системы. Когда вы научились пользоваться утилитой и сумели реализовать все задумки по автоматизации, вам остается лишь радоваться результатам. Это не игрушка, но она заставляет вас улыбаться каждый раз, когда делает свое волшебство.
Написать обзор Keyboard Maestro — словно попросить кого-то «написать обзор Apple». Количество воможностей утилиты превышает все разумные границы, поэтому было бы глупо с моей стороны описывать каждую функцию. Вместо этого я предлагаю вам познакомиться с тем, как работает Keyboard Maestro, а также опишу несколько вариантов собственных «скриптов».
Знакомство с интерфейсом
Более простое и понятное описание Keyboard Maestro: вы говорите утилите, чтобы при каких-то обстоятельствах она автоматически в фоновом режиме выполняла определенные действия. Эти обстоятельства называются триггерами. В качестве триггера может выступать что угодно — клавиатурное сочетание клавиш, ключевое слово или системное событие. Вы выбираете подходящий триггер и далее вам нужно указать непосредственно действие.
Мгновением назад я упомянул слово «скрипт», хотя это не совсем корректно. Keyboard Maestro работает с макросами (от англ. macros или macro). Макрос — набор действий, выполняемых по единому триггеру, которые в конечном счете приводят к запланированному результату.
Кроме того, каждый макрос относится к определенной группе. С помощью группы мы можем указывать Keyboard Maestro, в каких именно приложениях наши макросы должны выполняться. Чаще всего в качестве группы мы будем использовать дефолтную «Global Macro Group», макросы которой доступны для исполнения во всех приложениях. Однако когда макрос нужен только в какой-нибудь определенной программе, то на помощь как раз приходят группы (обратите внимание на скриншот выше, где у меня используются группы «Google Chrome only» и «Finder only»).
Примеры простейших макросов
Эти термины довольно сложно осознать, пока вы не познакомитесь с ними на практике, поэтому предлагаю начать с примитивного примера. Допустим, я хочу сделать так, чтобы по сочетанию клавиш CMD+Alt+I у меня запускался Twitter-клиент и автоматически открывалось окно для ввода твита. Для этого нужно создать новый макрос группы «Global Macro Group», где нужно последовательно указать необходимые действия (запустить Twitter-клиент, открыть окно ввода твита), а в качестве триггера в данном примере будет фигурировать сочетание клавиш CMD+Alt+I.
Будучи незнакомым с Keyboard Maestro, раньше я думал, что здесь уже изначально содержится какой-то набор готовых команд для каждого приложения, но на самом деле все макросы нам нужно создавать самостоятельно.
Возвращаясь к нашему примеру с Twitter-клиентом, мы ведь не выбрали готовый макрос из арсенала Keyboard Maestro, мы пошагово описали процесс таким образом, как поступили бы сами. Если говорить о технической стороне этого макроса, то в плане запуска Twitter-клиента все довольно просто (вы просите Keyboard Maestro запустить приложение). А как открыть окно ввода твита? Существует два наиболее простых варианта — либо сымитировать сочетание клавиш CMD+N, либо открыть его с помощью системного меню (в моем случае с Osfoora это Tweet → New Tweet).
Все довольно просто, не так ли? Давайте познакомимся с другим примером, а заодно научимся добавлять действия к нашим макросам. Скажем, мне нужно, чтобы каждый раз при выходе из режима сна Keyboard Maestro открывал мою папку «temp_Images» в Finder. В этом случае триггером будет «System Wake Trigger»:
Далее нам необходимо нажать на кнопку «New Action», чтобы придать макросу функциональность. В левой части Keyboard Maestro появится новая панель, с помощью которой мы можем присваивать макросу определенные действия. Обратите внимание, что для удобства все доступные действия разделены по категориям, а также доступно поле ввода поискового запроса:
В нашем случае нам понадобится действие «Open a File, Folder or Application» из соответствующей категории «Open». Остается лишь указать путь к необходимой папке — и наш макрос готов.
Текстовые сниппеты
Описанные выше примеры, надеюсь, помогли вам понять основы работы с Keyboard Maestro, однако вряд ли многие из вас найдут их особо полезными в реальной жизни, поэтому предлагаю перейти к чему-то более продуктивному — текстовые сниппеты.
Если вам приходиться печатать много текста и вы не пользуетесь сниппетами, то вы многое теряете. По своему личному опыту могу сказать, что они ускоряют процесс работы буквально в разы. Суть сниппетов заключается в следующем — по определенному сочетанию клавиш или напечатанному ключевому слову утилита вставляет заранее указанный текст.
В случае со сниппетами вас ограничивает только фантазия. В качестве вставляемого «текста» может выступать как шаблон письма для клиента, так и пара специфических символов. Например, по нажатию Caps Lock у меня вставляется пара угловых кавычек («»), а курсор двигается на один символ влево, чтобы я тут же мог продолжить набор текста внтури кавычек. Макрос в Keyboard Maestro выглядит так:
Чтобы курсор сместился на один символ влево, здесь имитируется нажатие соответствующей клавиши. Обратите внимание, что в данном примере в качестве триггера используется не шорткат, а «нажатое состояние» кнопки Caps Lock на моей клавиатуре. В процессе тестирования данного сниппета я обратил внимание, что при вставке кавычек они попадают в буфер обмена, поэтому макрос также замещает текущий клипбоард предыдущим.
Еще одна интересная идея сниппета, которую я обнаружил совсем недавно в Twitter — замена двойного пробела на точку + пробел (по аналогии с iOS). Она показалась мне довольно интересной и удобной, но требует определенного периода времени для привыкания. Макрос в Keyboard Maestro выглядит следующим образом:
Раньше для сниппетов я использовал утилиту под названием TextExpander, которая поначалу меня в целом очень даже устраивала, однако уже в первые дни после знакомства с Keyboard Maestro все они «переехали» туда, и надобности в TextExpander я больше не вижу. Какие преимущества Keyboard Maestro перед TextExpander в плане текстовых сниппетов? (я знаю, что некорректно задавать такой вопрос, потому что по большому счету утилиты предназначены для разных целей, но все же). Во-первых, скорость. Возможно, это каким-то образом связано с моей необычной аппаратной сотавляющей, но так или иначе текстовые сниппеты в Keyboard Maestro выполняются гораздо быстрее по сравнению с TextExpander. Во-вторых, функциональность. В Keyboard Maestro вы можете не только по определенной команде вставлять указанный отрезок текста, но также можно имитировать нажатие клавиш, работать с несколькими буферами обмена, переменными и так далее. Наконец, зачем использовать TextExpander, если вся эта функциональность доступна в Keyboard Maestro, и в добавок вы еще получаете огромное количество других возможностей? Другими словами, для чего нужна еще одна «лишняя» утилита?
Поддержка нескольких буферов обмена в Keyboard Maestro действительно помогает в создании макросов. Наглядный пример — быстрая вставка ссылок в стиле Markdown.
Благодаря Keyboard Maestro ссылки я вставляю следующим образом: копирую непосредственно сам URL, выделяю нужный отрезок текста, нажимаю сочетание клавиш CMD+Shift+A. Готово.
Добавление ссылок в Evernote
Несколько месяцев назад я начал пользоваться популярным сервисом Evernote, и к моменту написания этой статьи у меня там содержится более сотни заметок. Большую часть из них составляют ссылки на различные статьи, обзоры приложений и т.д. Единственное, что в первое время меня огорчало в процессе использования Evernote — неудобный метод добавления новых заметок. Я пробовал официальное расширение Evernote для браузера Google Chrome, однако оно мне не особо понравилось, поэтому в первое время мне приходилось добавлять новые заметки вручную с помощью нативного клиента Evernote для OS X.
Проблему помог исправить Keyboard Maestro в связке с простым скриптом AppleScript. Суть скрипта заключается в следующем: он создает новую заметку в Evernote, в заголовок которой вставляется титл выделенной вкладки в вашем браузере (поддерживаются Safari, Chrome и Chrome Canary), а в качестве основного текста заметки выступает URL активной вкладки. Автором скрипта является Дон Соуфард.
set myBrowser to (path to frontmost application as string)
set browserPath to the POSIX path of myBrowser
log browserPath
tell application browserPath
if browserPath is "/Applications/Google Chrome.app/" then
tell application "Google Chrome"
set chromeURL to (get URL of active tab of window 1)
set chromeTitle to (get title of active tab of window 1)
tell application "Evernote"
set newNote to (create note with html chromeURL)
set title of newNote to chromeTitle
set source URL of newNote to chromeURL
synchronize
end tell
end tell
else if browserPath is "/Applications/Google Chrome Canary.app/" then
tell application "Google Chrome"
set canaryURL to (get URL of active tab of window 1)
set canaryTitle to (get title of active tab of window 1)
tell application "Evernote"
set newNote to (create note with html canaryURL)
set title of newNote to canaryTitle
set source URL of newNote to canaryURL
synchronize
end tell
end tell
else if browserPath is "/Applications/Safari.app/" then
tell application "Safari"
set safariURL to the URL of front document as string
set safariTitle to the name of front document as string
tell application "Evernote"
set newNote to (create note with html safariURL)
set title of newNote to safariTitle
set source URL of newNote to safariURL
synchronize
end tell
end tell
else
return
end if
end tell
Кстати, при создании данного макроса мне понадобилось создать новую группу — «Google Chrome only», о которой я упоминал выше. Это значит, что все макросы данной группы будут выполняться только в приложении Google Chrome. И правда, для чего мне использовать этот скрипт, например, в Finder или iTunes?
Пока мы далеко не ушли от темы макросов, предназначенных исключительно для браузера, хотелось бы познакомить вас с еще одним лайфхаком. Как часто вы нечайно нажимаете CMD+S, пытаясь выделить текст сочетанием клавиш CMD+A? Раньше у меня такое случалось ни раз и ни два, при этом браузер почему-то всегда подвисал на пару секунд. Проблему я решил радикально:
Теперь при нажатии CMD+S только в Google Chrome Keyboard Maestro будет имитировать нажатие сочетания клавиш CMD+A. Довольно-таки удобно, на мой взгляд. А когда мне понадобится действительно сохранить страницу, то я могу сделать это из системного меню или правой кнопкой мыши → Save as…
Изменение размера изображения и загрузка по FTP
Я могу представить себе, о чем сейчас думают наши читатели (вернее те из них, кто осилил текст выше и читают эти строки): «Окей, Keyboard Maestro кажется полезной штукой. Но умеет ли эта утилита что-то более серьезное?».
Мы плавно подошли к макросу, который я считаю самым функциональным и полезным для моего процесса работа. Я выделяю картинку в Finder, нажимаю «волшебную» кнопку F7 и жду несколько секунд. В это время Keyboard Maestro делает следующее: если размер изображения превышает 900 пикселей (в ширину), то картинка будет уменьшена до 540 пикселей и сконвертирована в формат JPEG; запускает программу Transmit, открывает папку с изображениями для данного блога, загружает по FTP фотографию в соответствующую папку (по принципу даты, например, 2012/08), открывает текстовый редактор Byword и вставляет строчку следующего формата — ![название изображения](URL картинки)
. И все это в автоматическом режиме. Фантастика.
Хотите узнать, как это все работает? Данный макрос имеет множество мелких действий, но в целом его функиональность можно разделить на две большие составляющие — (1) проверить размер изображения и при необходимости изменить его, (2) загрузить картинку по FTP. Макрос Keyboard Maestro получился довольно длинным, но не пугайтесь, в нем нет ничего сложного:
Сразу отвечу на несколько вопросов, которые скорее всего возникли в вашей голове:
- Для чего нам нужен путь к файлу, его название и расширение? Это позволяет не перезаписывать исходный файл, а делать его копию с определенным префиксом (допустим, «название_файла_540.jpg»).
- Для чего нужна переменная «Variable» при изменении размера изображения? Она помогает изменять не только ширину картинки, но и соответствующим образом подгоняет высоту изображения.
- Для чего нужно активировать Transmit и тут же закрывать его? Дело в том, что при загрузке каждого нового изображения скрипт открывает новое окно Transmit. Обычно мне для каждой статьи нужно загрузить несколько скриншотов, поэтому после каждой загрузки Keyboard Maestro автоматически закрывает все окна Transmit, чтобы мне не делать этого вручную.
Что касается скрипта AppleScript для загрузки по FTP, то его автором (как и многих других макросов по Keyboard Maestro) является Гейб Веадерхэйд aka Macdrifter:
(* This is my WordPress upload root *)
set urlPath to "http://www.macdrifter.com/uploads.html"
(* This will set the upload path to year/month/ *)
set myMonth to do shell script "date +\"%m\""
set myYear to 1 * (year of (current date))
set clipContents to {}
tell application "Finder"
set these_items to the selection
set myFolder to (POSIX path of (target of the front window as alias))
end tell
tell application "Transmit"
(* Find the favorite for the FTP Site *)
set myFav to item 1 of (favorites whose name is "Macdrifter_WP")
tell current tab of (make new document at end)
(* Connect to the favorite *)
connect to myFav
change location of remote browser to path "/wp-content/uploads/" & myYear & "/" & myMonth & "/"
change location of local browser to path myFolder
(* Process all of the finder selections *)
repeat with i from 1 to the count of these_items
set this_item to (item i of these_items) as alias
set this_info to info for this_item
set myPath to (POSIX path of this_item)
set myFileName to name of this_info as text
(* If we want to use the files in a blog post we need the URL's. But we need the URL's encoded because we may have spaces in the file names *)
set myURLFileName to do shell script "/usr/bin/python -c 'import sys, urllib; print urllib.quote(sys.argv[1])' " & quoted form of myFileName
set myURLFileName to urlPath & myYear & "/" & myMonth & "/" & myURLFileName
set end of clipContents to "
" & myURLFileName
(* Upload the files. Duplicates will require user interaction. That's safer *)
tell remote browser
upload item at path myPath to "/wp-content/uploads/" & myYear & "/" & myMonth & "/"
end tell
(* Enable if we want the window to close when the deed is done
close remote browser *)
end repeat
end tell
end tell
(* Convert our list to a single block of text *)
set AppleScript's text item delimiters to "
"
set clipContents to clipContents as string
return clipContents
Обратите внимание, что вам нужно немного подкорректировать скрипт под себя: вставить ссылку на директорию изображений и указать собственный FTP-сервер. Кроме того, для правильной работы скрипта нужно добавить ваш FTP-сервер в избранное Transmit.
Полезные ссылки
Перед тем, как перейти к заключительной части обзора, предлагаю вам несколько полезных ссылок по теме Keyboard Maestro:
- Официальный сайт Keyboard Maestro
- Описание функций на сайте разработчика
- Несколько примеров макросов
- Множество полезных макросов на Macdrifter
- Обзор на Brooks Review
Выводы
Сразу скажу, что примерно за месяц использования мне не удалось стать «опытным» пользователем Keyboard Maestro, причем вряд ли я даже приблизился к этой отметке. Проблема не в том, что утилита оказалась слишком сложной для меня. Мне еще предстоит ознакомиться с полным потенциалом возможностей Keyboard Maestro, потому что я еще не доконца осознал, как работает мой компьютер. Не поймите меня неправильно, я не имею в виду то, о чем вы только что подумали. Самая сложная часть использования Keyboard Maestro — детально и в мелочах понять, каким образом вы используете свой компьютер, взглянуть на себя со стороны и проследить, какие аспекты вашего рабочего процесса требуют автоматизации и усовершенстования. А дальше останется лишь техническая часть, с которой Keyboard Maestro должен справиться без проблем.
С тех пор, как я начал использовать Keyboard Maestro, мой компьютер начал работать на меня, а не наоборот. Утилита мне полюбилась так сильно, что, пожалуй, я назову ее лучшим приложением, которые я когда-либо пробовал на своем Mac. Абсолютно лучшим приложением, и точка.
Keyboard Maestro создан для ленивых людей? Возможно. Но если такая лень приводит к ускорению процесса работы и существенному сохранению времени, то, извините меня, я готов быть самым ленивым человеком в мире.