Консольное приложение Linux C не использует предыдущую команду для «keyup» - PullRequest
0 голосов
/ 06 октября 2018

У меня возникает следующая проблема:

int main(int argc, char **argv){
    while(1){
        char command[25];
        scanf(" %25[^\n]s", command);
        printf("Command '%s'\n", command); 
    }
    return 0;
}  

Теперь, когда я что-то набираю в консоли, он печатает мне сообщение с тем, что я только что набрал.
Но если я использую клавиша со стрелкой вверх , чтобы вывести последнюю команду из памяти, отправляемая команда имеет вид

^ [[A

, что приводит к перемещению курсорадо программы.
Теперь, как это исправить?
Я хочу, чтобы сработала последняя команда из памяти.
Заранее спасибо!

1 Ответ

0 голосов
/ 06 октября 2018

Это на самом деле довольно нетривиальная вещь, которую вы просите.К счастью, есть библиотека для ее исправления: Библиотека GNU Readline .Знайте о его лицензировании, все же.Последнее, что я слышал, это настоящий GPL, и поэтому ваша собственная программа должна быть такой же, если вы ее используете.NetBSD имеет библиотеку под названием libedit , которая, по-видимому, утверждает, что делает то же самое с менее ограничительной лицензией.

Вот еще несколько справок по readline: https://eli.thegreenplace.net/2016/basics-of-using-the-readline-library/

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

...