【发布时间】: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 似乎是要走的路。我什至不知道!