一个像vi或者man或者其他程序这样的程序如何用程序自己的内容replaceterminal内容,然后在退出那些程序之后把旧的terminal内容带回去?
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 h te:<Esc> [? 1 0 4 9 l
另一方面,xterm支持在非xterm终端中非常广泛。 除了具有异常或过时的$ TERM设置的用户,仅支持xterm不太可能导致问题。 来源:我支持这样做的产品。
通过发送控制序列到终端(xterm,vt-220)或使用ncurses(如mc)。
ANSI转义序列以ESC (\ 033八进制) [ 。 ; 分离数字。
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"); }