Как настроить привязки клавиш Super/Windows/mod4 для затмения

Я хотел бы настроить некоторые привязки клавиш в eclipse (3.7.2), включая клавишу (клавиша "windows"), но, похоже, она не поднимает эту клавишу-модификатор, когда я нажимаю ее. Зачем? Что я могу сделать, чтобы он это обнаружил?

3 ответа

В вашем вопросе есть тег "linux", поэтому я предполагаю, что вы используете Linux и X ...

Итак, чтобы использовать Super с Eclipse, сначала вы должны выяснить, есть ли у вас Super, а если нет, то сделать его. В остальном это, вероятно, намного больше, чем вам нужно по теме xmodmap.

Первое, что нужно сделать, это посмотреть, есть ли у вас уже модификатор Super. Запустите "xmodmap -pm", чтобы увидеть, какие у вас есть модификаторы. Вот общий вывод:

$ 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),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

В приведенном выше выводе связка ключей уже сопоставлена ​​с Super с (шестнадцатеричными) кодами клавиш 0x85, 0x86, 0xce и 0xcf. Чтобы увидеть, является ли что-нибудь на вашей клавиатуре одной из этих клавиш (что не всегда так), запустите "xev" в терминале и переместите указатель мыши в окно ввода "xev", в основном белое, и попробуйте разные ключи. Типичный вывод выглядит следующим образом для ключей (попробуйте control и shift, чтобы увидеть примеры) - обратите особое внимание на третью строку с кодом ключа и именем keysym, здесь 64 и Meta_L.

Обязательно попробуйте свой ключ "Windows" тоже, чтобы увидеть, какой код ключа и его отображение в настоящее время.

KeyPress event, serial 42, synthetic NO, window 0xe600003,
    root 0x6b6, subw 0x0, time 2232472454, (-1,167), root:(871,683),
    state 0x0, keycode 64 (keysym 0xffe7, Meta_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

Найдите часть "keycode" и преобразуйте ее в базу 16. Если вы нажмете один из Supers, ваш преобразованный код будет соответствовать одному из (в приведенном выше примере четыре) шестнадцатеричных кодов клавиш и покажет Super_L или Super_R вместо Meta_L показано выше.

Если у вас нет клавиш, сопоставленных с Super, или оказывается, что ни одна из них не существует на вашей клавиатуре, используйте xev, чтобы найти код клавиши, которую вы хотите использовать для Super (CapsLock может быть хорошим выбором для некоторых люди), затем используйте xmodmap или другой инструмент в пользовательском интерфейсе вашего рабочего стола, чтобы настроить его. Последнее выходит за рамки этого ответа, но с помощью xmodmap вы можете просто сделать файл с именем.Xmodmap в вашем домашнем каталоге, добавив в него следующее:

! note: replace the 0xff below with your *actual* Super_L key's keycode.
! note: whether to use mod3 or mod4 depends on your environment.
keycode 0xff = Super_L
clear mod4
add mod4 = Super_L

Примените результаты с помощью "xmodmap ~/.Xmodmap". Многие стартапы X будут автоматически применять их для вас. Если вы используете Ubuntu Unity, найдите Startup Applications в Dash и добавьте одно для этой же команды. Я не уверен, что "~" работает в этом контексте, вы можете попробовать $HOME или просто использовать там свой домашний каталог. В результате получается файл в ~/.config/autostart/xmodmap.desktop, подобный этому (erlkonig = me; вместо этого поместите свой дом):

$ cat ./.config/autostart/xmodmap.desktop
[Desktop Entry]
Type=Application
Exec=/usr/bin/xmodmap /home/erlkonig/.Xmodmap
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=Xmodmap Keymap Settings
Name=Xmodmap Keymap Settings
Comment[en_US]=Set Keyboard Bindings
Comment=Set Keyboard Bindings

Вы можете проверить результаты с помощью "xmodmap -pm" или "xev". Вот вывод для первого для моей среды из более сложной установки (которая, вероятно, не будет соответствовать тому, что вы сами захотите).

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

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x7f)
control     Control_L (0x25)
mod1        Meta_L (0x40),  Meta_L (0xcd)
mod2        Alt_L (0x6c),  Alt_L (0xcc)
mod3        Super_R (0x69),  Super_L (0x85),  Super_R (0x86),  Super_L (0xce)
mod4        Hyper_L (0x42),  Hyper_L (0xcf)
mod5        Num_Lock (0x4d)

Hyper заменяет CapsLock (который я перенес в другое место); Я использую его для функций оконного менеджера, таких как Hyper-f для "переднего" окна, Hyper-r для изменения размера и т. Д.

Для другого случайного (ish) примера того, что вы можете сделать с помощью xmodmap, вот таблица ключей, которая отображает любой код клавиши 78 на Mode_switch, а затем позволяет вам комбинировать его с ', ", ` и ~ для ввода префиксов, которые делают ваш следующий гласный на них есть аналогичный диакритический знак. Вы также можете использовать переключатель Mode_switch с a, чтобы получить æ, d, чтобы получить ð,?, чтобы получить ¿и некоторые другие.

! note: 78 is probably not the keycode most would want here; pick your own :-)
keycode 78 = Mode_switch
!                      no mods shift           mode-switch shift+mode-switch
keysym a          =          a A                        ae AE 
keysym d          =          d D                     thorn THORN
keysym n          =          n N                    ntilde Ntilde
keysym o          =          o O                    oslash Oslash
keysym t          =          t T                       eth ETH
keysym s          =          s S                    ssharp
keysym 0          =          0 parenright           degree     
keysym 6          =          6 asciicircum dead_circumflex
keysym 8          =          8 asterisk           multiply    
keysym apostrophe = apostrophe quotedbl         dead_acute dead_diaeresis
keysym grave      =      grave asciitilde       dead_grave
keysym comma      =      comma less           dead_cedilla guillemotleft
keysym period     =     period greater            NoSymbol guillemotright
keysym slash      =      slash question           NoSymbol questiondown
keysym 1          =          1 exclam             NoSymbol exclamdown
keysym equal      =      equal plus               notequal plusminus

для получения дополнительной информации используйте "man xmodmap".

Eclipse не подключает ключ Windows. Единственное, что вы можете сделать, это использовать инструмент, чтобы привязать ключ окна, например, к CTRL+ALT+SHIFT (если вы его не используете). Такие инструменты, как AutoHotkey, могут сделать эту работу.

Затем, всякий раз, когда вы нажимаете клавишу Windows, это будет выглядеть так, как будто вы нажали CTRL+ALT+SHIFT, которую затем можно использовать для привязки нужных горячих клавиш.

Я подозреваю, что вашей основной целью является создание привязок клавиш в дополнение к существующим элементам управления и привязкам alt. Так, например, пусть Windows-L делает что-то отличное от Control-L, Alt-L или Shift-L.

К сожалению, похоже, что Eclipse в Linux не поддерживает модификаторы, кроме shift, control и alt (который является mod1 в xmodmap). Таким образом, нет дополнительного модификатора для сопоставления ключа Windows. Логичным выбором будет mod4, но, похоже, SWT не поддерживает mod4 на платформах, отличных от Windows.

Существует ошибка для добавления поддержки не-windows mod4 по адресу https://bugs.eclipse.org/bugs/show_bug.cgi?id=55236. К сожалению, он был помечен как "не исправит" некоторое время. Я предлагаю пойти туда и проголосовать за него, а также поделиться дополнительными случаями / причинами повторного открытия пользователями, если они у вас есть.

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