将 intr 映射到 del 键

jam*_*man 3 keyboard-shortcuts terminal signals putty

我正在将旧版 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专门重新映射密钥的选项。

Sté*_*las 7

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发送^HDelete发送的地方^?

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


Ran*_*832 6

它期望的字符是 ^?,这是在他们的旧终端(例如 VT220)上标记为 DEL 的键。

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

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

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

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

但是,您应该考虑@StephaneChazelas 的回答,因为为此使用 screen 会创建一个更可控的环境(即您不必在每个人的客户端机器上配置腻子)