【问题标题】:Use stdin along with ncurses将标准输入与 ncurses 一起使用
【发布时间】:2025-12-21 16:05:12
【问题描述】:

我将ncurses 用于涉及从用户获取输入的简单用户界面。 输入是一个 1 行高的窗口,只有一个光标。 我目前正在使用wgetnstr(inputwindow, input, inputlen)

我想要的是能够编辑该输入行,就像 readline 一样。也就是说,能够使用 ^W(^U 顺便说一句),返回缓冲区并进行更改等。 如果我可以保留输入的历史并能够使用“向上”箭头访问它,那也很棒。

但是,除了ncurses 提供的功能之外,我无法让 stdin 使用任何东西。如果这能让我获得上述好处,我可以放弃inputwindow。但我不确定这是否可能。

所以,

  • 是否可以使用readline 或使用ncurses 及其提供的输入功能来实现此类功能? 和/或
  • 是否有可能以及如何在curses 窗口下方有一个空行,这将允许用户直接使用stdin 提供输入(这是所有常见的读取输入函数,因此甚至直接readline)?

如果这些是可行的,一些简单的代码会很棒,但指导和指针也很棒。如果没有,很高兴知道,而不是浪费时间试图让它发挥作用。

【问题讨论】:

  • here 是一个类似的问题,但实际上并不相同。
  • 可能是我想要的最好的东西,就是 cli irc 客户端如何处理输入。例如。 irssiweechat。我会挖一点..

标签: c stdin readline ncurses curses


【解决方案1】:

ncurses 期望控制整个屏幕。将 ncurses 输入/输出与非 ncurses 输入/输出混合是可能的,但我不建议尝试。

如果您需要在 ncurses 程序中使用 readline 样式输入,您需要自己实现它。

form 库(包含在 ncurses 中)允许您定义具有可编辑字段的表单。不过,您将需要自己处理历史记录。这些表单可以放置在panels,以便更轻松地控制在屏幕上的放置。

【讨论】: