C中控制台底部的输入栏

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.只是尝试

  • 记住前一个光标位置
  • 显示输出,然后
  • 恢复位置

不是一个简单的解决方案:因为这些是不同的进程,尝试检索游标位置不会影响在其他进程执行期间发生的更改.

例如,如果父进行输入,则子进程不知道光标位置如何变化,并且在控制台的另一部分执行输出行之后无法恢复光标位置.

实现这一点将涉及一些进程间通信,如果有其他解决方案,则可能更为可取.

有关

cod*_*ing 12

使用标准库,没有办法做到这一点; 使用ncurses,正如您已经建议的那样,它很容易实现; 我认为本教程很好地解释了它.


hol*_*eek 7

使用ANSI转义序列可以控制光标的位置:

void gotoxy(int x, int y) {
    printf("\033[%d;%dH",x,y);
}
Run Code Online (Sandbox Code Playgroud)

因此,一旦你弄清楚终端的高度和宽度,你就可以使用该功能将光标定位在你喜欢的任何地方并打印东西.

  • 您跳跃到这样的假设:ANSI转义序列将在正在使用的任何终端上正常工作,而无需任何启动.curses/ncurses几乎肯定会更容易 (2认同)