我正在尝试实现一个类似于聊天客户端的应用程序,当用户输入自己的消息时,消息可以到达。
我将解释我希望我的程序如何表现一个例子: 在传入消息之前:
>user partial input
传入消息后:
>the new message
>user partial input(cursor is here)
相反,传入消息之后会自然发生这种情况:
>user partial input the new message
>(cursor is here)
之后,用户仍然可以使用退格键删除之前写的内容,但屏幕上没有显示,并且整体上存在UI混乱。
有没有办法在不使用ncurses的情况下实现所需的行为?
谢谢。
编辑:对不起,我忘了写我的环境是什么,这是Cygwin。感谢所有答案。
答案 0 :(得分:4)
虽然ncurses可能是实现这一目标的最灵活,最简单的方法,但你可以通过一些工作自己完成。
您必须自己仲裁IO。您可以使用“\ r”返回行的开头而不使用ncurses或任何特定于平台的终端交互。
整体流程将是:
这里有很多边缘情况要考虑,但ncurses不是你唯一的选择。就我测试而言,这种技术适用于Windows和Linux。
答案 1 :(得分:1)
没有使用GUI或ncurses没有(实用)解决方案。
几年前我和ncurses写了类似的东西。这是最小的(两个简单的窗口),但不到100行代码与ncurses有关,所以它几乎不是一个不可逾越的障碍。
ncurses的问题在于它起初看起来有些古怪。文档并没有那么有用,也没有那么多人知道或关心它,所以当你把自己画成一个角落时,很难找到帮助。但是,如果你保持简单,你应该没事。
答案 2 :(得分:0)
你可以自己将转义的控制序列发送到终端,但它与重新实现ncurses一样:)
答案 3 :(得分:0)
是的,正如评论所说,你必须通过ncurses,ANSI代码或(可怕的)Windows API与终端本身进行交互。没有办法使用标准流来实现这一点( streams 它们只进行输入/输出,而不是显示或光标识别)。
此外,流会公开同步(阻塞)API,因此您无法在不使用线程或反应器的情况下从一个API读取并写入另一个API。