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

问题描述:

我想在eclipse(3.7.2)中设置一些涉及键(“windows”键)的键绑定,但它似乎没有选择当我按下它时修改键。为什么?我能做些什么来检测它?如何为eclipse设置超级/ Windows/mod4键绑定

Eclipse不挂钩Windows键。你唯一能做的就是使用一个工具重新绑定windows key,例如,CTRL + ALT + SHIFT(如果你不使用它的话)。像AutoHotkey这样的工具可以完成这项工作。

然后,当你按下windows键,这将是,如果你按下CTRL + ALT + SHIFT ,然后你就可以用它来绑定您想要的热键。

你的“Linux”的标签在你的问题,所以我会假设你正在使用Linux和X ...

因此,使用超与Eclipse,首先你要发现你是否有 a超级,如果没有,就做一个。其余的部分可能比你在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) 

在上面的输出,一串钥匙已经映射到中超,与(十六进制)键代码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 

找到“键码”部分和隐蔽它立足16.如果你已经打了超级计算机之一,你的转换代码将匹配的一个(在上面的例子中,四)六角键码,和显示Super_L或Super_R而不是上面显示的Meta_L。

如果您没有任何键映射到超级键,或者您的键盘上没有任何键,那么请使用xev来查找您要使用的密钥用于Super(CapsLock might对某些人来说是个不错的选择),然后在桌面的UI中使用xmodmap或其他工具来设置它。后者是这个答复的范围之外,但使用xmodmap,你可以只让一个叫.Xmodmap在你的home目录与该文件在它:

! 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中生成一个文件。桌面像这样的(erlkonig =我,把你的家中,而不是):

$ 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得到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 

更多信息,请使用“xmodmap的人”。

+1

据我所知,Eclipse似乎没有看到mod4(或mod3)。因此,将Super分配给mod4实际上并没有帮助。 – studgeek 2016-05-06 23:22:55

+0

呃。那真不幸。如果在Linux + X11上它确实如此,并且它不会最终被Eclipse命名为其他东西,但它不在那里......好吧,不要这样做。哦,这只是答案的一半,让Eclipse团队支持标准的X11修改器是其余的(如果你是对的,它还没有)。 – 2016-05-07 04:22:20

我怀疑你的核心目标是创建键绑定除了你现有的控制和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支持存在一个错误。不幸的是,它被标记为“不会修复”一段时间。我建议去那里投票并分享额外的用户案例/重新开放它的原因,如果你有它们。