我正在将旧版 4GL 应用程序从 SCO OpenServer 5.0.7 迁移到 CentOS (Red Hat) Linux 5.9。
有许多屏幕提示用户按“DEL to ABORT”,但实际上捕获了中断信号。
如何映射stty intr
到DEL键以保持一致性?是否可以将中断映射到 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发送^H
和Delete发送的情况^?
。
第三行是告诉使用 termcap 的应用程序(通过$TERMCAP
环境变量),但请注意,那些使用的应用程序terminfo
不会收到通知。
答案2
它所期望的字符是 ^?,这是其传统终端(例如 VT220)上标记为 DEL 的键。
你可以做 stty intr ^ 吗?在启动应用程序之前,让它使用它作为中断信号,但我不知道是否有办法配置 Putty 以将其发送给 DEL。我知道其他一些终端允许它重新映射。
您不能只更改它打印的消息吗?
您可能需要不同的终端仿真器,或者类似于终端和应用程序之间的屏幕的额外终端仿真层。
编辑:如果您选择“功能键和键盘”下的“SCO”选项,则 DEL 键应生成^?
,您可以将其映射到 stty intr。您还应该将 Backspace 设置为 Control-H。应用程序也可能期望在这种模式下生成 Home、End 等键的字符序列,因为您说它是一个设计用于在 SCO 操作系统上运行的应用程序。
但是,您应该考虑@StephaneChazelas的答案,因为使用 screen 会创建一个更受控制的环境(即您不必在每个人的客户端计算机上配置 putty)