emacs的Xkb配置

时间:2015-02-15 15:54:41

标签: emacs keyboard x11

我正在尝试将三个键,左侧alt,右侧win和菜单重新映射到emacs的特定键。 具体来说,我想使用RWIN作为Hyper,我的左边alt作为Meta,我的菜单作为Alt。

我以这种方式设置xkb。有两个文件,第一个是super_hyper(在〜/ .xkb /符号中):

partial modifier_keys
xkb_symbols "standard" {
    key <LALT> { [ Meta_L, Meta_L ] };
    replace key <RWIN>  { [ Hyper_R, Hyper_R ] };
    replace key <MENU>  { [ Alt_R, Alt_R ] };
    modifier_map Mod1 { <META>, Meta_L };
    modifier_map Mod3 { <HYPR>, Hyper_R };
    modifier_map none { <ALT>, Alt_R };
};

第二个文件(〜/ .xkb / keymap / mykbd)非常简单:

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"      };
    xkb_compat    { include "complete"      };
    xkb_symbols   { include "pc+it+inet(evdev)+compose(paus)+terminate(ctrl_alt_bksp)+super_hyper(standard)"};
    xkb_geometry  { include "pc(pc105)"     };
};

然后我用

设置全部
xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY

xev表明一切都很完美。 emacs适用于hyper(右窗口密钥)和meta(左alt键)修饰符。但是当我使用菜单键时,它会像元修改器一样响应,就像alt键一样。我怎么解决?

1 个答案:

答案 0 :(得分:3)

您的左alt密钥应已映射为meta密钥。我将向您展示如何配置Emacs以将AltGr(右侧alt)识别为hyper密钥的示例。您可以根据自己的需要调整示例。

  1. 找出AltGr密钥的密钥代码:
  2. 在控制台中运行:xev。之后重复点击AltGr键然后关闭程序。在输出中,您可以阅读AltGr的密钥代码。我明白了:

    ...keycode 108 (keysym 0xffea, Alt_R)...
    
    1. 接下来,我们使用以下命令检查我们的键是如何绑定的:xmodmap -pm。就我而言,我得到:
    2. 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
      mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
      

      在十六进制中,键码108(十六进制0x6c)与Alt_R相关联。

      1. Alt_R移除mod1,因为我们要将其映射到hyper。此步骤是可选的。例如,我的menu键(十六进制代码:0x87)不会出现在此输出中。因此,我可以跳过这一步。
      2. # remove all keys associated to mod1
        xmodmap -e "clear mod1"
        # but as we are only interested in Alt_R, re-assign those we removed wrongly
        xmodmap -e "add mod1 = Alt_L Meta_L"
        
        1. 现在,我们可以将AltGr密钥重新分配给Hyper(您可以选择其他密钥,例如:Alt_RSuper_LSuper_H ,. ..:
        2. xmodmap -e "keycode 108 = Hyper_R"
          
          1. 最后,下一步是将此键符号分配给修饰符。我选择了mod3(主要是因为它是空的):
          2. xmodmap -e "add mod3 = Hyper_R"
            
            1. 在Emacs中,当我现在点击AltGr-f时,它告诉我H-f未定义。我现在可以使用超级键进行新的键绑定:
            2. (global-set-key (kbd "H-f") 'find-file)
              

              如果我在步骤4-5中选择将AltGrmod3分配给Super_R,我会在步骤6中使用"S-f"作为新的键绑定。 ,在步骤4-5中将AltGr分配给Alt_R会导致使用例如设置绑定时"A-f"

              修改

              如果要将密钥(例如menu密钥)分配给Alt_R,则必须确保映射Meta_L密钥(例如mod1) 。如果Meta_L(例如已分配给Alt_L)未显示在您的xmodmap -pm输出中,那么您的密钥(例如menu)很可能会更进一步meta }修饰符。