С Autokey
[Это не совсем ответ на вопрос (как остановить бесконечные циклы между xdotool и i3), но это более гибкая альтернатива, чем i3 bindsym [class="firefox"]
Подход, если вам нужно выполнить больше логи c, которые могут отправить исходный ключ. Если вы знаете, что никогда не отправите оригинальный ключ, ответ @ meuh будет проще, и это то, что я сейчас использую.]
Добавьте новый скрипт в autokey. Чтобы полностью отключить ключ, оставьте скрипт пустым. Чтобы отправить Ctrl + C, достаточно просто:
# Send Ctrl-C instead of Ctrl-Shift-C
keyboard.send_keys('<ctrl>+c')
Установить горячую клавишу на <ctrl>+<shift>+c
и фильтр окна соответствующим образом. В моем случае Navigator.firefox
- это то, что он обнаружил с помощью встроенного инструмента.
Вот и все.
Вы можете добавить logi c к этому сценарию для отправки различных ключей, включая оригинальный ключ , (или ничего) к программе по мере необходимости.
с i3 / xdotool
Если вы никогда не отправите тот же ключ, что и триггер, и вы всегда Если вы хотите отправить тот же ключ замены, вы должны использовать ответ @ meuh. Вы также можете вызвать скрипт для отправки ключа, если требуемый ключ может отличаться (например, Ctrl + C in Firefox или Alt + C в какой-то другой программе).
Критически, как и в ответе @ meuh, вы используете фильтр class
, чтобы не вызывать скрипт в любой момент, когда вы отправляете оригинал ключ. Это регулярное выражение, поэтому вы можете иметь несколько фильтров:
# i3/config
bindsym --release Control+Shift+c [class="(firefox|other_prog)"] exec ~/myscript.sh
Сам скрипт в основном такой же, как в вопросе, но он никогда не сможет вызвать send_key ctrl+shift+c
, иначе он будет oop. Вы можете отправить любой другой ключ (если только вы не зацикливаетесь на странном аттракторе нескольких скриптов, но это ваша проблема!)