Os terminais só entendem caracteres, não chaves. Assim, todas as teclas de função são codificadas como seqüências de caracteres, usando caracteres de controle. Além de alguns comuns que possuem um caractere de controle associado ( Tab é Ctrl+I
, Enter é Ctrl+M
, Esc é Ctrl+[
), teclas de função enviam seqüências de escape, começando com Ctrl+[ [
ou Ctrl+[ O
. Você pode usar o comando tput
para ver quais aplicativos de seqüência de escape esperam para cada tecla de função seu terminal. Essas sequências são armazenadas no banco de dados terminfo
. Por exemplo, o fragmento de shell abaixo mostra as seqüências de escape correspondentes a cada tecla de função.
$ 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~
Outra maneira de ver a seqüência de escape para uma tecla de função é pressionar Ctrl + V em um aplicativo de terminal que não liga o Ctrl + V chave (como o shell). Ctrl + V insere o próximo caractere (que será o caractere de escape) literalmente, e você poderá ver o resto da sequência, que consiste em caracteres comuns .
Como as sequências podem ser difíceis de digitar, investigue alterando as associações de teclas em seu aplicativo ou usando outro emulador de terminal. Além disso, observe que você pode ter um limite de tempo: alguns aplicativos reconhecem apenas seqüências de escape se eles chegarem rápido o suficiente, para que possam dar um significado à chave Esc sozinha.