Приветствую. Хочу сделать возможность редактирование переменной, но не нашел функции для добавления текста уже имеющегося значения в строку ввода консоли, для его редактирования. Не подскажете функцию?
P.S Вопрос глупый, но гугл ничего не выдает из-за засилия других глупых вопросов.
Ответ
Вот (довольно искусственный) пример использования GNU readline на Си (также компилируется и g++)
(а вот ссылка на нее для windows)
Программа анализирует прочитанную строку и если в ней есть слово, начинающееся с V:, то оно подставляется для ввода следующей строки.
#include
static char *ins;
int f() {
if (ins && ins[0]) {
rl_insert_text(ins);
rl_redisplay();
}
}
int
main (int ac, char *av[])
{
char *line = 0, txt[1000] = "", *p;
rl_pre_input_hook = f; // readline() вызовет нашу функцию перед чтением ввода (после вывода промпта)
rl_bind_key('\t', rl_insert); // для вставки символа табуляции (иначе он работает как поиск дополнения имени файла)
ins = txt;
while (line = readline("> ")) {
printf("line: %s
", *line ? line : "");
txt[0] = 0;
if (p = strstr(line, "V:"))
sscanf(p, "%s", txt);
if (line[0])
add_history(line);
free(line);
}
return puts("End") == EOF;
}
Поскольку вложенные функции не поддерживаются в С++ функцию f() (readline hook) и массив char txt[] (или указатель на него, как в этом примере) приходится выносить на внешний уровень.
Пример вызова:
avp@avp-ubu1:hashcode$ g++ t-readline.c -lreadline
avp@avp-ubu1:hashcode$ ./a.out
> ksdkk
line: ksdkk
> ueru V:444
line: ueru V:444
> V:444 kksk
line: V:444 kksk
> End
В строке 5 (третий вызов readline) текст V:444 в начале области ввода подставлен из предыдущей введенной строки.
Комментариев нет:
Отправить комментарий