Os teclados enviam eventos para o computador. Um evento diz "código de verificação nnn para baixo" ou "código de verificação nnn para cima". No outro extremo da cadeia, os aplicativos em execução em um terminal esperam entrada na forma de uma sequência de caracteres. (A menos que eles tenham solicitado acesso não processado, como o servidor X.) Quando você pressiona A, o teclado envia as informações “scan code 38 down”. O driver do console consulta seu mapa de teclas e o transforma em "caractere a
" (se nenhuma tecla modificadora for pressionada).
Quando você pressiona uma tecla ou combinação de teclas que não resulta em um caractere, as informações precisam ser codificadas em termos de caracteres. Algumas teclas e combinações de teclas têm caracteres de controle correspondentes, por exemplo, Ctrl+ Aenvia o caractere ␁
(valor de byte 1), Returnenvia o caractere ␍
(Ctrl + M, valor de byte 13) etc. A maioria das teclas de função não possui um caractere correspondente e, em vez disso, envia uma sequência de caracteres que começa com o caractere ␛
(escape, byte value 27). Por exemplo, a chave Upé traduzida na sequência de escape ␛[A
(três caracteres: escape, colchete aberto, maiúscula A).
O prompt de nome de usuário no console é idiota e não entende a maioria das seqüências de escape. Ele não possui os recursos de edição de linha e histórico aos quais você está acostumado: esses são fornecidos pelo shell e, até que você efetue login, você não tem um shell. Portanto, ele simplesmente exibe a sequência de escape. Não há glifo para o ␛
personagem, então ele é exibido como ^[
. O ^
sinal é tradicionalmente usado como prefixo para caracteres de controle, e escape é ^[
devido ao seu valor de byte: é o valor de byte de [
menos 64.
Se você pressionar Upem um prompt de shell, isso enviará a mesma seqüência de três caracteres para o seu shell. O shell interpreta isso como uma sequência de comandos (normalmente para recuperar o item do histórico anterior). Se você pressionar Ctrl+ V, em seguida, Upem um shell prompt Isso insere a seqüência de escape no prompt: Ctrl+ Vé um comando para inserir o próximo caractere literalmente ao invés de interpretá-lo como um comando, de modo que o ␛
personagem não é interpretado como o início de uma seqüência de escape .
Algumas teclas são apenas modificadores e não são transmitidas para aplicativos de terminal. Por exemplo, quando você pressiona Shift, essas informações permanecem no driver do terminal e são levadas em consideração se você pressionar A, para que o driver seja enviado A
ao aplicativo em vez de a
.
Além disso, algumas teclas de função podem não estar mapeadas no seu console.
Para uma visão semelhante na GUI, consulte O que é a meta-chave do bash?
getty
oulogin
, embora não tenha certeza do motivo. As suposições educadas dizem que a tela impressa é interpretada especialmente pelo kernel por razões históricas. Não tenho 100% de certeza de nenhum, exceto os modificadores.