Переопределить ключевые события модификатора, которые должны быть доставлены в приложение

Одно кроссплатформенное приложение на моей машине с Ubuntu использует клавиши-модификаторы для выполнения определенных функций. Однако везде, где Alt используется для выполнения этих функций в Windows и Mac, разработчики решили, что вместо Linux требуется мета-ключ.

Я не знаю, почему это решение было принято - я надеюсь, что для этого была законная причина - но это невероятно раздражает, потому что мета-ключ используется для ярлыков оконного менеджера в Ubuntu, поэтому ключевые события никогда не доходят до рассматриваемого приложения. Например, если выбор лассо требует удержания Alt при перетаскивании мыши в Windows и Mac, удерживание Meta при перетаскивании мыши в Ubuntu просто перемещает само окно приложения на экране.

Я абсолютно не хочу хотеть менять все ярлыки оконного менеджера только для того, чтобы я мог использовать эту программу, и, насколько мне известно, я не могу изменить требование мета-ключа в самом приложении. , То, что я хотел бы сделать, это перехватить ключевое событие непосредственно перед его доставкой в ​​приложение - таким образом, я могу нажать Alt, и приложение получит вместо этого сообщение с мета-кодом.

Чтобы избежать путаницы, я не хочу делать следующее:

  • Заставить клавишу Alt вести себя как мета-клавиша на уровне клавиатуры / системы. , Это просто оставило бы меня с той же проблемой, поскольку оконный менеджер и приложение теперь вместо этого отвечали бы на клавишу Alt.

  • Изменить зависимость оконного менеджера от мета-ключа. Мне нравятся ярлыки на основе Meta, и я хочу продолжать использовать их во всех случаях.

Идеальное решение, о котором я думаю, было бы примерно таким:

  • Я нажимаю (или возвращаю) клавишу Alt.
  • Ключевое событие обрабатывается как обычно, однако X11 любит делать свое дело. Если любые существующие ярлыки используют Alt и имеют приоритет над окном приложения, они будут работать как обычно.
  • Определено, что ключевое сообщение должно быть направлено на приложение, которое в данный момент находится в фокусе.
  • Если это приложение, которое я указываю, а код ключа сообщения ключа - это Alt, код изменяется на Meta.
  • Сообщение отправляется в приложение.

По сути, я просто хочу иметь возможность использовать мой ключ Alt там, где я привык использовать его в этом приложении! Других наблюдаемых эффектов не должно быть: клавиша Alt должна функционировать как обычно во всех других случаях / приложениях.

Я пытался использовать AutoKey - однако предполагается, что ваши комбинации горячих клавиш не будут основаны исключительно на клавише-модификаторе, поэтому он не позволит мне связать что-либо только с Alt. Я точно знаю, что xev подхватывает событие Alt key.

Есть ли способ, как я могу выполнить этот тип сопоставления клавиш?

0
задан 29 September 2018 в 18:13

1 ответ

Довольно сложно изменить события в одном окне. Одна из альтернатив - запустить отдельный сервер X11, на котором работает только ваше приложение. Затем вы можете использовать xmodmap или подобное для изменения раскладок клавиатуры для этого сервера, то есть только для этого приложения. Xnest запускает отдельный сервер в окне. Попробуйте поиграть с чем-то вроде

Xnest :1 -noreset &
DISPLAY=:1 xmodmap -e 'keysym a = b B b B'
DISPLAY=:1 xev -event keyboard  

. Поместите мышь в окно xev и введите «a», и оно появится как событие KeyPress с keysym b.

0
ответ дан 29 September 2018 в 18:13

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

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