Qual é a história das teclas Shift + Seta no terminal?

21

Eu estou perguntando por Shift+ Arrow Keyresultado em um dos A, B, Cou Dletras.

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

Dan
fonte
Intrigante: D Minha aposta? Tem a ver com o jogo baseado em texto: D
Rinzwind
2
Apenas uma observação: em tty Shift + Arrow Keysnão faz nada.
Radu Rădeanu
@Rinzwind: :)))
Radu Rădeanu
11
Eu fiz essa pergunta no Unix / Linux Stack Exchange. Existem algumas respostas úteis. Talvez você queira olhar para eles. unix.stackexchange.com/questions/73669/…
yfklon:

Respostas:

27

Emuladores de terminal como gnome-terminal("Terminal" no Ubuntu), mas também xterme urxvtsão chamados de "emuladores" porque reproduzem o comportamento de terminais mais antigos, que eram a única tela 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, era necessário mais controle: como apagar uma linha? Use cores? Ou mudar a posição do cursor?

Terminal VT-100 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 nomeados fuga , porque eles começam com o código de escape ASCII: 33. Não há como imprimir diretamente esse personagem, o que o torna um bom ajuste para essas seqüências. Quando ainda queremos exibir esse gráfico, ^[[é usado, e é isso que vou usar nas minhas explicações.

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

DEC VT-52 Manutenção Manuel 1976

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

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

Agora, o código para Shift+ uppassa a ser ^[[1;2A: o emulador de terminal envia esse código para o shell, que tenta interpretar, ^[[1;2mas não exibe nada porque não conhece essa sequência de escape. Mas Aé deixado e exibido.

Jennifer Wilson
fonte
5
Nossa interessante. Agora tudo isso ^[[Afaz sentido quando clico nas teclas de seta enquanto um processo está em execução no terminal.
24413 Dan
4
Você pode pressionar CTRL-v imediatamente antes de pressionar SHIFT-UpArrow para 'visualizar' as seqüências de escape na forma bruta. A menos que você tenha alterado os padrões, o ESC deve aparecer na tela do terminal como ^ [
arielf
@arielf Você também pode executar cat >/dev/nulle digitar e pressione Ctrl + C (ou Enter e Ctrl + D) quando terminar.
wjandrea 11/12