可以让在 urxvt 下运行的 emacs 识别吗Hyper?据我所知,它并不能区分hyper+something和普通的 unmodified something。据我所知,urxvt 本身确实可以识别修饰符。但我不知道 emacs 是否可以,如果可以的话如何配置。
答案1
是的,您甚至可能不需要使用xmodmap
, 也不需要修饰符,只需将它们绑定在您的中,~/.Xdefaults
如下所示:
URxvt.keysym.XF86AudioPlay: string:\030@m
URxvt.keysym.Menu: string:\030@s
URxvt.keysym.Muhenkan: string:\030@h
怎么运行的
要获得有关如何处理关键事件的详细解释,请参阅键盘输入和文本输出如何工作?第一的。
TL;DR: 让我们以“Ca”为例,emacs 不会接收“Ctrl down, a down, a up, ctrl up”,urxvt 会接收到,并将其转换为\1
(是的,ctrl- 序列很短,C-a
映射到\1
、C-b
映射到\2
、C-c
映射到\3
等等)。
当 urxvt 发送转义序列时,我的修改发生在该过程的最后阶段。我要求 urxvt 发送\030@m
到 emacs,即C-x @ m
(查看 man ascii,左列上的 030 很方便地与右列上的 X 对齐)。C-x @ m
添加meta修饰符,C-x @ s
添加super修饰符,并C-x @ h
添加hyper修饰符(参见https://www.gnu.org/software/emacs/manual/html_node/emacs/Modifier-Keys.html)。
在我的键盘上,我将 XF86AudioPlay、Menu 和 Muhenkan 键方便地放置在 Ctrl 键附近,因此我将 meta、super 和 hyper 绑定到它们。
可能有更好的解决方案,我们必须了解 emacs 期望如何接收元和超转义序列,直接发送正确的序列,而不是使用C-x @ s
解决方法,旨在当人们这样做时使用不是已经说了钥匙。