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

У меня есть эти строки в моей конфигурации 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»).

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

  • Почему мой процессор перегревается, когда я использую i3wm?
  • i3wm: два монитора, один браузер на монитор (двойной главный киоск)
  • nohup cmd & in i3
  • Пользовательское разрешение XRDP (Fedora 19)
  • Linux, compton, имеют только одно конкретное окно, прозрачное
  • NetworkManager не автоматически подключается к Wi-Fi при входе в систему
  • i3 dmenu не просматривает $ PATH
  • Меню i3 xterm (ctrl + mouse) слишком маленькое
  • 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

    udev power_supply правила не запускают

    Как мне сохранить параметры команды от нарушения других сценариев, выполняемых в моей команде?

    Мой сервер постоянно атакуется

    Как определить среду рабочего стола в сценарии bash?

    флаг расширения параметра zsh (P) с ассоциативными массивами

    По умолчанию опции DOCS, NLS и EXAMPLES отключены для всех портов FreeBSD

    Расшифровать второй зашифрованный LVM во время загрузки безглавых серверов?

    Проблема с пониманием привязок ключей

    Зачем нужны драйверы как для x-сервера, так и для ядра Linux?

    bash 4.3 "множественные точки" команды терпят неудачу молча

    vi создание файлов подкачки перед созданием нового файла

    Sed: поиск и замена паттенов специальными символами, которые имеют произвольную строку между

    sed после матча и перед следующим матчем

    Как извлечь определенные файлы из tar.gz

    Не удалось найти документы на iPad-устройстве при установке

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