
A biblioteca readline é uma ferramenta poderosa que facilita a leitura e edição de entradas de usuário em programas de linha de comando.
Desenvolvida originalmente para o GNU Project, ela oferece uma série de funcionalidades que melhoram a experiência do usuário ao interagir com aplicações de terminal.
A readline é usada em várias ferramentas populares de linha de comando, incluindo o shell Bash, o Python REPL e muitos outros.
readline?A principal finalidade da biblioteca readline é melhorar a experiência de entrada de texto em terminais. Suas funcionalidades incluem:
readline mantém um histórico dos comandos inseridos, permitindo que os usuários naveguem e reutilizem comandos anteriores.
Para instalar a biblioteca readline você pode usar o gerenciador de pacotes do seu sistema operacional. Exemplo no Ubuntu usando o APT:
sudo apt install libreadline-devVocê também pode compilar e instalar a readline diretamente, clique no botão abaixo, descompacte e siga as instruções dentro da pasta descompactada para compilar e instalar:
Clique aqui para fazer o download da readline
readlineVamos explorar alguns exemplos práticos para ilustrar como a biblioteca readline pode ser utilizada.
Um exemplo básico de como utilizar readline para ler uma linha de entrada do usuário.
Neste exemplo, a função
readlineé utilizada para ler uma linha de entrada do usuário com o prompt “Digite algo: “. A entrada é então impressa no terminal.
#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>
int main() {
char *input;
input = readline("Digite algo: ");
if (input) {
printf("Você digitou: %s\n", input);
free(input);
}
return 0;
}Compile usando a flag
-lreadline, ex.:gcc main.c -lreadline.
#include <iostream>
#include <readline/readline.h>
int main() {
std::string input = readline("Digite algo: ");
if(input.c_str()){
std::cout << "Você digitou: " << input << '\n';
}
return EXIT_SUCCESS;
}Compile usando a flag
-lreadline, ex.:g++ main.cpp -lreadline.
A readline também permite que você armazene e reutilize comandos anteriores. Veja um exemplo simples:
#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>
#include <readline/history.h>
int main() {
char *input;
while((input = readline(">>> ")) != NULL) {
if (*input) {
add_history(input);
}
printf("Você digitou: %s\n", input);
if(strcmp(input, "exit") == 0){
free(input);
break;
}
free(input);
}
return 0;
}#include <iostream>
#include <readline/readline.h>
#include <readline/history.h>
int main(){
char* input;
std::string line {};
for (;;){
input = readline(">>> ");
line = input;
if(input){
add_history(input);
}
if (line == "exit"){
free(input);
break;
}
free(input);
}
return EXIT_SUCCESS;
}Neste exemplo, o comando digitado pelo usuário é adicionado ao histórico se não estiver vazio, permitindo que ele seja reutilizado apenas pressionando a tecla direcional para cima: ↑, caso não tivesse adicionado o add_history(input), ao teclar o evento iria exibir de forma literal: ^[[A^.
Para mais informações, acesse: https://tiswww.case.edu/php/chet/readline/rltop.html