Сегодня будет не очень программистская тема, но все же весьма и весьма гиковая.

Скажите, вы любите слушать музыку? Я вот очень, я слушаю ее весьма часто, если не сказать постоянно. В разные моменты своего жизненного пути я пользовался разными сервисами. Пока что я остановился на Яндекс.Музыке и довольно часто мне бывает нужно поставить ее на паузу или переключиться на следующий трек. На клавиатуре красуются клавиши “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”?>

‘Media Prev,Play,Pause’ to ‘All modifiers + F7,F8,F9’ private.modify_media KeyToKey ConsumerKeyCode::MUSIC_PREV, KeyCode::F7, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L | ModifierFlag::OPTION_L | ModifierFlag::COMMAND_L KeyToKey ConsumerKeyCode::MUSIC_PLAY, KeyCode::F8, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L | ModifierFlag::OPTION_L | ModifierFlag::COMMAND_L KeyToKey ConsumerKeyCode::MUSIC_NEXT, KeyCode::F9, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L | ModifierFlag::OPTION_L | ModifierFlag::COMMAND_L {% endhighlight %}

Что мы здесь можем видеть? А здесь как раз и есть заветное переназначение медиа-клавиш на комбинации, которые мы навесили в 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. А столь страшные комбинации были использованы как раз для того, чтобы избежать пересечения с какой-либо другой программой, сделав вид, что медиа-клавиши работают напрямую.