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

时间:2017-02-10 21:40:04

标签: c++ linux terminal resize

在我的输出中,某些行每隔几秒刷新一次。如果我通过单击 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);
}

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

例如:

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

This answer包括其他一些可用控制序列的概述。