C++程序控制终端窗口

标签 c++ linux vim terminal

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

最佳答案

在低级别,您向终端程序发送一组控制字符,告诉它要做什么。这对于手动管理来说可能有点过于复杂。

因此,您可能想查看类似 ncurses 的控制台库,它可以为您管理所有这些复杂性。

具体到程序退出后神奇地出现的先前内容,这实际上是 vim 正在利用的 xterm 功能,大多数现代终端都支持该功能。它被称为“备用屏幕”或简称为“altscreen”。本质上,您告诉终端程序“好的,现在切换到一个全新的屏幕,我们稍后再回到另一个屏幕”。

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

echo -e "\033[?47h"

然后切换回来:

echo -e "\033[?47l"

或者一个更完整的解决方案,它对你的 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" 

关于C++程序控制终端窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12919803/

相关文章:

c++ - + 运算符重载以添加不同的 C++ 类对象

c++ - 在windows上使用zlib编译boost 1.62/1.63

angularjs - 简单的 AngularJS 应用程序 : Showing error in Gruntfile. js

c - 管道的 self 实现,如何知道有多少进程对我的管道有文件描述符?

c++ - 打开通过蓝牙发送的接收文件 - 如何等到完全接收?

Vim(终端)- 复制到 x 剪贴板并在暂停时粘贴

search - VIM 快速 'Find in Files'?

c++ - 继承构造函数

sorting - 如何按2个不同的列排序?

c++ - 如何在 C++ 中退出程序执行?