Qual é o histórico das teclas Shift + Setas no terminal?

20

Eu estou querendo saber por que Shift + Chave de Seta resulta em uma das letras A , B , C ou D .

Por que não outras letras? Por que alguma carta?

    
por Dan 23.04.2013 / 19:17

1 resposta

26

Emuladores de terminal, como gnome-terminal ("Terminal" no Ubuntu), mas também xterm e urxvt são denominados "emuladores" porque reproduzem o comportamento de terminais mais antigos que eram a única exibição de um computador. Esses terminais se comunicavam com o computador com um protocolo baseado em texto e foram projetados inicialmente para receber apenas texto. Rapidamente, mais controle era necessário: como apagar uma linha? Use cores? Ou mude a posição do cursor?

Fonte: A arte da usabilidade do Unix - interfaces de linha de comando

As seqüências de escape foram projetadas para cada terminal para fazer essas coisas. Eles são chamados de escape porque começam com o código de escape ASCII: 33 . Não há como imprimir tal personagem diretamente, o que o torna adequado para essas sequências. Quando ainda queremos exibir este characted, ^[[ é usado, e é isso que vou usar nas minhas explicações.

Quando o terminal recebeu ^[[A , isso não significou "print ^ [[A", mas "o usuário pressionou a tecla de seta para cima". "A" aqui é totalmente arbitrário: acontece que é a letra que todos concordam, porque é isso que o DEC VT-52 e seu sucessor usaram o popular terminal VT-100.

Fonte: DEC VT-52 - Manual de Manutenção de 1976

Ainda é assim que os emuladores de terminal funcionam hoje: dependendo da variável $TERM , um banco de dados chamado terminfo é responsável por dizer quais códigos devem ser enviados ao shell (bash, sh, zsh ...), que é então responsável por compreendê-los e reagir a eles.

Agora, o código para Shift + acima é ^[[1;2A : o emulador de terminal envia este código para o shell, que tenta interpretar ^[[1;2 mas não exibe nada porque não sabe sobre essa seqüência de escape. Mas A é deixado e exibido.

    
por Jennifer Wilson 23.04.2013 / 21:51