以编程方式将终端扩展到特定大小

Programmatically expand terminal to a specific size

本文关键字:扩展到 终端 编程 方式      更新时间:2023-10-16

在我的输出中,某些行每隔几秒钟刷新一次。如果我通过单击 F11 调整终端大小,那么输出就像我想要的那样。如果终端不够大,一些刷新的长线被分成两部分,因此,只刷新了一部分线,每次刷新线我也会得到新线。

如果我可以指定终端的默认大小(从我的程序调整终端大小(,则可以轻松避免这种情况。如果我能禁止用户在程序运行时更改终端大小,那就太好了。

while(1)
{
    cout<<"Long line that is refreshed every 5s... r";
    //if line is splited in two lines, r will return to beginning of that new line
    //and the first part of original line would stay as it is(won't be rewrited)
    sleep(5);
}

如何指定端子大小或停止端子调整大小?

某些终端仿真器(包括默认的 macOS Terminal.app(支持调整大小/移动/等以响应打印的控制序列。 这些序列是相当标准的,但并非所有终端仿真器都实现了所有这些序列。

例如:

# set terminal width to 50, height to 100
cout << "e[8;50;100t";

此答案包括其他一些可用控制序列的概述。

我认为

你不能禁止用户更改终端大小。 更好的方法是捕获每次更改窗口大小时发送到进程的SIGWINCH 信号,并使用TIOCGWINSZ/TIOCGSIZE ioctl((来获取尺寸。