Верните ключ в Ctrl и сделайте так, чтобы он отображался как Ctrl во время редактирования текста

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

Короткий рассказ , Right Alt - это клавиша Hangul (меняется между латинскими и корейскими буквами), а Ctrl - Hanja (преобразует между хангульскими и «старыми» корейскими символами). Я хотел использовать несколько макетов - корейский и мой местный (польский) и сохранить лучшее из обоих миров - это означает, что Right Ctrl испускает код клавиатуры для Alt, набирая польский и для Hangul при вводе на корейском языке .

Корейский работал из коробки (поскольку коды клавиш верны), но польские необходимые настройки. Я изменил макет (/usr/share/X11/xkb/symbols/pl), добавив следующие строки в активную секцию xkb_symbols:

key <HNGL> { [ ISO_Level3_Shift ] }; key <HJCV> { [ Control_R ] };

И я прокомментировал строки, связанные с HNGL и HJCV в «inet», так как они переписывали мои изменения.

После этих изменений я получил Ctrl , работая отлично, но по-прежнему возникла проблема с неправильной работой клавиши Ctrl. В целом это работает, но при редактировании текста я должен иметь возможность, например, удалите одно слово, используя комбинацию Alt + Backspace, и я не могу этого сделать.

Я выполнил xset -r 131, чтобы отключить повтор ключа для этого ключа Ctrl / Hanja, но он по-прежнему не работает, как настоящий Ctrl

Вот вывод xev remapped Hanja:

KeyPress event, serial 34, synthetic NO, window 0x1000001, root 0x13f, subw 0x0, time 49086462, (88,89), root:(3928,141), state 0x10, keycode 131 (keysym 0xffe4, Control_R), same_screen YES, XKeysymToKeycode returns keycode: 105 XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False

И вот обычный Ctrl (с другой клавиатуры):

KeyPress event, serial 39, synthetic NO, window 0x1000001, root 0x13f, subw 0x0, time 49144922, (616,377), root:(4456,429), state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False

Есть ли что-нибудь, что я могу изменить, чтобы моя система рассматривала этот ключ как полномасштабный Ctrl?

5
задан 15 May 2018 в 18:00

2 ответа

Назначение ключа другому уникально, когда ключ является модификатором. Этот ответ имеет хорошее объяснение:

Действие, когда оно является действием модификатора, таким как это, изменяет текущее состояние модификатора, которое (просто put) представляет собой набор флагов, записанных в операционной системе, которые записывают какие модификаторы в настоящее время «включены». [Эта запись] влияет на то, к какому действию прилагаются дальнейшие нажатия клавиш.

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

Чтобы продемонстрировать, запустите xmodmap. Обратите внимание, что есть два ключа по умолчанию (Control_L и Control_R), сопоставленные с модификатором управления. Если вы запустите xmodmap -e 'keycode 131 = Control_L', а затем xmodmap, у модификатора управления все равно будет две клавиши, поэтому ваш ключ не будет распознаваться в качестве модификатора.

Чтобы отобразить в качестве модификатора:

Удалить ключ модификатора control

xmodmap -e 'clear control'

Добавить код ключа для ключа Hanja

xmodmap -e 'keycode 131 = Control_L'

Наконец, добавьте модификаторы по умолчанию:

xmodmap -e 'add control = Control_L' xmodmap -e 'add control = Control_R'

Теперь, если вы снова запустите xmodmap, вы заметите, что новый ключ был добавлен для элемента управления модификатором, и он должен работать правильно.

answer является ссылкой на официальные инструкции Arch Linux по переназначению модификаторов клавишами на вашей клавиатуре.

изменить:

для постоянных изменений, добавить к /usr/share/X11/xkb/symbols/pl:

key <HJCV> { [ Control_L ] }; modifier_map Control { Control_L, Control_R, <HJCV> };
2
ответ дан 17 July 2018 в 14:14

Назначение ключа другому уникально, когда ключ является модификатором. Этот ответ имеет хорошее объяснение:

Действие, когда оно является действием модификатора, таким как это, изменяет текущее состояние модификатора, которое (просто put) представляет собой набор флагов, записанных в операционной системе, которые записывают какие модификаторы в настоящее время «включены». [Эта запись] влияет на то, к какому действию прилагаются дальнейшие нажатия клавиш.

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

Чтобы продемонстрировать, запустите xmodmap. Обратите внимание, что есть два ключа по умолчанию (Control_L и Control_R), сопоставленные с модификатором управления. Если вы запустите xmodmap -e 'keycode 131 = Control_L', а затем xmodmap, у модификатора управления все равно будет две клавиши, поэтому ваш ключ не будет распознаваться в качестве модификатора.

Чтобы отобразить в качестве модификатора:

Удалить ключ модификатора control

xmodmap -e 'clear control'

Добавить код ключа для ключа Hanja

xmodmap -e 'keycode 131 = Control_L'

Наконец, добавьте модификаторы по умолчанию:

xmodmap -e 'add control = Control_L' xmodmap -e 'add control = Control_R'

Теперь, если вы снова запустите xmodmap, вы заметите, что новый ключ был добавлен для элемента управления модификатором, и он должен работать правильно.

answer является ссылкой на официальные инструкции Arch Linux по переназначению модификаторов клавишами на вашей клавиатуре.

изменить:

для постоянных изменений, добавить к /usr/share/X11/xkb/symbols/pl:

key <HJCV> { [ Control_L ] }; modifier_map Control { Control_L, Control_R, <HJCV> };
2
ответ дан 20 July 2018 в 14:18
  • 1
    Это действительно работает! Только одно продолжение - выбор схемы клавиатуры сбрасывает настройки xmodmap - есть ли способ запустить сценарий после изменения макета или поместить его в макет xkb? Все инструкции, которые я нашел, предполагают, что я буду использовать только один макет. – user1234567 24 May 2018 в 10:50
  • 2
    Да, я вижу, добавив key <HJCV> { [ Control_L ] }; и modifier_map Control { Control_L, Control_R, <HJCV> }; в /usr/share/X11/xkb/symbols/pl, и отключение / перезагрузка должны исправить это. – jackw11111 24 May 2018 в 12:43

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

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