为什么我在 CentOS 上的 xterm 中输入 Alt-h 时会看到 unicode 字符 è?

为什么我在 CentOS 上的 xterm 中输入 Alt-h 时会看到 unicode 字符 è?

我正在从 ubuntu 机器 ssh 到 centos 机器。è当我输入alt+ h(又名M-h)时,我总是看到。我想在 tmux 绑定中使用此组合键,但它不起作用,因为它tmux无法识别 utf8 字符。我的 Ubuntu 机器上没有这个问题。

我猜测这与语言环境有关。这是我在 CentOS 上的语言环境输出:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=

我确实注意到在 Ubuntu 上我LANGUAGE=en_US:en的语言环境输出中有一个额外的行。

有什么建议么?

答案1

tput rmm

似乎解决了我的问题。大部分。但我不完全明白为什么。

infocmp当我在 centos 机器上运行时,我可以看到它rmm并且smm有值,但在我的 ubuntu 机器上却看不到。从terminfo手册页中我了解到rmm“关闭元模式”和smm“打开元模式”。

此外,将它添加到我的 .bashrc 中似乎不起作用tput rmm。我必须从我的 centos shell 手动运行它。我还是不明白为什么。

答案2

关闭元模式是答案的一部分。xterm 有多个与此相关的可配置功能。ncurses FAQAlt 键在 Bash 中不起作用提供了一些背景知识。本质上,有两个概念元模式是:

  • xterm 和终端数据库 (terminfo) 记录了元键作为一种移位修饰符的使用,设置输入字节的第八位。xterm 手册在八位输入资源。terminfo 手册更简洁:

如果终端有“元键”它充当移位键,设置传输的任何字符的第 8 位,这一事实可以用公里否则,软件将假定第 8 位是奇偶校验,并且通常会被清除。如果存在用于打开和关闭此“元模式”的字符串,则可以将其给出为韓國

  • bash 表示,它希望在应用 meta 键的字符前添加一个转义字符。(没有记录表明 bash 是如何决定这一点的,它只是但至少可以追溯到 20 世纪 90 年代初)。

因此,问题在于 xterm 实现了一个控制序列,用于打开/关闭元模式,而 bash 对如何处理它有一些期望。奇怪的是,bash 准备的任何终端都没有被注意到(它肯定不是 xterm)。但是,为了以防万一 bash 看到终端,它会默认为任何实现它的终端打开元模式。

相关内容