我想在命令行应用程序a上自动完成,但是在bash中你可以使用tab键来完成命令。但getchar()似乎要等到收到换行符之后才开始读取任何字符。
scanf似乎以同样的方式工作。
有什么方法可以一次扫描一个字符,无论它们是空格还是控制字符?
我希望能够在输入构建命令时通过char读取char,然后一旦tab char收到,我将尝试查找如何在我的应用程序中完成并打印完整命令。
答案 0 :(得分:3)
您需要GNU Readline Library。只要用户按下某个键(rl_bind_key()
,就可以使用'\t'
功能添加文件名完成处理功能。
如果您尝试使用自己的readline样式函数,那么您将面临一个受伤的世界。
答案 1 :(得分:3)
不要重新发明轮子。
使用其他项目用于构建命令行的内容:为您实现该作业的库。
许多CLI提示取决于GNU readline,我觉得这很好,如果有点混乱和沉重。而且,它是GPL,所以取决于你是否喜欢。
我会调查linenoise。它非常轻量级,如果您决定真的想要自己实现用户界面而不是包含一个或两个文件,那么,确实如此,但是看一下相当简洁的参考实现成为。警告:到目前为止,我自己还没有使用它。但是,API非常简单,可以在他们的example中找到。
一种流行的替代方案是libedit/editline。