如何为eclipse设置Super / Windows / mod4键绑定

时间:2012-07-10 20:11:37

标签: linux eclipse keyboard-events xmodmap windows-key

我想在eclipse(3.7.2)中设置一些涉及密钥的键绑定(" windows" key),但它似乎没有拿起那个修饰符当我按下它时键。为什么?我能做什么才能检测到它?

3 个答案:

答案 0 :(得分:1)

Eclipse不会挂钩Windows密钥。您唯一能做的就是使用工具将Windows键重新绑定到,例如, CTRL + ALT + SHIFT (如果你不喜欢不要用它。像AutoHotkey这样的工具可以完成这项工作。

然后,无论何时按下Windows键,就好像按了 CTRL + ALT + SHIFT ,然后你就可以了用于绑定您想要的热键。

答案 1 :(得分:1)

您的问题中标记了“linux”,因此我假设您使用的是Linux和X ...

所以,要使用Super with Eclipse,首先你必须发现你是否拥有一个Super,如果不是,那就做一个。其余的可能比xmodmap的主题要多得多。

要做的第一件事就是看看你是否已经拥有超级修饰键。运行“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”的大部分白色输入窗口,然后尝试不同的钥匙。键的典型输出如下所示(尝试控制和移动以查看示例) - 特别注意键码和键名称的第三行,这里是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.如果你击中其中一个超级,你转换的代码将匹配其中一个(在上面的例子中,四个)十六进制密钥代码,并显示Super_L或Super_R而不是上面显示的Meta_L。

如果您没有映射到Super的任何键,或者键盘上没有任何键,则使用xev查找您想要用于的键的键码超级(CapsLock可能是一些人的好选择),然后在桌面的UI中使用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,请在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来调整大小等等。

对于xmodmap的另一个随机(ish)示例,这里是一个键映射,它将任何键码78映射到Mode_switch,然后允许你将它与',',`和〜结合起来输入前缀你的下一个元音在它们上面有类似的变音符号。你也可以使用Mode_switch来得到æ,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”。

答案 2 :(得分:1)

我怀疑你的核心目标是创建除现有控件和alt绑定之外的键绑定。因此,例如,让Windows-L执行与Control-L,Alt-L或Shift-L不同的操作。

不幸的是,Linux上的Eclipse似乎不支持shift,control和alt之外的修饰符(在xmodmap中是mod1)。因此,没有其他修饰符可以将Windows键映射到。逻辑选择是mod4,但似乎SWT在非Windows平台上不支持mod4。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=55236添加非Windows mod4支持时出现错误。不幸的是,它已被标记为“将无法修复”一段时间。我建议去那里投票,并分享其他用户案例/原因,如果你有它们,可以重新打开它。