首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于emacs的Xkb配置

用于emacs的Xkb配置
EN

Stack Overflow用户
提问于 2015-02-15 15:54:41
回答 1查看 1.3K关注 0票数 2

我试图重新映射三个键,左alt,右win和菜单,到特定的键为emacs。具体来说,我想使用RWIN作为超级,我的左Alt作为Meta和我的菜单作为alt。

我用这种方式设置xkb。有两个文件,第一个是super_hyper (in ~/..xkb/符号):

代码语言:javascript
复制
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)非常简单:

代码语言:javascript
复制
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)"     };
};

然后我设置了所有的

代码语言:javascript
复制
xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY

xev显示了所有的功能都是完美的。并且emacs可以很好地处理超(右窗口键)和元(左alt键)修饰符。但是当我使用菜单键时,它的响应就像一个元修饰符,就像alt键一样。我该怎么解决呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-17 20:24:56

您的左alt键应该已经映射为meta键。我将在一个示例中向您展示如何将Emacs配置为将AltGr (右alt)识别为hyper键。你可以根据你的需要调整这个例子。

  1. 查找AltGr密钥的密钥代码:

在控制台中运行:xev。然后反复按AltGr键,然后关闭程序。在输出中,您可以读取AltGr的关键代码。我得到:

代码语言:javascript
复制
...keycode 108 (keysym 0xffea, Alt_R)...
  1. 接下来,我们将检查如何使用以下命令绑定密钥: xmodmap -pm。就我而言,我得到:

代码语言:javascript
复制
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_Rmod1中删除,因为我们希望将它映射到hyper。这个步骤是可选的。例如,我的menu键(十六进制代码: 0x87)没有出现在这个输出中。因此,我可以跳过这一步。

代码语言:javascript
复制
# 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、.:

代码语言:javascript
复制
xmodmap -e "keycode 108 = Hyper_R"
  1. 最后,下一步是将这个关键符号分配给修饰符。我选择了mod3 (主要是因为它是空的):

代码语言:javascript
复制
xmodmap -e "add mod3 = Hyper_R"
  1. 在Emacs中,当我点击now AltGr-f时,它告诉我H-f是未定义的。我现在可以使用超键进行新的键绑定:

代码语言:javascript
复制
(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修饰符。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28527938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档