Страницы

Поиск по вопросам

пятница, 26 октября 2018 г.

Добавить текст в строку ввода

Приветствую. Хочу сделать возможность редактирование переменной, но не нашел функции для добавления текста уже имеющегося значения в строку ввода консоли, для его редактирования. Не подскажете функцию?
P.S Вопрос глупый, но гугл ничего не выдает из-за засилия других глупых вопросов.


Ответ

Вот (довольно искусственный) пример использования GNU readline на Си (также компилируется и g++) (а вот ссылка на нее для windows)
Программа анализирует прочитанную строку и если в ней есть слово, начинающееся с V:, то оно подставляется для ввода следующей строки.
#include #include #include #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 в начале области ввода подставлен из предыдущей введенной строки.

Комментариев нет:

Отправить комментарий