将 intr 映射到 del 键

将 intr 映射到 del 键

我正在将旧版 4GL 应用程序从 SCO OpenServer 5.0.7 迁移到 CentOS (Red Hat) Linux 5.9。

有许多屏幕提示用户按“DEL to ABORT”,但实际上捕获了中断信号。

如何映射stty intrDEL键以保持一致性?是否可以将中断映射到 ansi 序列?

PuTTY 正在为每个键生成以下控制代码:

DEL:^[[3~

BACKSPACE:^?

SHIFT BACKSPACE:^H

我在 PuTTY 中找不到DEL专门重新映射密钥的选项。

答案1

字符intr必须是一个字符,不能是字符序列。

正如 Random832 所建议的,使用screen可能是最好的选择。然后它可以在任何终端上运行。

screen在另一个终端内模拟一个终端。默认情况下,它模拟的终端就像 PuTTY 一​​样不停地^?发送,但您可以更改它。Backspace^[[3~Delete

例如,如果您创建一个包含以下内容的文件:

bindkey -k kb stuff "\10"
bindkey -k kD stuff "\177"
termcap * '' 'kD=\177:kb=\10'
screen sh -c 'stty intr "^?" erase "^H"; exec my-legacy-app'

并将其用作screen -c /path/to/that-file

它将模拟Backspace发送^HDelete发送的情况^?

第三行是告诉使用 termcap 的应用程序(通过$TERMCAP环境变量),但请注意,那些使用的应用程序terminfo不会收到通知。

答案2

它所期望的字符是 ^?,这是其传统终端(例如 VT220)上标记为 DEL 的键。

你可以做 stty intr ^ 吗?在启动应用程序之前,让它使用它作为中断信号,但我不知道是否有办法配置 Putty 以将其发送给 DEL。我知道其他一些终端允许它重新映射。

您不能只更改它打印的消息吗?

您可能需要不同的终端仿真器,或者类似于终端和应用程序之间的屏幕的额外终端仿真层。

编辑:如果您选择“功能键和键盘”下的“SCO”选项,则 DEL 键应生成^?,您可以将其映射到 stty intr。您还应该将 Backspace 设置为 Control-H。应用程序也可能期望在这种模式下生成 Home、End 等键的字符序列,因为您说它是一个设计用于在 SCO 操作系统上运行的应用程序。

但是,您应该考虑@StephaneChazelas的答案,因为使用 screen 会创建一个更受控制的环境(即您不必在每个人的客户端计算机上配置 putty)

相关内容