怎么运行的

怎么运行的

可以让在 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映射到\1C-b映射到\2C-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解决方法,旨在当人们这样做时使用不是已经说了钥匙。

相关内容