窗底
一些应用程序,如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很好地解释了这一点。

09-25 17:22
查看更多