在提示上方打印聊天消息?
Posted
技术标签:
【中文标题】在提示上方打印聊天消息?【英文标题】:Printing chat messages above the prompt? 【发布时间】:2014-01-17 23:22:04 【问题描述】:对于我的情况,假设 Tim 和 Bob 正在使用我的 C 聊天客户端和服务器聊天。我的聊天客户端和服务器在 bash 终端上执行。此聊天程序的光标是 ~ 键。
Tim 向 Bob 发送一条消息,上面写着 “嘿”。现在假设 Bob 在给 Tim 输入消息时收到了这条消息。 Bob 想向 Tim 发送 "Hello",但他还没有写完(所以他到目前为止只写了 "Hel")。
我希望我的应用程序能够将 Bob 的提示和他的条目保留在终端的底部,并在提示上方显示 Tim 的消息。 Bob 应该仍然能够完成他给 Tim 的消息,并且能够看到 Tim 的消息。下面是我的意思的图表,从 Bob 的客户的角度来看。有没有办法用 C 来完成这样的事情?
.......................之前............ ..................................................... ....................后............................. ..
............................... .................................
............................... <Tim> Hey
Enter Message> Hel~ Enter Message> Hel~
【问题讨论】:
听起来你想让它成为一个curses或ncurses程序,而不是仅仅打印到标准输出。 简短回答,是的。但是,你最好链接到 ncurses,它可以记住光标位置,移动到新的,然后在需要时恢复。 它还没有完全完成并且有一些错误。我想知道是否有一个实现可以让我操纵标准输出提示。 您可以使用\r
和\b
转义序列来打印已打印的字符,但我不知道有任何方法可以通过换行符进行备份。如果将它们与 stdout 一起使用,您可能还必须使用 fflush
或使其无缓冲,因为它通常默认为行缓冲,并且在打印换行符之前您将看不到任何内容。
感谢大家的建议。 Ncurses 似乎是要走的路。我什至不知道!
【参考方案1】:
如果您知道自己使用的是 ANSI 兼容终端并且知道提示长度和光标位置(假设您允许编辑输入,因此光标可能不在当前输入的末尾)并且不允许多于一行的输入[那里有很多假设],那么您似乎可以输出一个或多个“向上光标”序列,然后是回车,来自蒂姆的消息,回车,换行,然后是大量的“光标right' 序列以将光标放回原来的位置。
不过,基本上,如果您想处理这种复杂情况,那么您将前往 curses/ncurses/terminfo 类型的库。
【讨论】:
以上是关于在提示上方打印聊天消息?的主要内容,如果未能解决你的问题,请参考以下文章
哪种聊天模式更好:在输入时打印消息,还是在服务器接收到消息后打印? [关闭]
asmack android点对点聊天还在聊天中显示第三条用户聊天消息