Precedente para ligações de teclas de terminal para Windows ou Mac Cmd key

0

Terminais Unix enviam códigos ASCII abaixo de 32 para Ctrl + outra tecla, e tem pelo menos duas maneiras de enviar "meta" (viz. prefixando código 27 ou configurando 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 com o logotipo do Windows ou a tecla Mac Cmd ?

Eu gostaria de mapear Cmd + teclas de seta no iTerm2, mas não sei quais códigos atribuir a elas. Eu já estou usando a tecla Option para "meta" com as teclas de seta.

    
por echristopherson 30.05.2012 / 02:02

1 resposta

0

A convenção de configurar o oitavo bit quando meta é pressionada é 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 é incomum hoje em dia também.

Os 32 caracteres de controle ASCII são, de fato, enviados como caracteres de controle ASCII (pontos de código menores que 32), mas só cobre Ctrl- @, Ctrl-A por Ctrl-Z, ESC, Ctrl- \, Ctrl-], Ctrl- ^ e Ctrl-_. Qualquer outra coisa, como por exemplo Ctrl-4, não existe em ASCII e não há nenhuma convenção para enviá-lo através de um terminal.

Basicamente, o resultado é o seguinte: qualquer coisa que não possa ser enviada como um caractere simples (isto é, existe em Unicode para terminais de suporte a Unicode modernos) deve ser enviada como uma seqüência de escape. As seqüê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 atualmente são derivados ou similares ao VT100, e as seqüências de escape estão disponíveis para chaves 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 modificadores de teclas, nem mesmo os modificadores padrão, como Shift e Control. O software executado em um tty não pode dizer a diferença entre um pressionamento de tecla Enter e um pressionamento de tecla Shift-Enter. Não pode sequer dizer a diferença entre um pressionamento de tecla Enter e um pressionamento de tecla Control-M.

O fato de essas seqüências modificadoras não poderem ser transmitidas através de um terminal pode ser considerado uma coisa boa. Por exemplo, o aplicativo do 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.

    
por 30.05.2012 / 15:48