jam*_*man 3 keyboard-shortcuts terminal signals putty
我正在将旧版 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专门重新映射密钥的选项。
该intr
字符,必须是一个字符,它不可能是一个字符序列。
正如 Random832 建议的那样,使用screen
可能是您最好的选择。然后它可以从任何终端工作。
screen
在另一个终端内模拟一个终端。默认情况下,它模拟终端发送^?
上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'
Run Code Online (Sandbox Code Playgroud)
并将其用作 screen -c /path/to/that-file
它将模拟一个Backspace发送^H
和Delete发送的地方^?
。
第三行是告诉使用 termcap 的应用程序(通过$TERMCAP
环境变量),但请注意,使用 termcap 的应用程序terminfo
不会得到通知。
它期望的字符是 ^?,这是在他们的旧终端(例如 VT220)上标记为 DEL 的键。
你可以做 stty intr ^? 在启动应用程序以使其将其用于中断信号之前,但我不知道是否有办法配置 Putty 以将其发送给 DEL。我知道其他一些终端允许它重新映射。
您不能只更改它打印的消息吗?
您可能需要不同的终端仿真器,或类似于终端和应用程序之间的屏幕的额外终端仿真层。
编辑:如果您选择“功能键和键盘”下的“SCO”选项,则 DEL 键应生成^?
,您可以将其映射到 stty intr。您还应该将 Backspace 设置为 Control-H。应用程序也有可能期望 Home、End 等键在此模式下生成的字符序列,因为您说它是一个设计为在 SCO 操作系统上运行的应用程序。
但是,您应该考虑@StephaneChazelas 的回答,因为为此使用 screen 会创建一个更可控的环境(即您不必在每个人的客户端机器上配置腻子)