目前我需要通过 ssh 在远程计算机上进行编码。我从 Cygwin 运行这个程序mintty
,tmux
即使在断开连接时也能保持 emacs 运行。tmux
报告说,一切都很好TERM=screen
,但<end>
钥匙坏了。 Emacs 将其报告为<select>
.在 tmux 内部的 shell 中,当我执行简单的操作时cat
,密钥会被报告为^[[4~
。目标机器是 Ubuntu 16.04.6 LTS。结束键按预期工作zsh
,所以我认为它一定与 emacs 有关。
当我在 Cygwin 本地运行 emacs 时tmux
,一切正常。所以我认为这与目标系统有关。我不想重新绑定,<select>
因为这看起来很尴尬。这是 Emacs 中的错误吗?版本是GNU Emacs 26.3
.
C-a
我可以通过使用and来解决这个问题C-e
,但更喜欢一个正确的解决方案。
答案1
部分是应用程序,部分是配置。根据终端描述是否设计为模仿 VT220 或 PC(无论什么),编辑键盘可以为按键指定不同的名称。同时,curses 应用程序只会看到第一个,因此会标记重复项(抽动警告)并通常将其删除。
Emacs 不是一个curses 应用程序,但它使用ncurses 提供的终端描述。因此,您的终端描述将显示结束/选择中的一个或另一个。您可以更改终端描述...
进一步阅读:为什么我的键盘不起作用?
(xterm 中对此有一个较长的评论术语信息文件)。
答案2
emacs 是对的。那是键的(原始)控制序列select。但这很可能是通过迂回过程实现的。
DEC VT102 没有编辑键盘。这是随着新型号的出现。这是一个带有编辑键盘的 DEC VT320 键盘,位于光标键盘上方中心右侧。
编辑键盘的 DEC VT220 控制序列是所有这些的起源(具有从 DEC VT420 开始添加的对修饰符进行编码的能力):
- find:DECFNK 1(即 CSI
1
~
或 CSI1
;
模组~
) - insert:DECFNK 1(即 CSI
2
~
或 CSI2
;
模组~
) - remove又名delete:DECFNK 3(即 CSI
3
~
或 CSI3
;
模组~
) 或删除 - select:DECFNK 4(即 CSI
4
~
或 CSI4
;
模组~
) - next screen又名PgDn:DECFNK 5(即 CSI
5
~
或 CSI5
;
模组~
) - prev screen又名PgUp:DECFNK 6(即 CSI
6
~
或 CSI6
;
模组~
)
SCO XENIX Multiscreen 控制台在配备 IBM Model M 键盘的机器上运行,并定义:
- home:CUP(即CSI
H
理论上可扩展为CSI1
;
模组H
) - end:CPL(即CSI
F
理论上可扩展为CSI1
;
模组F
)
DEC VT52x 从 SCO 控制台复制了一些内容,包括这些附加的控制序列。有两种可能安排的编辑键盘在 DEC VT52x 上:
- VT布局,与DEC VT220/320/420相同:
- find insert remove
- select prev next
- 电脑布局,与 IBM Model M 相同:
- insert home PgUp
- delete end PgDn
在终端本身固件设置的控制下,这些功能转移到物理上不同的按键排列。但是从函数到其控制序列的映射是不变的。
问题是,由于地下出版物和老太太的故事,人们在几个终端中将这些混为一谈。模拟器。例如,Linux 内核中内置的终端仿真器就是两者的混合体。它使用“PC 布局”,但是(尽管在其他地方模仿 SCO Multiscreen)为home和发送了错误的控制序列end。它发送find和select控制序列。
这个错误现在已经被嵌入了。并且它已经从那里传播了。
- 例如,mintty 通常发送home和 的SCO 序列end。但它有一个“VT220 模式”,使其行为方式与 Linux 终端仿真器相同,即不是 VT220 的行为,尤其是因为它采用“PC”布局VT220 没有。
- homerxvt 对和使用完全错误的 DECFNK 代码end,重叠了光标键盘的两个 DECFNK 分配,DECFNK 7 和 DECFNK 8。
这会持续引起轻微的打嗝。
最常见的问题是没有使用正确的终端类型。 terminfo 数据库包含以下条目putty
,mintty
,linux
等人。kend
///使用这些类型的终端发出的值定义适当的khome
功能。但如果一个kfnd
kslt
错用途vt220
相反,作为薄荷可以选择设置为TERM
环境变量,mintty 发送的内容home被end应用程序理解为find和select。
这可能就是您的情况所发生的情况。一个小问题是,进行理解的应用程序是 tmux,它将控制序列识别为select,根据TERM
它继承的设置为类似 的内容vt220
,然后重新编码并传递它。
进一步阅读
- VT520/VT525视频终端编程器信息。 EK-VT520-RM。 1994 年 7 月。数字。
keyboard
。 “硬件相关”。 SCO Unix系统管理员参考。 1993年2月1日。圣克鲁斯行动。 archive.org。- https://retrocomputing.stackexchange.com/a/9268/1932
- https://unix.stackexchange.com/a/479274/5132