在VT100终端命令中倒退一段文本

时间:2018-08-07 22:49:27

标签: c terminal vt100

我基本上想操纵连接到终端的某些程序的输出,以使文本的底部始终是任意文本块(我们将其称为页脚),而程序的正常输出显示在该文本的上方。如果将此页脚限制在单个终端行上,则只需清除当前行,在每次write调用之前将光标移至该行的开头,然后重写页脚,将非常容易做到。但是,如果我希望的页脚跨越多条终端线(包括换行符或环绕屏幕边缘的换行),则情况将很复杂。我以为我可以使用“保存光标”和“恢复光标” VT100控制代码来解决该问题,每次写入时都会发出该代码:

  1. 还原光标
  2. 需要write通话
  3. 保存光标
  4. 输出页脚

但是,当输出文本到达终端的底部时,这些命令将不起作用,因为保存的光标将始终位于底部的行。

有什么办法可以实现这个任意的终端页脚吗?仅有VT100代码的东西是理想的,但是如果唯一的方法是使用curses,那么我想那也是可能的。

2 个答案:

答案 0 :(得分:2)

问题在于VT100不允许使用文本窗口或固定的滚动窗口(也许是更好的说法)。

所以,这留给您管理。

诅咒将是最简单的,因为您可以在代码中打开两个单独的窗口,一个用于“文本”,一个用于页脚,然后让诅咒根据需要更新屏幕。

仅使用原始VT100,您将不得不跟踪何时滚动。滚动时,可以删除第一行,然后在页脚之前插入空白行,然后在新的空白行上书写。

当然,诅咒会为您处理所有这些事情。

答案 1 :(得分:1)

您可以使用滚动区域来执行此操作。这样的事情(请记住,尽管您可以对转义序列进行硬编码,但更易于阅读):

#!/bin/sh
rows=$(tput lines)
foot=$((rows - 4))
tput csr 1 $((foot - 1))
count=0
while true
do
        date
        count=$((count + 1))
        tput sc
        tput cup $foot 1
        printf "Total cycles %d", $count
        tput rc
        sleep 1
done