我一直在试验 xterm (v353) 中的 DECSTBM 转义序列。尽管通常可以工作,但我遇到了一个问题:
我会将滚动区域设置为比窗口高度少一行。当查看带有 less(或 man)的文件时,它会在滚动区域内打印行,但它会生成多行。向上滚动时,状态行会滑出滚动区域,并且通常滚动似乎会中断。
另一个例子是来自 readline (bash) 的“更多”完成提示,它会打印与窗口大小报告一样多的行,在我的例子中,将第一行滚动到屏幕外。
通过挖掘代码,我发现 less 似乎直接向系统询问窗口大小(使用 ioctl),因此绕过了环境变量 COLUMNS 或 LINES 给出的大小。有没有办法将可用滚动区域而不是窗口大小传达给查询终端大小的程序?
试试
stty rows <lines>
;它将设置(通过ioctl(TIOCSWINSZ)
)内核返回的值 viaioctl(TIOCGWINSZ)
给请求它的程序。当您调整窗口大小时,您的终端模拟器将更新它。
这对我有用(在不是很彻底的测试中):