如何运行另一个程序并将其仅输出到终端的特定部分

问题描述 投票:3回答:1

我正在开发一种在多个用户之间共享终端会话的工具。

因此,我的工具会增加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窗格?

linux terminal tty pty
1个回答
1
投票

实际上,没关系。

通过实际使用一些晦涩的ans escpae代码(DECSTBM)解决了这种情况,例如:echo -en'\ 033 [0; 23r'

© www.soinside.com 2019 - 2024. All rights reserved.