【发布时间】:2019-09-03 19:03:31
【问题描述】:
我正在编写一个简单的应用程序来使用 ptys 并运行诸如 vi 之类的命令。当它们运行时,无论我的终端仿真器的大小如何,pty 都会在一个非常小的窗口上运行;这是一个截图:https://imgur.com/a/DdRG2Ib 光标就在 pty 外面(屏幕是空白的,外面什么都没有写)。
将终端模拟器保持在最大尺寸,我的目标是“扩展” pty 的尺寸并使用全屏。
我的方法是获取标准输出的大小并将其设置在终端的主大小上,遵循我在此处阅读的内容:Can't change terminal size on pty/N (works on ttyN)
#define err(x) { if((x)==-1) exit(1); }
int set(int masterfd) {
float k = 0;
struct winsize w;
err(ioctl(STDOUT_FILENO, TIOCGWINSZ, &w));
printf("wsz: r:%d c:%d\n", w.ws_row, w.ws_col);
w.ws_row *= k; w.ws_col *= k;
err(ioctl(masterfd, TIOCSWINSZ, &w));
return 1;
}
当k 不为零时,整个屏幕都混乱了。只有当行和列都为零时,终端很小但可以工作。
打开master后,我期待用master fd调用set()来调整终端的大小。对printf() 的调用显示STDOUT_FILENO 上的行和列是我的显示大小,在主fd 上它们是0。
如何让 pty 使用我的全屏模式?
【问题讨论】: