Terminais Unix enviam códigos ASCII abaixo de 32 para Ctrl+ outra chave e têm pelo menos duas maneiras de enviar "meta" (ou seja, prefixando o código 27 ou definindo o bit alto de um caractere ASCII). Existe um precedente para uma maneira de codificar o uso de outras teclas modificadoras, como "super" ou a tecla do logotipo do Windows ou Cmda tecla do Mac?
Gostaria de mapear Cmdas teclas de seta + no iTerm2, mas não sei quais códigos atribuir a elas. Já estou usando a Optiontecla "meta" com as setas.
Responder1
A convenção de definir o 8º bit quando meta é pressionado é bastante arcaica e não é mais usada, ou mesmo em qualquer terminal moderno que suporte mais caracteres do que apenas ASCII. A convenção de prefixar ESC também é incomum hoje em dia.
Os 32 caracteres de controle ASCII são de fato enviados como caracteres de controle ASCII (pontos de código menores que 32), mas isso cobre apenas Ctrl-@, Ctrl-A até Ctrl-Z, ESC, Ctrl-\, Ctrl-], Ctrl-^ e Ctrl-_. Qualquer outra coisa, como por exemplo Ctrl-4, não existe em ASCII e não existe convenção para enviá-lo através de um terminal.
Basicamente, o resultado final é o seguinte: qualquer coisa que não possa ser enviada como um caractere simples (ou seja, existe em Unicode para terminais modernos que suportam Unicode) deve ser enviada como uma sequência de escape. As sequências de escape são definidas pelo protocolo de emulação de terminal em vigor. Quase todos os protocolos de emulação de terminal usados hoje são derivados ou similares ao VT100, e sequências de escape estão disponíveis para teclas comuns encontradas em teclados que não existem como caracteres: teclas de seta, teclas de função, etc...
O VT100 e os protocolos de emulação de terminal relacionados não contêm convenções para transmitir pressionamentos de teclas modificadoras, nem mesmo as padrão como Shift e Control. O software executado em um tty não consegue diferenciar entre pressionar a tecla Enter e pressionar a tecla Shift-Enter. Ele nem consegue dizer a diferença entre pressionar a tecla Enter e pressionar a tecla Control-M.
O fato de essas sequências modificadoras não poderem ser transmitidas através de um terminal pode ser considerado uma coisa boa. Por exemplo, o aplicativo de terminal MacOS pode reivindicar o pressionamento de tecla ⌘V para seu próprio uso (colar) porque ele não pode ser enviado para o tty de qualquer maneira.