Referência Rápida de Interface: Biblioteca readline

Pouca gente sabe, mas um boa parte dos programas de linha de commando no GNU/Linux são compilados com uma biblioteca unificada, que serve tanto para a edição de linhas de entrada, quanto para simplificar a API para os programadores. Essa biblioteca chama-se NCurses readline.

“OK, mas por que isso é importante?” deve ser a pergunta que está na cabeça do leitor nesse momento. Isso é importante porque a NCurses readline tem uma interface com o usuário bem simples, e muito prática. Quantas vezes você está na linha de comando e descobre que errou algo no meio do caminho e decide apagar a linha? O que você faz? Pressiona Backspace e fica segurando até a linha desaparecer? Ora, muito mais prático teclar Control-U. Esse atalho apaga a linha inteira muito mais rapidamente.

Bem, talvez apagar uma linha no prompt do shell não seja um exemplo de poder, mas o mesmo acontece com senhas… Você está digitando uma senha quando percebe que no meio do caminho errou algo… como o programa não mostra a senha sendo digitada, como você apaga ela e digita de novo aproveitando o mesmo prompt? Isso mesmo: Control-U!

Há uma série de outros atalhos poderosos relacionados a biblioteca NCurses readline, e, uma vez que você tenha decorado uns poucos, a agilidade na linha de comando e em programas relacionados acaba multiplicada. Esses atalhos são padronizados há tanto tempo que mesmo programas não compilados com a NCurses readline acabam implementando os mesmos!!! Pensando nisso, aqui vai uma referência rápida dos que mais utilizo:

  • Control-U: Apaga os caracteres do ponto onde está o cursor até o início da linha.
  • Control-K: Apaga os caracteres do ponto onde está o cursor até o fim da linha.
  • Control-A: Move o cursor para o início da linha.
  • Control-E: Move o cursor para o fim da linha.
  • Control-B: Move o cursor um caractere para trás. Extremamente útil quando está nesses terminais que não têm setinhas ou que não as implementam com os códigos corretos.
  • Control-F: Move o cursor um caractere para frente.
  • Control-D: Deleta o caractere sob o cursor (igual a teclar Del em um sistema DOS).
  • Control-H: Deleta o caractere anterior ao cursor (igual a teclar Backspace em um sistema DOS). Esse tenho usado muito ultimamente: minha tecla Backspace está com problemas…
  • Control-J: Termina a janela (ou, no caso de uma linha, termina a linha). No caso de um terminal, é como dar um ENTER.
  • Control-O: Insere uma nova linha na posição do cursor. Também, no caso de um terminal, é como dar um ENTER.
  • Control-L: Faz um refresh na tela. Muito útil quando você está um Terminal gráfico e a saída do programa anterior te deixa com um prompt no meio de um monte de caracteres.
  • Control-N: Move o cursor uma linha abaixo.
  • Control-P: Move o cursor uma linha acima.

Existem outros atalhos, mas esses são de longe os mais úteis. Eu gosto muito da linha de comando, e costumo dizer que uso o X apenas como um multiplexador de terminais (na realidade, algumas vezes evito o X completamente e uso o GNU Screen – mas isso é outra história). Se você também gosta da linha de comando mas ainda não conhecia os atalhos, espero ter contribuido…

Para os novatos ou os que não apreciam a interface em linha de comando, deixo um link de um artigo interessante: The Command Line: The Best Newbie Interface?.

Uma última dica: Como eu disse antes, vários programas implementam esses atalhos. Para o problema da digitação da senha que referi acima, se você estiver no GDM, o Control-U vai funcionar igualzinho a linha de comando! ;-)

Update 2008-10-21 10:20:00: Como apontado pelo comentário do bart9h, é a biblioteca readline e não a NCurses que faz isso. Obrigado, bart9h.

Comments

Leave a response

  1. bart9hOctober 20, 2008 @ 02:29 PM

    1- quem faz isso nao eh o ncurses, e sim a biblioteca readline (veja o `man readline`)

    2- o readline tem o modo emacs por default, e tambem o modo vi. essas teclas ai sao so modo emacs, mas quem esta acostumado com o vi pode usar o “set -o vi” para passar para esse modo, ou melhor: colocar “set editing-mode vi” no arquivo ~/.inputrc, que configura o readline, assim nao somente o shell, mas todos os programas que usam a readline, irao usar essa configuracao.

  2. Renato BesenOctober 20, 2008 @ 06:13 PM

    Já conhecia alguns, mas o Ctrl+D (pelo menos no Konsole) fecha o programa/terminal.

    No mais, boas dicas :-)

  3. DanielOctober 20, 2008 @ 11:58 PM

    Exatamente Renato, o CTRL + D no terminal VAZIO fecham o console ou faz logoff do usuário que está logado… MAS se houver qualquer caractere no terminal ele vai funcionar exatamente como colocado no texto.

    Excelentes dicas… eu conhecia o CTRL+L e o CTRL+D mas o restante eu não tinha conhecimento. Valeu pela dica!!!

  4. Sérgio BerlottoOctober 21, 2008 @ 01:27 AM

    Muito bom cara… Legal mesmo !

    É sempre bom saber estes truques…. Eu sempre gostei do terminal de comandos.. e é dificil deixar dele !

    Um abraço….

  5. Hugo BranquinhoOctober 21, 2008 @ 08:14 AM

    Para mim, o mais importante e que não foi citado é o Control + R, para você buscar os últimos comando digitados.

    Aperte Control + R, depois digite parte do comando que deseja buscar.

  6. spectraOctober 21, 2008 @ 10:14 AM

    @Hugo Branquinho,

    Pois eh… naum sei se o Control-R e o Control-S (ambos atalhos muito uteis) saum funcoes de biblioteca ou se saum funcoes do BASH e derivados… o sh naum os tem, por exemplo.

  7. spectraOctober 21, 2008 @ 10:33 AM

    @bart9h,

    Corrigido, obrigado pelo lembrete…

  8. CrescenzoOctober 21, 2008 @ 01:35 PM

    Tem uma referência mais completa da readline aqui: http://tiswww.case.edu/php/chet/readline/rluserman.html

  9. FabianoOctober 21, 2008 @ 04:00 PM

    Por favor, corriga seu texto, essa informação é completamente equivocada sobre a nCurses e maioria dos novatos que lêem isso pode não ler os comentários e ficar com o conhecimento errada sobre as bibliotecas nCurses e readline!

    nCurses é uma biblioteca “gráfica” para modo texto, para desenhar, janelas, linhas, tabelas, cores. E nCurses é uma biblioteca opcional em muitos sistemas.

    E isso não tem nada a ver com o controle de entrada de caracteres, que é feito pela biblioteca readline, que é usada por muitos programas, inclusive o bash. E esses atalhos vêm do emacs, e não o contrário. O conjunto de atalhos “emacs like” vêm configurados por padrão, mas vc pode mudar para o modo VI também ou até mesmo redefinir todos os atalhos a vontade com vc quiser.

    E isso não tem nada a ver com nCurses, hoje praticamente toda distribuição usa o bash como shell e muitas não tem nCurses ou o nCurses é opcional e instalado como depedência quando algum programa precisa.

    Você pode consultar a lista de atalhos padrão no man readline.

  10. spectraOctober 21, 2008 @ 05:24 PM

    @Fabiano,

    Como voceh pode ver, jah foi corrigido.

  11. FabianoOctober 21, 2008 @ 06:37 PM

    Ok. =)

    A propósito, vc tinha citado o screen antes e dito que este também era compilado com nCurses. Essa informação estava correta, o screen sim usa a biblioteca nCurses mas não usa readline.

  12. Dailson FernandesOctober 21, 2008 @ 07:03 PM

    Minha contribuição a este excelente artigo: CTRL+R: Pesquisa nos comandos já digitados a expressão ALT+U: Torna em maiusculo as palavras a direita do cursor ALT+L: Torna em minusculo as palavras a direita do cursor ALT+C: Capitula o comando (deixa a primeira em maiusculo) CTRL+P: Exibe os comandos digitados (para tras) CTRL+N: Exibe os comandos digitados (para frente) CTRL+W: Deleta a palavra inteira antes do cursor CTRL+U: Na verdade recorta para a área de transferencia do console (se é que existe) CTRL+Y: Cola o ultimo comando ou string recortado com o CTRL+U

    (Testados no bash)

    Um abraço a todos.

    Vida longa ao Software Livre

  13. PauloNovember 07, 2008 @ 07:15 AM

    Outros atalhos que eu uso com frequência:

    ALT+B: Move o cursor uma palavra para trás ALT+F: Move o cursos uma palavra para frente

    Abraços!