Shell 脚本在终端中向下滚动整个文本而不修改它

Shell 脚本在终端中向下滚动整个文本而不修改它

我正在尝试使用 /bin/sh 脚本在终端中向下滚动几行文本。在这种情况下,使用 smcup、rmcup 的解决方案是不可接受的。

我尝试过的其他几个选项都失败了(包括来自杰德BP):

  • tput cup 0 0; tput ri
  • tput cup 0 0; tput rin 3

这有点奇怪,因为 man terminfo 指定:

要向下滚动文本,程序会转到屏幕的左上角并发送 ri(反向索引)字符串。当字符串 ind 和 ri 不在屏幕各自的角落时,它们是未定义的。

在运行任何测试之前,终端的输出必须是可滚动的(尝试在测试之前使用 set, env )。

xterm 的解决方案就足够了。

为了加速测试并澄清使用此脚本来启动:

#!/bin/sh

# create scrollable text
set

# includes correction from JdeBP
# try to scroll text down one line
tput cup 0 0; tput ri

# includes correction from JdeBP
# try to scroll text down 3 lines
tput cup 0 0; tput rin 3

答案1

tput cup 0 0, ri

难怪这件事失败了。这不是tput程序的命令行语法

tput 杯 0 0
tput ri

很简单。

高级用户在不仅仅是 XTerm 上执行复杂操作的注意事项:

  • 在真实终端及其高质量模拟器上,非默认顶部和底部边距以及关闭的原始模式会影响行为以及光标应放置在何处才能滚动。它并不像 terminfo 模型暗示的那么简单。例如,有关实际 DEC 终端的详细信息,请参阅 DEC VT4xx/5xx doco。
  • 在 DEC 世界中,SD 和 SU 是窗口平移,而不是缓冲区滚动。 VT525 具有多窗口功能,这些控制序列在底层缓冲区周围移动窗口。
  • 一些较差的非完全 8 位干净终端仿真器无法将 U+0084 和 U+008D 正确识别为 IND 和 RI,并强制使用 7 位别名。

相关内容