Eu queria descobrir o que meu terminal está enviando para Ctrl+Backspace e Alt+Backspace, a maneira padrão de fazer isso é rodar cat
no terminal e digitar coisas geralmente funciona, mas com certas saídas como essas, os resultados são complicados.
Estou supondo que Alt+Backspace está enviando \x1b\x7f
(ou seja, escape backspace), mas o que acontece se eu executar cat
e digitar Ctrl+V e Alt+Backspace, ou apenas Alt+Backspace, o que acontece é que o escape será "digitado" e então imediatamente ele é removido com backspace para parecer que nada está acontecendo. Só fui informado disso uma vez, ao ver meu computador renderizar um único quadro da ^[
fuga.
Até agora não tenho certeza de como descobrir o que Ctrl+Backspace está enviando. não é Ctrl+W, embora ambos excluam uma palavra no prompt do bash, porque abaixo cat
dele não há nada enquanto Ctrl+W exclui uma palavra!
Responder1
Basta usar este comando:
showkey -a
Responder2
Com zsh
:
$ STTY='raw -echo min 0 time 40' cat -vte
^[^?
Ou com bash
:
$ s=$(stty -g); stty raw -echo min 0 time 40; cat -vte; stty "$s"
^[^?
Você verá a entrada do terminal bruta conforme ela é enviada e renderizada por cat -vte
. Não digite nada por 4 segundos (40 decisegundos) para parar.
Você pode substituir cat -vte
por od -An -w1 -tu1 -tx1 -to1 -ta
(assumindo GNU od
ou compatível), por exemplo, para ver cada valor de byte em decimal, hexadecimal, octal ou como caractere.
27
1b
033
esc
127
7f
177
del
Responder3
Encontrei um truque em outro lugar para mostrar um único caractere no bash usando read -rsn1 key && echo "$key" | xxd
. Isso foi 90% do caminho, mas fiquei preso nisso por um tempo porque simplesmente voltaria 0x1b (Escape), o que não era o quadro completo.
Então eu mudei para read -rsn2 key && echo "$key" | xxd
e isso aumenta para quantos caracteres sua sequência de escape tiver, um pouco de experimentação resolve. Então, no meu terminal eu tinhaambosCtrl+ e Alt+Backspace mapeados para 0x1b, 0x7f (meta-backspace se preferir) no passado por motivos de conveniência. Estou seguindo esse caminho em primeiro lugar porque quero configurar um novo emulador de terminal para me permitir excluir palavras com ambos os combos, mas apenas um deles funciona. O read -rsn
in bash é uma boa ferramenta para executar um nível mais baixo de depuração de saída do que o cat
.