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 位元別名。

相關內容