GNU Readline: как установить начальное содержимое входной строки

Коллеги, подскажите, как в readline () задать начальное значение строки ввода?

Предположим, я могу с большой долей вероятности угадать, какое значение введет пользователь. Хотя, вероятность другого значения остается.

Поэтому я хотел бы, чтобы исходные данные с самого начала выглядели как

Введите имя пользователя: Джон

нет

Введите имя пользователя:

Можно ли ввести начальное значение в строковый буфер функции readline (), чтобы оно выводилось при запуске? И тогда пользователь либо его изменит, либо просто нажмет ввод, если согласен с этим.

Заранее благодарим за ответ.


person ogogon    schedule 13.12.2020    source источник


Ответы (1)


Благодаря любезной помощи Чета Рэми, разработчика GNU Readline, я уже знаю ответ на свой вопрос.

Для этого вам нужно использовать механизм хуков, создать и объявить функцию хука запуска.

static char *deftext;

static int
set_deftext ()
{
    if (deftext) {
        rl_insert_text (deftext);
        deftext = (char *) NULL;
        rl_startup_hook = (rl_hook_func_t *) NULL;
    }

    return 0;
}

Далее в основном коде:

deftext = "Initial Text";
rl_startup_hook = set_deftext;
line = readline ("My Prompt> ");

Пример приведен в раздаче, в файле examples / rl.c

person ogogon    schedule 17.12.2020