我想在eclipse(3.7.2)中设置一些涉及密钥的键绑定(" windows" key),但它似乎没有拿起那个修饰符当我按下它时键。为什么?我能做什么才能检测到它?
答案 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支持时出现错误。不幸的是,它已被标记为“将无法修复”一段时间。我建议去那里投票,并分享其他用户案例/原因,如果你有它们,可以重新打开它。