Eu estou perguntando por Shift+ Arrow Keyresultado em um dos A
, B
, C
ou D
letras.
Por que não outras letras? Por que alguma carta?
command-line
Dan
fonte
fonte
Shift + Arrow Keys
não faz nada.Respostas:
Emuladores de terminal como
gnome-terminal
("Terminal" no Ubuntu), mas tambémxterm
eurxvt
sã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
$TERM
variável, um banco de dados chamadoterminfo
é 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;2
mas não exibe nada porque não conhece essa sequência de escape. MasA
é deixado e exibido.fonte
^[[A
faz sentido quando clico nas teclas de seta enquanto um processo está em execução no terminal.cat >/dev/null
e digitar e pressione Ctrl + C (ou Enter e Ctrl + D) quando terminar.