【发布时间】:2017-07-07 21:42:49
【问题描述】:
我正在使用 Emacs 23 和 xterm,并试图通过从 POSIX 语言环境切换到 en_US.utf8 将我的 Linux 系统带入 21 世纪。问题:当我在此语言环境中使用键盘上的 Alt 键时,xterm 发送一个两个字符的序列。我想修复 emacs 以使其将 Alt-f 视为 meta-f 而不是两个字符序列 "\303\246"。我认为这可能是输入编码的工作,但是从 emacs 文档中我还没有弄清楚如何编写。
作为替代方案,我愿意将八进制 '\303' 添加到键盘映射中,以便 emacs 将其视为前缀字符以引入元转义。我更喜欢这样做的方式是将'\303' 绑定到一个函数,然后获取下一个键并将其调整为元键。但我也不太清楚那个。
最坏的情况我想我写了一个循环来绑定 'a' 到 'z' 的元键或同样可怕的东西。
我搞砸了 set-terminal-coding-system,但问题的关键在于,在 UTF-8 语言环境中,xterm 使用 Alt 键发送非 ascii 字符——Alt 键的行为不再像元。因此,将终端编码系统设置为 UTF-8 只能让我输入带有变音符号的拉丁字符。不是我希望的行为。
我发现了一个非常可怕的答案,其中涉及猜测 xterm 在元密钥周围做什么。欢迎提出改进建议——我想找到可以干净利落地完成这项工作的代码。
【问题讨论】:
-
您是否尝试通过
set-terminal-coding-system设置它?什么返回M-: (terminal-coding-system)?如果我理解正确,问题可能是您的 Alt 没有翻译成 Meta - 检查终端设置 -
@AlexOtt
nil和utf-8都不起作用。我认为错误在于xterm,而不是emacs。对于xterm所做的奇怪事情,这确实是一种解决方法。例如,使用 rxvt,emacs -nw与 Alt 键一起“正常工作”。