【问题标题】:Terminal control library that blocks on both input and some custom data channel?在输入和一些自定义数据通道上都阻塞的终端控件库?
【发布时间】:2025-12-09 05:40:01
【问题描述】:

ncurses 的阻塞模式似乎只允许在标准输入上阻塞 - 也就是说,我没有选择做一些 select()-esque 的事情,getch() 阻塞直到 或者 一个键被按下例如数据到达管道。我是否遗漏了什么,或者是否有其他终端控件库允许我这样做?

编辑:我的目标是 Linux 平台,虽然解决方案越通用越好。

【问题讨论】:

  • 显然,getch() 的行为是不可移植的,(参见:*.com/a/30433550/8507637)。包含您的目标操作系统会很有帮助。

标签: ncurses curses


【解决方案1】:

有一个实验性的configure-option,很少使用:

--enable-wgetch-events
使用实验性 wgetch-events 代码编译。见ncurses/README.IZ

【讨论】:

  • 这很有趣,虽然因为我使用的是非 C 语言,所以要使用此功能需要在我的程序中编译和发布自定义版本的 ncurses,还需要创建我自己的 FFI 包装器除了“标准”功能外,还公开wgetch_events()wgetstrn_event()。如有必要,我会这样做,但如果有更简单的东西,我宁愿使用它。
  • @fouric 你用的是哪种语言?
  • @LucasRamage Common Lisp