Referência Rápida de Interface: Biblioteca readline

Posted by – 19/10/2008

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.

15 Comments on Referência Rápida de Interface: Biblioteca readline

  1. Joana says:

    Como é que instalo a biblioteca readline a partir do terminal?

    • spectra says:

      Cada distribuição, usualmente, tem um pacote pronto com essa biblioteca e, como ela é utilizada por diversas ferramentas básicas, há grandes chances de que ela já esteja instalada no seu computador. Algumas distribuições, como é o caso do Debian, separam as porções da biblioteca que servem para desenvolvimento e as porções que servem para serem utilizadas de forma compartilhada pelos demais pacotes instalados… Nesse caso, deve existir um pacote com essa porção esperando para ser instalado. No caso do Debian, os pacotes relevantes são:

      • libreadline6 – pacote que já deve estar instalado uma vez que é usado por diversas ferrametas
      • libreadline6-dev – pacote com as porções de desenvolvimento.

      Instalar algum desses pacotes também vai depender de qual distribuição está usando. No Debian é tão simples quanto

      bash# apt-get install libreadline6 libreadline6-dev
  2. spectra says:

    @Fabiano,

    Como voceh pode ver, jah foi corrigido.

  3. spectra says:

    @bart9h,

    Corrigido, obrigado pelo lembrete…

  4. spectra says:

    @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.

  5. Paulo says:

    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!

  6. 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

  7. Fabiano says:

    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.

  8. Fabiano says:

    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.

  9. Crescenzo says:

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

  10. Hugo Branquinho says:

    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.

  11. Muito bom cara…
    Legal mesmo !

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

    Um abraço….

  12. Daniel says:

    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!!!

  13. Renato Besen says:

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

    No mais, boas dicas 🙂

  14. bart9h says:

    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.

Leave a Reply

Your email address will not be published. Required fields are marked *