vi 或 man 之类的程序或任何其他程序如何用程序自己的内容替换终端内容,然后在退出这些程序后又带回旧的终端内容?
问问题
3231 次
2 回答
12
Vi 翻转到终端支持的备用屏幕缓冲区。这是使用转义序列实现的。有关完整详细信息,请参阅此链接。
这些的 termcap 条目是“ti”进入,“te”退出全屏模式。
正如@Celada 在下面指出的那样,硬编码 xterm 转义序列不是一个好主意™,因为序列根据 $TERM 而有所不同,例如:
xterm-颜色 ti: <Esc> 7 <Esc> [ ? 47 小时 te: <Esc> [ 2 J <Esc> [ ? 4 7 l <Esc> 8 xterm-256color ti: <Esc> [ ? 1 0 4 9 小时 te: <Esc> [ ? 1 0 4 9 升
另一方面,现在非 xterm 终端对 xterm 的支持非常广泛。仅支持 xterm 不太可能导致问题,除非用户具有特殊或过时的 $TERM 设置。资料来源:我支持这样做的产品。
于 2013-02-23T18:57:13.847 回答
12
通过将控制序列发送到终端(xterm、vt-220)或使用 ncurses(如 mc)。
ANSI 转义序列以ESC(\033 octal)开头[。 ;分隔数字。
C 清除屏幕并将光标移动到 1,1 的示例。
#include <stdio.h>
int main()
{
// clear the terminal
printf("\033[2J\033[1;1H");
printf("hello");
}
切换到备用缓冲区和返回 (xterm) 的示例。
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("\033[?1049h\033[H");
printf("hello\n");
sleep(1);
printf("bye");
sleep(1);
printf("\033[?1049l");
}
于 2013-02-23T19:48:43.553 回答