Как заставить Control-j работать как Возврат без установленного бита управления (!), Используя xkb [и | или] xmodmap

948
Vasily

Мне кажется очень удобным использовать Control-j вместо Return в xterm и vim, и я хочу использовать эту последовательность для всех приложений X.

Это можно легко сделать с помощью xkb, переназначив ISO_Level5_Shift на клавишу Control и установив Return как символ 5-го уровня для клавиши j, но после этого все другие комбинации Control в vim и xterm перестают работать (потому что xterm и vim не могут понять Мод ключей), и это абсолютно недопустимо.

Мне удалось сделать это без переназначения ISO_Level5_Shift, используя тип ключа «LOCAL_EIGHT_LEVEL» в разделе xkb_symbols, который использует Control (вместо ISO_Level5_Shift) в качестве модификатора Level5:

 key <AC07> { [ j, J, plusminus, NoSymbol, Return ], type[Group1]= "LOCAL_EIGHT_LEVEL" }; 

Проблема этого решения - xkb устанавливает бит управления, а Control-j возвращает Control-Return вместо просто Return. Иногда (довольно часто, кстати) эта комбинация не работает как Return.

Итак, мне нужно изменить одно из этих решений, чтобы сбросить бит управления для комбинаций Control-j.

По этой ссылке: Arch Wiki статьи про XKB это можно сделать, но я не знаю, как это сделать. Итак, это мой вопрос.

Может быть, мне нужно добавить какое-нибудь правило xkb_compatibility для Return + Control или что-то в этом роде, или добавить несколько отображений xmodmap - любые решения приветствуются.

4

1 ответ на вопрос

5
Vasily

I've found solution for my question. You can assign an action for each key inside xkb_symbols section. Redirect is an action we need:

key <AC07> { [ j, J, plusminus, NoSymbol, NoSymbol ], type[Group1]="EIGHT_LEVEL_SEMIALPHABETIC", actions = [ NoAction(), NoAction(), NoAction(), NoAction(), Redirect(key=<RTRN>, clearmods=all) ] }; 

Using this action you can clear existing modifiers or add new.

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