Медиа-клавиши, Alfred и OS X
Сегодня будет не очень программистская тема, но все же весьма и весьма гиковая.
Скажите, вы любите слушать музыку? Я вот очень, я слушаю ее весьма часто, если не сказать постоянно. В разные моменты своего жизненного пути я пользовался разными сервисами. Пока что я остановился на Яндекс.Музыке и довольно часто мне бывает нужно поставить ее на паузу или переключиться на следующий трек. На клавиатуре красуются клавиши “Previous”, “Play/Pause” и “Next”, но использовать мы не их можем. Ах, беда, печаль, огорчение. Так, куда это меня понесло… Давайте попорядку.
Alfred
Как правило, современные сервисы не имеют нативных клиентов и плохо дружат с системными фишками. Все они работают в браузерах, и это немного усложняет задачу. Сразу обмолвлюсь, что для таких целей я использую браузер Safari, он является пожалуй наиболее быстрым и ресурсоэкономным браузером для системы OS X. Собственно, именно в нем мы и будем учиться эмулировать нажатия на элементы интерфейса, отвечающие за остановку воспроизведения и переключение треков. Итак, как можно выполнять что-то “свое” в браузере, да при этом повесив это “свое” на горячие клавиши? Тут сразу на ум приходит прекрасный инструмент автоматизации Alfred, в некотором роде являющийся стандартом де факто для такого рода задач.
Какое-то время назад я написал для Alfred свой workflow, который позволяет взаимодействовать с Яндекс.Музыкой в браузере Safari. Я не буду скромничать и порекомендую вам воспользоваться именно им: https://github.com/alexey-detr/yandex-music-hotkeys.
Установив его в свой Alfred (должен сразу предупредить, что для этого нужна именно платная версия) и, попробовав навесить горячие клавиши на основные действия, вы столкнетесь с небольшой неприятностью. Дело в том, что Alfred не умеет вешать медиа-клавиши на действия.
Здравой идеей было бы предположить, что медиа-клавиши являются некими системными клавишами и для их “отлова” у Alfred просто не хватает привелегий. Ну не очень верится, что разработчик Alfred за столь долгий срок разработки ни разу не догадался, что медиа-клавиши тоже можно было бы навешивать на действия.
Что ж, давайте немного забежим вперед и навесим на действия комбинации, которые ну точно никогда и нигде не будут использованы (позднее я объясню, зачем так надо). Пусть это будет что-то вроде:
Shift + Control + Alt + Command + F7 => Previous track
Shift + Control + Alt + Command + F8 => Play/pause
Shift + Control + Alt + Command + F9 => Next track
Итак, ладно, у нас есть теперь такие извращенные комбинации на действия в Alfred. Но хотелось бы как-то изловить именно медиа-клавиши. Далее повествование переключается на довольно низкоуровневый инструмент, который умеет переназначать клавиши и называется он…
Karabiner
Итак, Karabiner можно скачать и установить с официального сайта https://pqrs.org/osx/karabiner/. Не буду вас долго мучать и объяснять его конфигурирование, тем более вы и сами можете почитать мануалы к нему. Сразу открою все карты:
{% highlight xml %} <?xml version=”1.0”?>
Что мы здесь можем видеть? А здесь как раз и есть заветное переназначение медиа-клавиш на комбинации, которые мы навесили в Alfred на действия.
Собственно, вы можете включить это у себя, скопировав узел <item>
в свой файл private.xml
. Последний вы можете обнаружить в настройках во вкладке Misc & Uninstall
в пункте Custom setting
. После этого важно будет зайти на вкладку Change Key
и нажать Reload XML
, затем у вас в списке remapping
появится пункт 'Media Prev,Play,Pause' to 'All modifiers + F7,F8,F9'
, смело ставим напротив него галочку.
Что же дальше?
А вы знаете, это все. Теперь ваши медиа-клавиши будут эмулировать те, с которыми может работать Alfred, а он в свою очередь уже будет выполнять действия в Safari, таким вот немного костыльным образом можно заставить работать медиа-клавиши в Яндекс.Музыке.
P.S. А столь страшные комбинации были использованы как раз для того, чтобы избежать пересечения с какой-либо другой программой, сделав вид, что медиа-клавиши работают напрямую.