【问题标题】:How to setup Super/Windows/mod4 key bindings for eclipse如何为 Eclipse 设置 Super/Windows/mod4 键绑定
【发布时间】:2012-07-10 09:25:03
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我怀疑您的核心目标是在现有的 control 和 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 支持存在错误。不幸的是,它被标记为“不会修复”一段时间了。我建议去那里投票并分享其他用户案例/重新打开它的原因(如果有的话)。

    【讨论】:

      【解决方案2】:

      Eclipse 不挂钩 Windows 键。您唯一能做的就是使用工具将 Windows 键重新绑定到,例如,CTRL+ALT+SHIFT(如果您不不要使用那个)。 AutoHotkey 之类的工具可以完成这项工作。

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

      【讨论】:

        【解决方案3】:

        您在问题中标记了“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”部分并将其转换为 base 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”。

        【讨论】:

        • 据我所知,Eclipse 似乎没有看到 mod4(或 mod3)。所以将 Super 分配给 mod4 实际上并没有帮助。
        • 呃。那真不幸。如果在 Linux + X11 上确实如此,并且它最终不仅会被 Eclipse 命名为其他名称,而且根本不存在……好吧,该死。哦,好吧,这是答案的一半,剩下的就是让 Eclipse 团队支持标准 X11 修饰符(如果你是对的,但它还没有)。
        猜你喜欢
        • 2010-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        • 2021-07-16
        • 2010-11-27
        相关资源
        最近更新 更多