Если вы хотите "отправить" функциональную клавишу, используйте соответствующий синтаксис
^F1::SendInput {F5}
Это приведет к тому, что Putty будет действовать так, как если бы вы нажали F5, а затем отправит соответствующую последовательность символов (последовательность Escape) на сервер.
PC Server
+---------------------+ Network +-------------------------+
| [AHK] ----> [Putty] | ============> | [TTY] ------> [Program] |
| F5 | Esc [ 15 ~ | Esc… | ^ |
+---------------------+ | | | F5 |
| v | |
| $TERM------[Curses] |
| | |
| /usr/share/terminfo |
+-------------------------+
На сервере последовательность Escape сначала обрабатывается обработчиком TTY (ищет сигналы прерываний и т.д.), А затем передается вашей серверной программе, которая обычно передает ее в библиотеку curses
которая переводит последовательности Escape обратно в имена функций. Затем программа решает, что делать в результате ее получения.
Фактическая последовательность Escape зависит от "эмуляции терминала". По умолчанию Putty эмулирует xterm. Библиотека Curses использует значение переменной окружения TERM для поиска в terminfo, какая функция представлена escape-последовательностью.
Escape-последовательности для функциональных клавиш можно найти в /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 скрыть это от нас.