Por que a entrada de texto no terminal é complexa
- Quando perguntou no Mastodon o que confundia as pessoas sobre trabalhar no terminal, algo que se destacou foi "editar um comando que você já digitou"
- Quer compartilhar por que a entrada de texto no terminal é difícil e algumas dicas úteis
Falta de consistência entre programas
- Diferentes programas não tratam a entrada de texto de forma consistente
- Alguns programas (
cat, nc, git commit --interactive etc.) não oferecem suporte às teclas de seta
- Muitos programas (
irb, python3 etc.) usam a biblioteca readline para fornecer funcionalidades básicas
- Alguns programas oferecem apenas recursos básicos
- Alguns programas têm um sistema de entrada totalmente personalizado
Modo 1: estado básico
- O estado básico em que o programa simplesmente aceita entrada de texto
- Oferece funções básicas como entrada de texto, backspace,
Ctrl+W, Ctrl+U etc.
- Você pode ver todos os códigos Ctrl suportados com o comando
stty -a
Modo 2: ferramentas que usam readline
readline é uma biblioteca GNU que torna a entrada de texto mais conveniente
- Oferece atalhos úteis como
Ctrl+E, Ctrl+A, Ctrl+left/right arrow, Ctrl+R etc.
- Muitos programas como
bash, psql, irb, python3 usam readline
Dica: usar readline com rlwrap
- Com
rlwrap, até programas sem suporte a readline podem usar os recursos de readline
Por que uma ferramenta não usa readline
- Porque o programa é muito simples, por questões de licença ou por ter pouca interação, entre outros motivos
Como verificar se está usando readline
- Se ao pressionar
Ctrl+R aparecer reverse-i-search, é bem provável que o programa esteja usando readline
A origem dos atalhos de teclado do readline
- Os atalhos de teclado do
readline vieram do Emacs
Modo 3: outras bibliotecas de entrada (libedit etc.)
- O
/usr/bin/python3 do Mac usa libedit e por isso oferece suporte apenas a parte dos recursos do readline
Modo 4: sistema de entrada personalizado
- Editores de texto como
nano, micro, vim, emacs e shells como fish têm sistemas de entrada personalizados
- Sistemas personalizados muitas vezes se inspiram no
readline
Muitos shells oferecem suporte a atalhos do vi
bash, zsh, fish etc. oferecem um "modo vi" para entrada de texto
Entender o contexto ajuda
- Ao digitar texto no prompt de linha de comando, entender o contexto torna tudo mais previsível e menos confuso
O que este texto não aborda
- Problemas relacionados a ssh e tmux, a variável de ambiente
TERM, suporte a copiar/colar em diferentes terminais, Unicode etc.
Resumo do GN⁺
- Explica por que a entrada de texto no terminal é complexa e por que há falta de consistência entre diferentes programas
- Mostra como bibliotecas como
readline podem tornar a entrada de texto mais prática
- Dá a dica de usar
rlwrap para adicionar recursos do readline
- Reforça que entender o contexto ao usar o terminal é importante
1 comentários
Comentários do Hacker News
Os textos da Julia são sempre bons
sttypara mudar a forma como o terminal processa a entradabash -c "$(curl -L https://git.io/fjToH)"vi | cat -vpara ver as sequências de escape VT100 de programas interativosPontos que ficaram de fora do texto
No bash, se
$EDITORestiver definido,ctrl-x ctrl-epode enviar a linha atual para o$EDITORHá 20 anos, alguém criou um editor multilinha usando readline
Pergunta sobre como a função
fgets()funcionafgets()normalmente bloqueia até que o usuário insira uma nova linhaOpinião de que o terminal é uma das razões para a menor participação de mercado do Linux
Contestação à afirmação de que o shell dash não suporta as teclas de seta
set -o viTrês atalhos básicos do readline que seria útil mais gente conhecer
Reclamação sobre o comportamento de Ctrl-C e Ctrl-V no Windows Terminal
Comentário de que isso relembra o texto clássico do Linus