【发布时间】:2012-01-29 19:58:17
【问题描述】:
窗口底部
一些应用程序,如 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 或网络搜索引擎上查询“c print to {window,screen,terminal,console} bottom”没有帮助。
这可以在 C 中以编程方式完成吗?
丢弃输入
虽然下面的一些解决方案可以将字符移动到给定位置,但存在的问题是可能需要丢弃用户输入而不是将其留在屏幕上。就像vim 的情况一样,输入“:w”并按 Enter 不会在屏幕上留下“: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 中。
【问题讨论】:
-
如果您使用基于 curses 的 UI/widget 库,例如用于 Python 的 Urwid,则可以简化任务。相关:stackoverflow.com/q/8635299/4279
标签: c unix input console command-line-interface