Автоматизация нажатий в i3
Обычно я слушаю музыку на саундклауде. Я часто жму на вкладку Discover и просто слушаю, что саундклауд мне подбирает. Иногда задним числом я замечаю годную песню и хочу поставить лайк. Для этого мне приходится:
- Отвлечься от текущего дела.
- Переключиться на окно с браузером с саундклаудом. Он обычно в отдельном рабочем столе, и там ничего больше нет.
- Нажать на кнопку лайка.
- Вернуться обратно.
- Продолжить дело.
Это всё кошмарно! Я некоторое время страдал, но сегодня я решил решить эту проблему и ставить лайк просто по нажатию горячей клавиши.
Сначала подумал написать расширение для браузера. Оказывается, в моём любимом
qutebrowser
е нет их поддержки. Идём дальше.
Подумал написать приложение, используя Soundcloud API. Полистал, что мне предлагают разработчики саундклауда. Всё классно. Но эти жмоты закрыли регистрацию новых приложений из-за «большого количества запросов, мы не справляемся, поймите, пожалуйста». Обидно.
Цивилизованные методы кончились. Переходим к магии линукса.
Решил сделать так: по нажатию горячей клавиши запускается скрипт на баше. В конфиге i3 добавил строчку:
bindsym $mod+m exec ~/bin/soundcloud-like-current-track
Быстрый гуглинг подсказал как автоматизировать движения мыши, этим занимается
программа xdotool
. Скорее всего, она уже есть на компьютере анонимного
читателя.
Надо узнать координаты кнопки лайка. Переходим к окну и наводим мышь. В терминале пишем:
xdotool getmouselocation
Запоминаем координаты, именно туда будет жать скрипт.
Теперь переходим к программе. Сначала надо запомнить, какой рабочий стол используется сейчас и где именно сейчас находится мышь:
active_i3_ws=$(i3-msg -t get_workspaces\
| jq '.[] | select(.focused==true).name'\
| cut -d"\"" -f2)
eval $(xdotool getmouselocation --shell)
Программу jq
мне пришлось установить отдельно, она есть в репозиториях арча.
Теперь переключаемся на рабочий стол с браузером, двигаем мышь и жмём на кнопку, те два числа — мои координаты:
i3-msg 'workspace 10'
xdotool mousemove 1537 1036 click 1
Теперь возвращаем всё как было:
xdotool mousemove $X $Y
i3-msg "workspace $active_i3_ws"
Программа готова.
Полный текст программы с комментариями. Чтобы установить, надо скопировать
текст и вставить в любой текстовый файл и сделать его исполняемым
(chmod +x имя_файла
).
#!/usr/bin/bash
# Press like button on currently playing Soundcloud track.
# © 2018 Timur Ismagilov
# Save current workspace to return to later.
active_i3_ws=$(i3-msg -t get_workspaces\
| jq '.[] | select(.focused==true).name'\
| cut -d"\"" -f2)
# Save current mouse location. This eval construct is needed, but idk why.
eval $(xdotool getmouselocation --shell)
# Press the like button.
i3-msg 'workspace 10'
xdotool mousemove 1537 1036 click 1
# Return back.
xdotool mousemove $X $Y
i3-msg "workspace $active_i3_ws"
По аналогии с этой программой можно написать программы для нажатия на кнопки следующего/предыдущего трека, перемешивания и так далее. Займусь этим как-нибудь.
Теперь мне не нужно отвлекаться, чтобы поставить лайк.
Обновление: в итоге я не пользуюсь этой программой, я вручную перехожу на вкладку саундклауда и ставлю лайк. С i3 я успел перейти на dwm, но теперь это неактуально, ведь у меня сейчас вообще мак ОС.