readline() внутренний буфер
Использование GNU Readline:
Функция readline()
отображает подсказку и читает ввод пользователя.
Могу ли я изменить его внутренний буфер? и как этого добиться?
#include <readline/readline.h>
#include <readline/history.h>
int main()
{
char* input;
// Display prompt and read input
input = readline("please enter your name: ");
// Check for EOF.
if (!input)
break;
// Add input to history.
add_history(input);
// Do stuff...
// Free input.
free(input);
}
}
1 ответ
Решение
Да, можно изменить буфер редактирования readline, например, с помощью функции rl_insert_text()
, Чтобы сделать это полезным, я думаю, вам нужно будет использовать немного более сложный "интерфейс обратного вызова" readline вместо пения и танца. readline()
функция в вашем примере.
Readline поставляется с очень хорошей и полной документацией, поэтому я просто привожу минимальный пример программы, которая поможет вам начать:
/* compile with gcc -o test <this program>.c -lreadline */
#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>
void line_handler(char *line) { /* This function (callback) gets called by readline
whenever rl_callback_read_char sees an ENTER */
printf("You changed this into: '%s'\n", line);
exit(0);
}
int main() {
rl_callback_handler_install("Enter a line: ", &line_handler);
rl_insert_text("Heheheh..."); /* insert some text into readline's edit buffer... */
rl_redisplay (); /* Make sure we see it ... */
while (1) {
rl_callback_read_char(); /* read and process one character from stdin */
}
}