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

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

  • Можно ли сопоставить что-то с Ctrl + Shift в i3?
  • Как показать время UTC в панели i3status?
  • Откройте специальное приложение в рабочей области * new * с i3wm
  • Укажите mute / unmute с помощью i3status
  • Сдвижная анимация рабочей области в i3
  • Как масштабировать оконный менеджер i3 для моего дисплея HiDPI?
  • Проблема в том, что кнопка воспроизведения / паузы теперь больше не работает в моем видеопроигрывателе (SMPlayer).

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


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

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

  • i3wm: Как перемещать окна между мониторами?
  • Не удается выйти из i3, потому что не установлен разумный эмулятор терминала
  • Как сбросить настройки запуска приложения dmenu в i3
  • Как я начинаю начинать с tmux?
  • Проблемы с X и xrandr на Debian
  • Возможно ли «i3-msg focus <direction>» не обертываться, когда в данном направлении нет окна
  • 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 запущен, если хотите.

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

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