C中控制台底部的输入栏

问题描述 投票:19回答:4

窗口底部

某些应用程序,例如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语言以编程方式完成吗?

放弃输入

虽然下面的某些解决方案可以将字符移动到给定位置,但存在的问题是可能需要放弃用户输入而不是将其保留在屏幕上。像在vim的情况下一样,键入“ :w”并按Enter不会在屏幕上留下“ :w”。

更新。可以在这里找到:How to delete text after getstr() c++ ncurses

窗口焦点-问题的未解决部分

虽然您在窗口底部输入内容,顶部的文本发生变化,但是我们看到了将焦点移回底部的问题。截至12月29日,解决方案中没有此功能。


更新1.只是尝试

    记住先前的光标位置,然后
  • 显示输出,然后
  • 恢复位置
  • 不是一个简单的解决方案

:由于这些是不同的进程,因此检索游标位置的尝试不会影响其他进程执行期间发生的更改。 例如,如果父级接受输入,则子级在控制台的另一部分执行了一行输出后,将不知道光标位置如何变化并且无法恢复光标位置。

实施此操作将涉及一些进程间通信,并且如果有其他解决方案,则可能更可取。

相关

  • How to make a chat like UI using Python Urwid?适用于Python的Urwid(根据以下评论中的
  • J.F。Sebastian
  • ”)。不幸的是不在C中。窗口底部一些应用程序,例如vim,mutt,aptitude包含用于输出的顶部窗口部分和用于用户输入或用于状态显示的底部部分。 (假设有一个孩子...
    c unix input console command-line-interface
    4个回答
    12
    投票
    使用标准库,无法做到这一点;正如您已经建议的那样,使用ncurses可以轻松实现;我认为this tutorial解释得很好。

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

    4
    投票
    此答案建议使用略有不同的方法,但是它避免了使用当前方法引入的许多麻烦。我希望可以实现这些简化。

    1
    投票
    © www.soinside.com 2019 - 2024. All rights reserved.