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-dev
Você 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
readline
Vamos 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