Запретить xbindkeys работать в терминале

Я пытаюсь реализовать привязки клавиш Emacs в моем браузере.
В настоящее время у меня есть .xbindkeysrc и этот аккорд

"if [[ "$(xdotool getwindowfocus getwindowname)" =~ "Chrome" ]]; then xdotool key --window "$(xdotool getactivewindow)" Left; fi"                                                                 
  control+b

Он хорошо работает в Chrome, если я нажму ctrl + b , курсор переместится назад, но затем у меня будет странный эффект: я могу ' Я больше не использую ctrl + b в моем терминале (Терминал Gnome).
Кроме того, я не знаю, почему это происходит, есть ли способ предотвратить блокировку ключей xbindkeys в определенной программе?
Если нет, думаете ли вы о другом способе решения этой проблемы?

Заранее спасибо.


Дополнительные примечания :

  • Не только ключ заблокирован в Терминале Gnome , но также в rxvt и xterm . И если я удалю условную часть и наберу только
"xdotool key --window "$(xdotool getactivewindow)" Left"
  control+b

, аккорд все равно будет заблокирован в терминалах (и даже в Gedit), когда я ожидаю, что это сработает. Это меня действительно смущает.

  • Я также пробовал xmodmap , но таблица keyyms не включает управляющий ключ, тогда это невозможно. Я все еще пытаюсь заставить его работать, используя xbindkeys и xdotool , если бы вы могли мне помочь, я был бы очень признателен.

  • Проблема, похоже, связана с Xorg , потому что попытка того же сценария в контексте Wayland работает.

2
задан 20 December 2019 в 03:00

1 ответ

Если вас интересует этот вопрос, вот как я наконец это сделаю.

Вместо того, чтобы напрямую включать условную часть в .xbindkeysrc , я сделал отдельный сценарий, который будет зацикливаться достаточно быстро, чтобы запустить или убить демон xbindkey

#!/usr/bin/sh

while true
do
    if [[ "$(xdotool getwindowfocus getwindowname)" =~ "Chrome" ]]
    then
        xbindkeys 2>/dev/null
    else
        killall xbindkeys 2>/dev/null
    fi
    sleep 0.5
done

Затем в моем .xbindkeysrc Я пишу все аккорды Emacs.
А еще я использую systemd для запуска скрипта при запуске.

Надеюсь, это вам помогло.

0
ответ дан 24 December 2019 в 11:35

Другие вопросы по тегам:

Похожие вопросы: