Emacs C-。在终端不工作


11

我使用GNU Emacs,通常会emacs -nw启动终端版本(而不是窗口GUI版本)。

我写学校论文,LaTeX所以我flyspell-mode在emacs中进行拼写检查。在GUI版本中,这可以正常工作,但是在终端中,我遇到了按键C-.Ctrl- .)的问题。在tty中,此操作不执行任何操作,而在terminator或中gnome-terminal,仅输入“。”。

我应该怎么做才能使其与窗口版本一样(显示拼写错误的单词的拼写建议)?

编辑:如果这很重要,我将使用带有Emacs 23.3.1的Ubuntu 12.04(我相信这是12.04存储库中的默认设置)。


1
同样在这里。您尝试过Esc- x flyspell-mode吗?这对我有用。
Masroor

嗯,是。我总是开始flyspell-modeM-x,但ESC x似乎并没有发挥作用。
cg505

1
同样在这里。但是,我发现了适用于两个版本的默认键绑定ESC-TAB
McNisse

是的,ESC TAB或者M-TAB两者都对我有用。感谢@McNisse的提示。
cg505

Answers:


4

看来此问题的重要部分已经在注释中得到了回答,但是如果您出于好奇而想解决根本原因,我认为是ctrl-。由于终端仿真器的某些限制,它在终端中不起作用。在标准终端中,ctrl定义为发送您所按下的键的ASCII码减64(这就是ctrl-J(74)发送换行符(10)和ctrl-I(73)发送制表符(9)的原因。 )。由于句点的ASCII码为46,所以减去64将得到-18,这是无效的,因为它是负数,并且没有负ASCII码,因此emacs无法接收和理解。

当您在窗口模式下运行emacs时,将绕过终端仿真器机制,而是使用X11的更强大的键盘处理功能,该功能可以处理更多模糊的击键(而不是将每个击键减小为一个ASCII字符,程序将接收原始键加上所有适用的修饰符)。因此,使基于tty的emacs处理ctrl-可能是不可能的。除非您对终端仿真器(可能还有emacs)进行自定义修改。


1
这个答案真的很有趣。我深入研究,发现严格来说,DEC VT100的工作原理类似,但有所不同。这是将控制键和其他键同时按下时的操作:1)通过键盘扫描代码查找ASCII表2)通过ASCII查找有效控制代码的表3)如果有效,则屏蔽ASCII的bit5和bit6 ) 发送。因此ctrl-J,ctrl-j和ctrl- *都可以发出LF,但是有效性检查限制了组合。请参阅DEC VT100技术手册第4-43节(PDF第93页)。
野口健二

我可以'C-.'在xterm中用emacs 捕获,但不能用urxvt或st 捕获。知道为什么会这样吗?
stewSquared

0

虽然以上答案很好地解释了为什么它不起作用,但它并没有真正解决如何使其起作用。因为iTerm2您可以通过为转义序列添加键映射来解决此问题。我想在terminator或会有类似的东西gnome-terminal

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.