我试图重新映射三个键,左alt,右win和菜单,到特定的键为emacs。具体来说,我想使用RWIN作为超级,我的左Alt作为Meta和我的菜单作为alt。
我用这种方式设置xkb。有两个文件,第一个是super_hyper (in ~/..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 $DISPLAYxev显示了所有的功能都是完美的。并且emacs可以很好地处理超(右窗口键)和元(左alt键)修饰符。但是当我使用菜单键时,它的响应就像一个元修饰符,就像alt键一样。我该怎么解决呢?
发布于 2015-02-17 20:24:56
您的左alt键应该已经映射为meta键。我将在一个示例中向您展示如何将Emacs配置为将AltGr (右alt)识别为hyper键。你可以根据你的需要调整这个例子。
AltGr密钥的密钥代码:在控制台中运行:xev。然后反复按AltGr键,然后关闭程序。在输出中,您可以读取AltGr的关键代码。我得到:
...keycode 108 (keysym 0xffea, Alt_R)...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关联。
Alt_R从mod1中删除,因为我们希望将它映射到hyper。这个步骤是可选的。例如,我的menu键(十六进制代码: 0x87)没有出现在这个输出中。因此,我可以跳过这一步。# 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"AltGr键重新分配给Hyper (您可以选择其他键,例如:Alt_R或Super_L、Super_H、.:xmodmap -e "keycode 108 = Hyper_R"xmodmap -e "add mod3 = Hyper_R"AltGr-f时,它告诉我H-f是未定义的。我现在可以使用超键进行新的键绑定:(global-set-key (kbd "H-f") 'find-file)如果我在步骤4-5中选择将AltGr和mod3分配给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修饰符。
https://stackoverflow.com/questions/28527938
复制相似问题