Ctrl + 向上/向下箭头在我的终端 (alacritty) 中产生输出。知道它来自哪里吗?

Ctrl + 向上/向下箭头在我的终端 (alacritty) 中产生输出。知道它来自哪里吗?

我正在运行 garuda/sway 发行版,按下后在 alacritty 0.10.1 终端中得到以下输出:

Ctrl + 向上箭头 => [1;5A]

Ctrl + 向下箭头 => [1;5B]

另一个奇怪的小细节是,粘贴值后似乎将光标移回一个位置......因此按下:

Ctrl + UP 然后 Ctrl + DOWN => [1;5A[1;5B]]

配置中只有一些颜色变化。我安装了另一个终端作为测试 (st),但我没有在那里看到同样的东西。

有人能识别这些代码吗?或者有人知道这些代码来自哪里吗?……或者可能是找出答案的一般过程?有人能确认他们是否在运行 alacritty 时得到了同样的东西吗?

更新:对于发现此问题的人,请参阅下面已接受的答案和评论,但 TLDR 是我认为这更具体地说是 fish shell 问题。我没有发现 bash 和 alacritty 存在此问题。我确实在 fish 和 st 上看到了此问题。

答案1

那些终端中 Ctrl+Up 和 Ctrl+Down 的实际代码。它们之所以显示出来,是因为您将它们发送到无法识别它们的程序。

(更准确地说,Ctrl+UpESC [ 1 ; 5 A在大多数终端中都可用,尽管它可能ESC O A在某些模式或某些终端(如 rxvt)中可用。)

行编辑和光标移动不是由你的终端实现的——它们是由 shell 或当前处于活动状态的其他程序实现的终端。(例如,Bash 使用自己的行编辑库“readline”,Zsh 有自己的行编辑库。)每当您按下光标键时,Bash 都会收到这种键序列,找出新的光标位置,然后打印另一个序列,要求终端实际将光标移动到那里。

一般来说,只有交互式 shell 或全屏程序(比如文本编辑器)才应该识别特殊键,但从 stdin 读取的其他程序通常不会识别,所以例如如果你运行它,cat它根本无法识别箭头键,这是完全正常的。

但是,如果 Bash 等程序无法识别它们,则你的系统可能缺少术语信息终端的数据库(它让程序知道哪些代码对应哪些键)。例如,Alacritty 将 $TERM 设置为值alacritty,因此 Bash 将尝试读取/usr/share/terminfo/a/alacritty键定义 – 此文件应随“ncurses”包一起提供。

因此,请确保已安装 alacritty 的 terminfo 定义(特别是当您通过 SSH 连接到远程系统时),或者尝试将其配置为xterm-256color导出就像这里讨论的那样

相关内容