Великолепные интегрированные среды разработки JetBrains (IDEA и др.) Назначают практически все возможные сочетания клавиш для какой-либо функции. Несмотря на то, что время от времени это подавляет, оно также способствует эффективному использованию.
Моя проблема в том, что Unity также назначает некоторые из этих ярлыков, и они имеют приоритет. Один особенно раздражающий пример - CTRL+ ALT+ L. Проблема была исследована ранее здесь .
Однако ни один из подходов не является удовлетворительным.
- Отключение системных ярлыков в глобальном масштабе снижает общую производительность системы.
- Переключение на другую раскладку клавиш в IDEA будет чертовски неприятным для меня, когда я разрабатываю на разных платформах (и приходится выбирать разные сопоставления).
Есть ли способ отключить системные ярлыки только тогда, когда определенное приложение активно, то есть работает и в фокусе?
Я бы хотел запускать скрипт каждый раз, когда запускаю приложение.
unity
shortcut-keys
intellij
Рафаэль
источник
источник
Ответы:
Как автоматически отключить несколько (определенных) ярлыков, если (и пока) активно окно определенного приложения
Приведенный ниже скрипт отключит определенные сочетания клавиш, когда окно произвольного приложения активно.
Хотя вы упомянули: « Я бы хотел запускать сценарий каждый раз, когда запускаю приложение.» , Нет причин для того, чтобы впоследствии убивать сценарий, он очень мал.
Сценарий
Как пользоваться
Скрипт нуждается в
xdotool
:Скопируйте скрипт в пустой файл, сохраните его как
disable_shortcuts.py
В заголовке скрипта заменить в строке:
"gedit" вашим приложением, что означает: имя процесса, которому принадлежит окно.
Протестируйте скрипт с помощью команды:
Если все работает нормально, добавьте его в Startup Applications: Dash> Startup Applications> Add. Добавьте команду:
Добавление нескольких ярлыков для отключения
В качестве примера я добавил ярлык, который вы упомянули: CTRL+ ALT+ L. Ярлыки устанавливаются в
dconf
базе данных и могут быть установлены или отключены с помощьюgsettings
.В скрипте эти
gsettings
записи задаются в функции:setkeys()
Пример добавления (отключения) ярлыка выхода из системы:
dconf watch /
Переустановите ярлык на себя. В терминале вы можете увидеть
gsettings
ключ, который принадлежит ярлыку:Теперь мы должны добавить найденный ключ (в несколько ином виде):
... к списку "ключей" в нашей функции:
Теперь CTRL+ ALT+ Lи CTRL+ ALT+ Deleteотключены, если ваше приложение находится впереди.
объяснение
Как уже упоминалось, ярлыки, как те, которые вы упоминаете, устанавливаются в
dconf
базе данных. В примере CTRL+ ALT+ Lключ для установки или редактирования ярлыка:Чтобы отключить ключ, команда:
Чтобы сбросить ключ к его значению по умолчанию:
Сценарий выглядит один раз в секунду, если:
снова (только), если это так, он отключает ярлыки, перечисленные в
... в ожидании следующего изменения в состоянии.
Если активное окно больше не является вашим приложением, ключи, указанные в списке, сбрасываются на значения по умолчанию.
Запись
Как уже упоминалось ранее, дополнительная нагрузка на процессор сценария ничтожна. Вы можете очень хорошо запустить его при запуске, как описано в разделе «Как использовать».
Влияние на несколько приложений
Как обсуждалось в комментариях, в конкретном случае OP полезно применять ярлыки отключения для группы приложений, все они находятся в одном каталоге.
Ниже версия, чтобы применить это ко всем приложениям, выход которых
будет включать в себя определенный каталог. В моем примере я установил
/opt
каталог, поэтому, если активное окно является одним из приложений/opt
, установленные ярлыки будут отключены.перенос окна одного из приложений в / opt на передний план отключит ярлык выхода из системы
повторное включение ярлыка, если другое окно получает фокус
Сценарий
Как пользоваться
Как и первый скрипт,
xdotool
необходимо установить:Скопируйте скрипт в пустой файл, сохраните его как
disable_shortcuts.py
В заголовке скрипта заменить в строке:
"/ opt" в каталоге, в котором находятся ваши приложения.
Протестируйте скрипт с помощью команды:
Если все работает нормально, добавьте его в Startup Applications: Dash> Startup Applications> Add. Добавьте команду:
Добавление других ярлыков в список работает точно так же, как в версии 1 скрипта.
Это работает на всех приложениях?
В своем ответе вы упоминаете:
Окна с pid 0 (например, окна tkinter, включая Idle) не имеют идентификатора окна в выводе
xprop -id
.Idle
не имеет никаких конфликтующих сочетаний клавиш, хотя по моему опыту. Если вы запустили какое-либо приложение с pid 0, которое потребовало бы отключения определенных ярлыков, пожалуйста, укажите.В этом случае возможным побегом будет преобразовать вывод
в шестнадцатеричный формат
wmctrl
использует формат , а затем ищет соответствующиеpid
в выходных данныхХотя с самого начала это казалось наиболее очевидным, я не использовал его в сценарии, чтобы максимально облегчить его выполнение.
источник
Основываясь на (более старой версии) ответа Якоба Влейма, я написал эту версию, которая решает следующие дополнительные проблемы:
Ручки(Это может быть не проблема.)gsettings
иdconf
ярлыки.Открытые проблемы:
xprop
не показывает PID для всех окон. В противном случае примерstopwatch
. (У Жако Влейма есть некоторые идеи .)Примечания:
gsettings
соотв.dconf
,gsettings
Клавиши же появляются ,dconf
но сделанные изменения не имеют никакого эффекта. Как правило, добавляйте ключи, найденные с использованием метода Джейкоба, какgsettings
и те, которые вы должны были вручную отследитьdconf
как таковые.источник
dconf
не следует использовать, еслиgsettings
доступно, что имеет место во всех ярлыках, которые вы упоминаете.gsettings
защищает согласованностьdconf
базы данных. Проблема использовала «» для перечисленных значений. исправлено в ответе.gsettings
. Я оставляю код как есть, но пользователи могут предпочестьgsettings
формат.