我正在开发一种在多个用户之间共享终端会话的工具。
因此,我的工具会增加pty,启动外壳并将其I / o映射到PTY。然后将stdin / stdout也映射到pty。
在启动时和终端窗口调整大小时,PTY会收到具有新大小的TIOCGWINSZ系统调用。
现在,我想让终端上的最后一行保持自由,以在此处渲染ui / statusbar。将TIOCGWINSZ调用中的行数减少1似乎是行之有效的。
出于演示目的,我在TIOCGWINSZ中将尺寸设置为始终为80x23现在,运行bash时实际上不受我希望的限制为23行。运行vim时,vim本身会遵守大小-这很好。但是退出vim之后,bash现在仅限于80x23吗?
只要终端不调整大小就可以使用,在bash重新使用完整的终端大小之后。
参见:https://asciinema.org/a/IXz2e0ni2ASPQcYpvcze8TePK
vim在这里做什么来限制“终端大小”?某种神奇的逃生顺序?由于这可能是一个hack-正确的解决方案,特别是如果我不仅希望在末尾有备用行,而且要使整个输出以特定的偏移量和特定的大小呈现,例如像tmux窗格?
实际上,没关系。
通过实际使用一些晦涩的ans escpae代码(DECSTBM)解决了这种情况,例如:echo -en'\ 033 [0; 23r'