11

我想在涉及键(“windows”键)的eclipse(3.7.2)中设置一些键绑定,但是当我按下它时它似乎没有拾取那个修饰键。为什么?我该怎么做才能检测到它?

4

3 回答 3

1

Eclipse 不挂钩 Windows 键。您唯一能做的就是使用工具将 Windows 键重新绑定到例如CTRL++ (如果您不使用它)ALTSHIFTAutoHotkey这样的工具可以完成这项工作。

然后,每当您按下 windows 键时,就好像您按下了++ CTRL,然后您可以使用它来绑定您想要的热键。ALTSHIFT

于 2013-07-25T06:55:27.000 回答
1

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

所以,要在 Eclipse 中使用 Super,首先你必须发现你是否一个 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 以查看示例) - 特别注意带有键码和键符号名称的第三行,此处为 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 或桌面 UI 中的其他工具进行设置。后者不在此回复的范围内,但使用 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 和 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”。

于 2014-09-02T22:07:14.947 回答
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 支持存在一个错误。不幸的是,它被标记为“不会修复”一段时间了。我建议去那里投票并分享其他用户案例/重新打开它的原因,如果你有的话。

于 2016-05-07T00:20:13.357 回答