LINUX.ORG.RU

Не могу разобраться xmodmap

 


0

1

В документации указана очередность модификаторов

  1. Key
  2. Shift+Key
  3. Mode_switch+Key
  4. Mode_switch+Shift+Key
  5. ISO_Level3_Shift+Key
  6. ISO_Level3_Shift+Shift+Key

т.е. если

# xmodmap -pke

...
keycode 57 = n N Cyrillic_te Cyrillic_TE
...

и

# xmodmap -pm

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x94)
mod3      
mod4        Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  ISO_Level3_Shift (0x6c), Mode_switch (0x85),  Mode_switch (0xcb)

Как понять в какую позицию (keycode 57 = ...) следует вписать символ, так что бы вывелся с заданным модификатором (например - control)?

И как понять какой модификатор за какую позицию отвечает?

Потому как (см. выше):

keycode 57 = 
n           - key
N           - shift + key
Cyrillic_te - mod5 + key
Cyrillic_TE - mod5 + shift + key

выходит очень странная последовательность как мне кажется, после shift идет сразу mod5, а где mod1, mod2 ит.д.?



Последнее исправление: lintiay (всего исправлений: 6)

выходит очень странная последовательность как мне кажется, после shift идет сразу mod5, а где mod1, mod2 ит.д.?

Ничего странного в последовательности нет. Вначале идут printable characters, затем всё остальное.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Вы не могли бы пояснить, потому, что я ничего не понимаю.

Под словом «printable characters», что вы понимаете? Ведь в любую позицию я могу установить «printable characters» и тогда в любой позиции они будут «printable»

например:

keycode 57 = n N т Т n N n N n N n N n N n N n N n N n N ...

В доке которую привел выше обозначены лишь модификаторы shift и mod5, а с остальным как быть? Например control, он меня больше всего интересует.

lintiay
() автор топика

Нашел некоторое описание, не знаю на сколько оно верно для моего случая:


keycode <x> = <1> <2> <3> <4> <5> <6> <7> <8>
                \   \   \   \   \   \   \  \-> - 
                 \   \   \   \   \   \   \---> Num_Lock + Mode_switch + key
                  \   \   \   \   \   \------> -
                   \   \   \   \   \---------> Num_Lock + key
                    \   \   \   \------------> Shift + Mode_switch + key
                     \   \   \---------------> Mode_switch + key   
                      \   \------------------> Shift + key
                       \---------------------> key

Но тут опять ни слова про модификатор Control и что еще хуже, для общей картины, которая у меня и так не складывается, так это то, что все привязки идут не к модификаторам (shift, control, lock, mod1-5), а к кейсимам.

Надеюсь, что кто нибудь сможет прояснить ситуацию

lintiay
() автор топика
Ответ на: комментарий от lintiay

Под словом «printable characters», что вы понимаете?

То и понимаю.

В доке которую привел выше обозначены лишь модификаторы shift и mod5, а с остальным как быть?

Никак, xmodmap не про это.

Например control, он меня больше всего интересует.

xmodmap позволяет переназначить кнопку, не более. Если нужно назначить какое-то действие, то стоит обратить на другие утилиты, например sxhkd. Control не используется для печатных (и непечатных, если это управляющие последовательности) символов, потому его нельзя назначить наравне с Shift и ISO_Next_Group (Alt, в случае с tty).

<6> -

<8> -

Чётные — это с Shift, и это можно логически понять из предшествующей последовательности.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

sxhkd что-то экзотическое, внятных примеров использования в гугле не нашел.

ISO_Next_Group - the active keyboard layout (не уверен, что переведу аутентично) это не кнопка, то что ее вызывает Alt, всего лишь частный случай. У меня например Alt+Shift, может быть.

Не хочется верить, что xmodmap тут бессилен, но похоже вынужден с вами согласиться.

Вероятно в данном случае подошел бы xkbcomp, но с ним к сожалению не знаком. Если подскажете как его использовать что-бы забиндить на сочетание Ctrl+N клавишу Down, буду весьма признателен.

lintiay
() автор топика
Ответ на: комментарий от lintiay

это не кнопка

Какая разница? Религия запрещает поставить на одну кнопку (на CapsLock используется многими)? Хоть на три ставь.

то что ее вызывает Alt, всего лишь частный случай

Нет, это никак не переназначить в tty (можно перемапить Alt, но не его назначение). А про Alt я писал именно в контексте tty.

sxhkd что-то экзотическое, внятных примеров использования в гугле не нашел.

Это для назначения внешних команд (например вызов эмулятора терминала или изменение громкости), а не для переназначения поведения XKB. Упомянул, так как не понял сути вопроса.

в данном случае

В каком данном случае? Какова цель?

с ним к сожалению не знаком

Или к счастью. XKB — это наркомания, равных которой ещё поискать.

что-бы забиндить на сочетание Ctrl+N клавишу Down

С этого и надо было начинать. Это невозможно реализовать через xmodmap, и xcape, но легко реализуется через связку sxhkd+xdotool:

control + n
	echo 'key --clearmodifiers Down' | xdotool -

Но, естественно, это сочетание станет везде работать так, назначения в приложениях не будут срабатывать, так как перехватывать эту комбинацию будет sxhkd.

mord0d ★★★★★
()
Ответ на: комментарий от anonymous

Опробовал ваше решение (sxhkd+xdotool), как и предполагал оно не работает, по крайней мере в моем случае.

Клавиши срабатывают через раз с пропусками и задержками. Мне хочется такой же работы как (нативно) от кнопки Down.

Раньше пробовал:

  • xbindkeys+xdotool/xte
  • i3(bindsym)+xdotool/xte
  • теперь еще sxhkd.

мне доводилось пробовать такой конфиг для xmodmap:

keycode 64 =  Mode_switch
keysym n = n N Down Down
keysym p = p P Up Up

все работает как надо, но тогда страдает кирилическая раскладка. По этой причине не подошло.

lintiay
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.