Терминалы понимают только символы, а не ключи. Таким образом, все функциональные клавиши кодируются как последовательности символов с использованием управляющих символов. Помимо нескольких общих, которые имеют связанный управляющий символ ( Tabесть Ctrl+I
, Enterесть Ctrl+M
, Escесть Ctrl+[
), функциональные клавиши отправляют escape-последовательности, начиная с Ctrl+[ [
или Ctrl+[ O
. Вы можете использовать tput
команду, чтобы увидеть, что ожидают приложения escape-последовательности для каждой функциональной клавиши на вашем терминале. Эти последовательности хранятся в terminfo
базе данных. Например, приведенный ниже фрагмент оболочки показывает escape-последовательности, соответствующие каждой функциональной клавише.
$ for x in {1..12}; do echo -n "F$x "; tput kf$x | cat -A; echo; done
F1 ^[OP
F2 ^[OQ
F3 ^[OR
F4 ^[OS
F5 ^[[15~
F6 ^[[17~
F7 ^[[18~
F8 ^[[19~
F9 ^[[20~
F10 ^[[21~
F11 ^[[23~
F12 ^[[24~
Другой способ увидеть escape-последовательность для функциональной клавиши - нажать Ctrl+ Vв терминальном приложении, которое не связывает клавишу Ctrl+ V(например, оболочку). Ctrl+ Vвставляет следующий символ (который будет escape-символом) буквально, и вы сможете увидеть остальную часть последовательности, которая состоит из обычных символов.
Поскольку последовательности могут быть неудобными для ввода, изучите возможность изменения привязок клавиш в вашем приложении или используйте другой эмулятор терминала. Также обратите внимание, что у вас может быть ограничение по времени: некоторые приложения распознают escape-последовательности только в том случае, если они вводятся достаточно быстро, чтобы они могли придать смысл Escтолько одному ключу.