Как изменить привязки клавиш на основе того, какое окно сфокусировано?

У меня есть эти строки в моей конфигурации i3 прямо сейчас:

# Play/pause, prev, next bindcode 172 exec "/opt/playerctl/bin/playerctl play-pause" bindcode 173 exec "/opt/playerctl/bin/playerctl previous" bindcode 171 exec "/opt/playerctl/bin/playerctl next" 

Это приводит к тому, что кнопки мультимедиа на моей клавиатуре воспроизводят / приостанавливают аудиоплееры, поддерживаемые playerctl, например Spotify.

Проблема в том, что кнопка воспроизведения / паузы теперь больше не работает в моем видеопроигрывателе (SMPlayer).

Возможно ли, чтобы привязки клавиш вступили в силу только тогда, когда сфокусированное окно не является SMPlayer?


Подводя итог тому, что я пытаюсь сделать: я хочу, чтобы привязки клавиш выше всегда действовали, за исключением того, когда сфокусировано окно SMPlayer (класс: «Smplayer»).

Это возможно?

  • i3 Window Manager не разрешает полноэкранное видео на двух мониторах
  • nohup cmd & in i3
  • Пользовательское разрешение XRDP (Fedora 19)
  • Убить все окна в рабочей области в i3
  • Заставить LibreOffice использовать интеграцию Kde?
  • i3 и vmware: как определить изменение разрешения и установить текущее разрешение на новое изменение смены?
  • Firefox на i3 - все иероглифы
  • Проблемы с X и xrandr на Debian
  • One Solution collect form web for “Как изменить привязки клавиш на основе того, какое окно сфокусировано?”

    Вы можете попробовать это. Не забудьте заменить username своим реальным именем пользователя Linux в следующем. По какой-то причине использование ~ вместо home/username не сработало для меня.

    Используйте эти строки в конфигурации i3:

     # Play/pause, prev, next bindcode 172 exec /home/username/.i3/play.sh play-pause bindcode 173 exec /home/username/.i3/play.sh previous bindcode 171 exec /home/username/.i3/play.sh next 

    Вставьте следующее в файл с именем /home/username/.i3/play.sh

     cmd="$1" id=$(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}') curr_title=$(xprop -id $id | awk '/_NET_WM_NAME/{$1=$2="";print}' | cut -d'"' -f2) if [[ "$curr_title" != "SMPlayer"* ]]; then /opt/playerctl/bin/playerctl "$cmd" fi 

    Возможно, вам придется отрегулировать часть «SMPlayer» * в зависимости от точного названия, которое имеет окно – у меня нет опыта работы с этой программой. Вы можете добавить предложение else для запуска другой программы, когда SMPlayer запущен, если хотите.

    Надеюсь это поможет.

    Interesting Posts

    Плохая замена, пытающаяся переименовать расширение

    Пользователи chroot ssh в домашнюю директорию

    Являются ли протоколы уровня 2 частью драйвера устройства NIC или NIC в ядре?

    Как поделиться экраном между Centos 7 и Ubuntu 14?

    centos: ping6 неизвестный хозяин

    Почему существует множество систем BSD, но только одно ядро ​​Linux?

    Как передать вывод одной команды в качестве аргумента командной строки другому?

    Откройте файл с программой по умолчанию и подождите, пока приложение не будет завершено

    Как я мог перевернуть содержимое двоичного файла с помощью команд bash

    Вход SSH через IPv6 успешно, при использовании IPv4 для одного и того же хоста дает «Разрешение отказано»,

    Блокирование HTTP-содержимого gzip с помощью Iptables или Snort?

    Сортировка jpg в соответствии с датой создания и конвертирование в одиночный pdf

    Параметры dd-стиля для сценария bash

    Как изолировать порты на маршрутизаторе с частными vlans и ebtables?

    Debian не работает.

    Linux и Unix - лучшая ОС в мире.