Eu estou perguntando por Shift+ Arrow Keyresultado em um dos A, B, Cou Dletras.
Por que não outras letras? Por que alguma carta?
Shift + Arrow Keysnão faz nada.
Eu estou perguntando por Shift+ Arrow Keyresultado em um dos A, B, Cou Dletras.
Por que não outras letras? Por que alguma carta?
Shift + Arrow Keysnão faz nada.
Respostas:
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?
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.

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.
^[[Afaz sentido quando clico nas teclas de seta enquanto um processo está em execução no terminal.
cat >/dev/nulle digitar e pressione Ctrl + C (ou Enter e Ctrl + D) quando terminar.