使用 ahk 生成终端的转义序列

使用 ahk 生成终端的转义序列

我正在尝试为 putty 制作一个 ahk,以便发送我想要的一些组合键的键码,以便我的程序也可以在终端上运行。

为此,我已经有一个 ahk,它的一些组合键可以正常工作,通过从这里和那里、从键表等进行了大量实验,但我仍然不明白,没有想出一个清晰的、合乎逻辑的方法来计算我想要的退出键。

一个例子:

^F1::SendInput ^[O5P

在我的测试程序中它给出了 28。

我发现对于^[1我得到 ​​377 和对于^[2376,并且我发现可以使用十六进制数(AF)中的字母,以及;~或双精度[[

您了解这是如何运作的吗?有没有什么好的描述材料?非常感谢!

答案1

如果你想“发送”功能键,请使用适当的语法

^F1::SendInput {F5}

这会导致 Putty 表现得好像您按下了 F5 一样,然后它会向服务器发送适当的字符序列(转义序列)。

               PC                                         Server
   +---------------------+   Network     +-------------------------+
   | [AHK] ----> [Putty] | ============> | [TTY] ------> [Program] |
   |        F5           |  Esc [ 15 ~   |        Esc…    |   ^    |
   +---------------------+               |                |   | F5 |
                                         |                v   |    |
                                         |    $TERM------[Curses]  |
                                         |                 |       |
                                         |    /usr/share/terminfo  |
                                         +-------------------------+

在服务器上,转义序列首先由 TTY 处理程序处理(查找中断信号等),然后提供给您的服务器程序,该程序通常会将其交给库,该库将curses转义序列重新转换为函数名称。然后程序决定在收到该结果后要做什么。

实际的转义序列取决于“终端模拟”。默认情况下,Putty 模拟 xterm。Curses 库使用环境变量 TERM 的值在 terminfo 中查找转义序列所代表的函数。


功能键的转义序列可以在 /etc/termcap 中找到,下面是一些

                                    SCO     PuTTY    PuTTY
  Key    Termcap  VT100    VT220    ANSI    XTERM    VT400
  ---    -------  -------  -------  ------  ------   -------
  F1     k1       Esc[OP   Esc[OP   Esc[M   Esc[OP   Esc[11~
  F2     k2       Esc[OQ   Esc[OQ   Esc[N   Esc[OQ   Esc[12~
  F3     k3       Esc[OR   Esc[OR   Esc[O   Esc[OR   Esc[13~
  F4     k4       Esc[OS   Esc[OS   Esc[P   Esc[OS   Esc[14~
  F5     k5       -        -        Esc[Q   Esc[15~  Esc[15~
  F6     k6       -        Esc[17~  Esc[R   Esc[17~  Esc[17~
  F7     k7       -        Esc[18~  Esc[S   Esc[18~  Esc[18~
  ...
  F10    k0       -        Esc[21~  Esc[V   Esc[21~  Esc[21~
  F11    k1       -        Esc[23~  Esc[X   Esc[23~  Esc[23~
  ...
  F14    kD       -        Esc[26~  Esc[Z   Esc[26~  Esc[26~
  F15    kE       -        Esc[27~  Esc[a   Esc[27~  Esc[27~
  ...
  F36    FP       -
  ...
  F63    Fr       -

笔记

  • VT100 系列只有四个功能键,标记为 PF1 至 PF4
  • VT220 有 20 个功能键,最多可按 F20
  • VT220 使用位置 5 的功能键来实现“中断”功能。(因此出现上述间隙)
  • 并非所有模拟器或现存的 termcap/terminfo 文件都同意上述内容。
  • 进程中存在奇怪的差距。
  • xterm 不是一个定义,而是一个不守规矩的不合群的家庭,没有两个是相同的。
  • 同上“ANSI”
  • 许多模拟器使用诸如 Shift+F1 代替 F13、Alt+F1 代替 F25 等等。
  • 在 PuTTY 中,shift+F1 与 F11 相同(不是 F13)
  • 是的,这很乱。这就是为什么我们让 PuTTY 和 Terminfo 隐藏它。

相关内容