窗底
一些应用程序,如vim、mutt、aptitude包含
用于输出和
供用户键入或显示状态的底部部分。
(假设有一个子进程要输出,另一个子进程要接受用户输入。其目的是允许在键入输入或查看状态的同时更新输出。)
Actions Undo Package Resolver Search Options Views Help
C-T: Menu ?: Help q: Quit u: Update g: Download/Install/Remove Pkgs
|
|
|
|
|
┌─────────────┐ |
│Loading cache│ |
└─────────────┘ |
|
|
|
|
|
|
|
--------------------------------------------------------------------------- |
Initialising package states 100% |
+-------------------------------------------------------+
| some output here |
| |
| |
| |
| |
| |
|-------------------------------------------------------+
|:input here |
+-------------------------------------------------------+
Ncurses tutorial没有提到这显然是可能的。
在stackoverflow或web搜索引擎上查询“c print to{window,screen,terminal,console}bottom”是没有帮助的。
这可以用C语言编程实现吗?
丢弃输入
虽然下面的一些解决方案可以将字符移动到给定位置,但可能需要丢弃用户输入而不是将其留在屏幕上。与
vim
的情况一样,键入“:w
”并按回车键不会在屏幕上留下“:w
”。更新。这里有:How to delete text after getstr() c++ ncurses
窗口焦点-问题的未解决部分
当您在窗口底部输入时,顶部的文本会发生变化,我们会看到焦点移回底部的问题。截至12月29日的解决方案中没有这一点。
更新1。只是想
记住上一个光标位置,然后
显示输出,然后
恢复位置
不是一个简单的解决方案:由于这些是不同的进程,检索光标位置的尝试不会影响在其他进程执行期间发生的更改。
例如,如果父对象接受输入,则子对象不知道光标位置如何更改,并且在控制台的另一部分执行一行输出后无法恢复光标位置。
实现这一点需要一些进程间通信,如果有其他解决方案,它们可能更可取。
相关的
Get Input from keyboard without waiting for input相关,但不够具体。
How to make a chat like UI using Python Urwid?urwid for python,它完成了这项工作(根据下面注释中的j.f.sebastian)。不幸的是不是在C。
最佳答案
使用标准库是不可能的;使用ncurses,正如您已经建议的那样,很容易实现;我认为this tutorial很好地解释了这一点。