我正在编写一个类似于shell的程序。启动后,会出现提示并输入一些特定于应用程序的命令。
到目前为止,这项工作正常。但是,我想在Bash中添加对命令历史记录的支持,因此用户可以点击向上或向下箭头并查看以前输入的命令。
我已经包含了ncurses库,并且我使用getch()进行了一个简单的hello world测试,以确保正确报告向上和向下箭头。
困扰我的是,似乎要求我调用initscr()来清除屏幕以便我使用getch()。
好的,问题是:
有没有人知道如何使用ncurses getch()函数而不先调用initscr()?如果没有,我可以让它不清楚屏幕吗?基本上,我希望getch()的行为与getchar()相同,如果这是有意义的。
提前致谢!
编辑:我认为最好的例子是Python如何在交互模式下运行。
答案 0 :(得分:9)
Curses希望完全控制屏幕,并优化对屏幕的写入,尤其是在慢速串行线路上。要做到这一点,它需要知道屏幕上的内容,而对大多数终端来说,唯一合理的方法是从空白屏幕开始并跟踪你写给终端的内容。
因此,我怀疑(n)curses是你的shell的错误工具。您可能需要在抽象层上迈出一步,然后使用terminfo和来自终端的非阻塞读取(标准输入)。
(这不是很有帮助。抱歉。)
答案 1 :(得分:9)
使用像readline()这样的界面可能更简单,而不是诉诸于成熟的ncurses。
答案 2 :(得分:5)
你可以在rlwrap内调用你的程序,并且没有痛苦的功能......
答案 3 :(得分:3)
这是关于此的另一个discussion。提供的解决方案是:
当然还有第三个选项来获取ncurses源代码并对其进行修改,以便它不再清除屏幕。
答案 4 :(得分:0)
您是否考虑过创建自定义terminfo或termcap条目的简单方法,这些条目缺少序列来清除屏幕,然后在运行程序之前将终端设置切换到右侧?你也可以在ncurses中使用newterm()和set_term()。使用termcap比较容易,因为你可以包含另一个终端并覆盖它的一些功能。