【发布时间】:2012-01-18 13:35:01
【问题描述】:
不,我不想使用 ncurses,因为我想了解 终端工作,并享受我自己编程的乐趣。 :) 它没有 必须是可移植的,它只能在基于 linux xterm 的终端仿真器上工作。
我想做的是编写一个交互式终端应用程序,例如 htop 和 vim。我的意思不是输出看起来像框或设置颜色的字符,这是微不足道的;也使内容适合窗口大小。我需要的是
如何获得 鼠标交互,例如单击字符并滚动鼠标滚轮(当鼠标位于特定字符时)以实现滚动 [编辑:在终端中当然是模拟器],以及
如何完全保存和恢复父进程的输出并将我的打印与其输出分开,所以在离开我的应用程序后,我在 shell 中输入的命令应该在那里,就像在运行 htop 并再次退出时一样:此应用程序不再可见任何内容。
我真的不想使用 ncurses。但是当然,如果你知道ncurses的哪个部分负责这些任务,欢迎告诉我在源代码中哪里可以找到,我会好好研究的。
【问题讨论】:
-
"欢迎您告诉我在源代码的哪里可以找到它"
-
我这么说是因为我确信我对 ncurses 源代码的了解不如整天使用它的人。 :)
-
大多数人使用它的 API 但不会改变它的实现,所以你遇到这样的人的机会很小。只需阅读源代码,例如,我在一分钟内找到了文件“lib_mvcur.c”(包括下载源代码),其中包含“移动物理光标和滚动的例程”。检查文件 cmets,文档看起来不错
-
大多数终端至少模拟vt220,因此您可以开始实现控制。 (尽管很少有程序足够疯狂,包括 vim,它们宁愿使用 ncurses 或至少使用 termcap)
-
首先您需要知道如何将终端设置为原始模式,其次您至少需要 termcap (libtermcap) 或滚动您自己的 tput 和抽象层。如果没有鼠标,我估计这对于具有 C 和 unix 经验的人来说需要几个月的工作。在 ESC 上超时的 tgetc 对解析器来说是讨厌的。当然不适合胆小的人......
标签: c++ c terminal interactive