C++程序控制终端窗口

imk*_*dal 4 c++ linux vim terminal

当在终端中使用vim时,它基本上会消除终端的窗口,并为您提供一个新的窗口以开始编码,但是当您退出vim时,仍会列出终端的先前输出.如何清除终端以便它只输出程序的输出,但是一旦进程结束就返回到正常状态?(在linux中,fedora)

tyl*_*erl 12

在低级别,您向终端程序发送一组控制字符,告诉它该做什么.这可能有点太复杂,无法手动管理.

因此,您可能希望查看像ncurses这样的控制台库,它可以为您管理所有这些复杂性.

特别是在程序退出之后神奇地出现的先前内容,这实际上是vim正在利用的xterm特性,并且大多数现代终端都支持.它被称为"备用屏幕"或简称为"altscreen".基本上你告诉终端程序"好的,现在切换到一个全新的屏幕,我们稍后会再回到另一个屏幕".

切换到备用屏幕\E[?47h的命令通常是,而切换回来的命令是\E[?47l For fun试试这个:

echo -e "\033[?47h"
Run Code Online (Sandbox Code Playgroud)

然后切换回:

echo -e "\033[?47l"
Run Code Online (Sandbox Code Playgroud)

或者对于一个更完整的解决方案,它依赖于你的shell来设置正确的东西(这些是vim通常使用的序列):

echo -e "\0337\033[?47h" # Save cursor position & switch to alternate screen
# do whatever

#Clear alternate screen, switch back to primary, restore cursor
echo -e "\033[2J\033[?47l\0338" 
Run Code Online (Sandbox Code Playgroud)