19 c unix console input command-line-interface
一些应用程序,如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% |
Run Code Online (Sandbox Code Playgroud)
+-------------------------------------------------------+
| some output here |
| |
| |
| |
| |
| |
|-------------------------------------------------------+
|:input here |
+-------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
Ncurses教程没有提到这显然是可能的.
在StackOverflow或Web搜索引擎上对" c print to {window,screen,terminal,console} bottom "的查询没有帮助.
这可以通过编程方式在C中完成吗?
虽然下面的一些解决方案可以将字符移动到给定位置,但是存在可能需要丢弃用户输入而不是将其留在屏幕上的问题.就像在vim这种情况下,键入" :w"并按Enter键不会:w在屏幕上留下" ".
更新.这可以在这里找到:如何在getstr()c ++ ncurses之后删除文本
当您在窗口底部键入输入并且顶部的文本发生更改时,我们会看到将焦点移回底部的问题.截至12月29日的解决方案中没有这一点.
更新1.只是尝试
这不是一个简单的解决方案:因为这些是不同的进程,尝试检索游标位置不会影响在其他进程执行期间发生的更改.
例如,如果父进行输入,则子进程不知道光标位置如何变化,并且在控制台的另一部分执行输出行之后无法恢复光标位置.
实现这一点将涉及一些进程间通信,如果有其他解决方案,则可能更为可取.
使用ANSI转义序列可以控制光标的位置:
void gotoxy(int x, int y) {
printf("\033[%d;%dH",x,y);
}
Run Code Online (Sandbox Code Playgroud)
因此,一旦你弄清楚终端的高度和宽度,你就可以使用该功能将光标定位在你喜欢的任何地方并打印东西.