我正在编写一个类似于shell的程序.启动后,会出现提示并输入一些特定于应用程序的命令.
到目前为止这个工作正常.但是,我想在Bash中添加对命令历史记录的支持,因此用户可以点击向上或向下箭头并查看以前输入的命令.
我已经包含了ncurses库,我用getch()做了一个简单的hello world测试,以确保正确报告向上和向下箭头.
困扰我的是,似乎要求我调用initscr()来清除屏幕以便我使用getch().
好的,问题是:
有没有人知道如何使用ncurses getch()函数而不先调用initscr()?如果没有,我可以让它不清楚屏幕吗?基本上,我希望getch()的行为与getchar()相同,如果这有意义的话.
提前致谢!
编辑:我认为最好的例子是Python如何在交互模式下运行.
Curses希望完全控制屏幕,并优化对屏幕的写入,尤其是在慢速串行线路上.要做到这一点,它需要知道屏幕上的内容,并且对大多数终端执行此操作的唯一合理方法是从空屏幕开始并跟踪您写入终端的内容.
因此,我怀疑(n)curses是你的shell的错误工具.您可能需要在抽象层上迈出一步,然后使用terminfo和来自终端的非阻塞读取(标准输入).
(这不是很有帮助.抱歉.)
使用像readline()这样的接口可能更简单,而不是诉诸于成熟的ncurses.
你可以只从whithin调用程序rlwrap和具备的功能,而不痛...