Как настроить привязки клавиш 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. К сожалению, он был помечен как "не исправит" некоторое время. Я предлагаю пойти туда и проголосовать за него, а также поделиться дополнительными случаями / причинами повторного открытия пользователями, если они у вас есть.