Мне нравится Alt + Left/Right, чтобы переключать вкладки в браузере, но делать то, что они обычно делают в других программах.Большинство браузеров не позволяют вам иметь собственные сочетания клавиш (они почти всегда используют Ctrl + PgUp/PgDn, что на моей клавиатуре — Ctrl + Fn + Up/Down), поэтому я застрял с решением на уровне ОС: связать Alt + Left/ Правильно делать Ctrl+PgUp/PgDn, если текущим окном является браузер, и быть самим собой в противном случае. В X11 я добился этого с помощью AutoKey, но мне нужно решение, которое работает в Wayland. Вот где я нахожусь, сопоставитель ключей не разрешает команды bash, Хоук может сработает (не пробовал) КМонад недостаточно гибок со сценариями Bash, wtype и йдотул у меня не сработало, но сработало evemu-event (я нашел здесь), я могу получить текущее имя окна, используя
вызов gdbus \
--сессия \
--dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--метод org.gnome.Shell.Eval "
Глобальный
.get_window_actors()
.map(a=>a.meta_window)
.find(w=>w.has_focus())
.get_wm_class()" \
| вырезать -d'"' -f 2
который я нашел из здесь. Это означает, что я могу сделать этот скрипт
#!/бин/баш
#setsid --fork gnome-терминал
# Проверяет, является ли текущее окно Google Chrome (может быть адаптировано для Firefox)
# и если это так, то отправляет клавишу Ctrl + PgUp (перемещает фокус вкладки на одну вкладку влево)
# Предполагается, что он будет вызываться системой управления ключами (например, KMonad) при нажатии Alt + Left
# Вот как я имитирую нажатия клавиш
# Взято отсюда: https://unix.stackexchange.com/questions/381831/keyboard-emulation-in-wayland
# Требуется sudo apt для установки evemu-tools
функция type_key() {
EVDEVICE=/dev/input/event4
# нажимайте клавиши вниз в последовательном порядке
для ключа в $@; делать
evemu-event $EVDEVICE --type EV_KEY --code KEY_$key --value 1 --sync
сделано
# поднимаем клавиши вверх по порядку
for (( idx=${#@}; idx>0; idx-- )); делать
evemu-event $EVDEVICE --type EV_KEY --code KEY_${!idx} --value 0 --sync
сделано
}
# Также загляните на https://github.com/sezanzeb/key-mapper, он не может выполнять команды bash, но в остальном
# выглядит довольно хорошо для этого материала
# Я не знаю способа получить имя окна в Wayland, я могу сделать это, если мы в Gnome
# Взято отсюда: https://unix.stackexchange.com/questions/399753/how-to-get-a-list-of-active-windows-when-using-wayland
WINDOW_CLASS=$(вызов gdbus \
--сессия \
--dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--метод org.gnome.Shell.Eval "
Глобальный
.get_window_actors()
.map(a=>a.meta_window)
.find(w=>w.has_focus())
.get_wm_class()" \
| вырезать -д'"' -ф 2)
# Используйте «Google-chrome» для Chrome и «firefox» для Firefox
if [[ "$WINDOW_CLASS" = "терминальный-сервер gnome" ]] || [[ "$WINDOW_CLASS" = "Google-chrome" ]] || [[ "$WINDOW_CLASS" = "фаерфокс" ]]
тогда
type_key RIGHTCTRL PAGEUP
еще
type_key ВПРАВО ВЛЕВО
фи
# Проверьте менеджер веб-приложений
# https://ubuntuhandbook.org/index.php/2021/01/install-linux-mints-web-app-manager-ubuntu-20-04/
и используйте «Настройки Gnome» -> «Сочетания клавиш» -> «Пользовательские сочетания клавиш» -> +, чтобы привязать Alt + Left к приведенному выше скрипту (для этого требуется дать скрипту «sudo pass», как это сделано здесь). Однако, хотя скрипт переключает вкладки при выполнении из терминала Gnome, он не переключает вкладки в Google Chrome (возможно, это проблема evmu-event, возможно, эта альтернатива сработает). эвскрипт?) и не переключает вкладки при вызове с помощью глобальной комбинации клавиш Gnome set Alt + Left.
Любые идеи о том, как я могу заставить это работать? Я хотел бы не устанавливать еще одну программу, такую как KMonad, чтобы заставить работать глобальную привязку, но нищие не могут выбирать. Самым идеальным был бы способ отправки нажатий клавиш из GJS, чтобы все это можно было сделать из одного чистого скрипта GJS.
Версия гнома: GNOME Shell 3.38.4
Я использую Material Shell, если это уместно.