Linux C 控制台应用程序未使用 "keyup" 上的先前命令
Linux C console application not using previous command on "keyup"
我遇到了以下问题:
int main(int argc, char **argv){
while(1){
char command[25];
scanf(" %25[^\n]s", command);
printf("Command '%s'\n", command);
}
return 0;
}
现在,每当我在控制台中输入内容时,它都会向我打印一条消息,其中包含我刚刚输入的内容。
但是,如果我使用 向上键 从内存中取出最后一条命令,则发送的命令是
^[[A
这导致光标被程序向上移动。
现在我该如何解决这个问题?
我希望触发内存中的最后一个命令。
提前致谢!
这实际上是您要求的非常重要的事情。幸运的是,有一个库可以修复它:GNU Readline library. Be aware about its licensing, though. Last I heard, it's actual GPL and therefore your own program needs to be that, too, if you use it. NetBSD has a library called libedit,它似乎声称可以使用限制较少的许可来做很多相同的事情。
这里有一些关于 readline 的更多帮助:https://eli.thegreenplace.net/2016/basics-of-using-the-readline-library/
如果您能接受不将其直接集成到您自己的程序中的想法,那么有一个名为 rlwrap 的方便的实用程序,它至少可以透明地为最终用户提供一些优点。
我遇到了以下问题:
int main(int argc, char **argv){
while(1){
char command[25];
scanf(" %25[^\n]s", command);
printf("Command '%s'\n", command);
}
return 0;
}
现在,每当我在控制台中输入内容时,它都会向我打印一条消息,其中包含我刚刚输入的内容。
但是,如果我使用 向上键 从内存中取出最后一条命令,则发送的命令是
^[[A
这导致光标被程序向上移动。
现在我该如何解决这个问题?
我希望触发内存中的最后一个命令。
提前致谢!
这实际上是您要求的非常重要的事情。幸运的是,有一个库可以修复它:GNU Readline library. Be aware about its licensing, though. Last I heard, it's actual GPL and therefore your own program needs to be that, too, if you use it. NetBSD has a library called libedit,它似乎声称可以使用限制较少的许可来做很多相同的事情。
这里有一些关于 readline 的更多帮助:https://eli.thegreenplace.net/2016/basics-of-using-the-readline-library/
如果您能接受不将其直接集成到您自己的程序中的想法,那么有一个名为 rlwrap 的方便的实用程序,它至少可以透明地为最终用户提供一些优点。