Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 回放VT100终端命令中的文本块_C_Terminal_Vt100 - Fatal编程技术网

C 回放VT100终端命令中的文本块

C 回放VT100终端命令中的文本块,c,terminal,vt100,C,Terminal,Vt100,我基本上想要操纵一些连接到终端的程序的输出,这样文本的底部部分总是一些任意的文本块(我们称之为页脚),而程序的正常输出显示在上面。如果此页脚仅限于一个终端行,则只需清除当前行,在每次write调用之前将光标移动到行的开头,然后重写页脚即可。然而,如果我想要的页脚跨越多个终端行,或者包括换行符,或者通过环绕屏幕边缘的行,事情就复杂了。我想我可以用“保存光标”和“恢复光标”VT100控制代码来解决这个问题,每次写入时都会发出这样的代码: 还原光标 所需的写入调用 保存光标 输出页脚 但是,当输出文本

我基本上想要操纵一些连接到终端的程序的输出,这样文本的底部部分总是一些任意的文本块(我们称之为页脚),而程序的正常输出显示在上面。如果此页脚仅限于一个终端行,则只需清除当前行,在每次
write
调用之前将光标移动到行的开头,然后重写页脚即可。然而,如果我想要的页脚跨越多个终端行,或者包括换行符,或者通过环绕屏幕边缘的行,事情就复杂了。我想我可以用“保存光标”和“恢复光标”VT100控制代码来解决这个问题,每次写入时都会发出这样的代码:

  • 还原光标
  • 所需的
    写入
    调用
  • 保存光标
  • 输出页脚
  • 但是,当输出文本到达终端的底部时,这些选项不起作用,因为保存的光标将始终位于底部行


    有没有办法实现这个任意的终端页脚?只有VT100代码的东西是理想的,但是如果唯一的方法是使用诅咒,那么我认为这也是可能的。

    问题是VT100不允许文本窗口或固定滚动窗口(可能是更好的术语)

    所以,这就留给你去管理了

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

    使用原始VT100,您必须跟踪何时滚动。当您滚动时,您可以删除顶行,然后在页脚前插入一个空行,然后在新的空行上书写


    当然,诅咒会帮你解决所有这些问题。

    问题是VT100不允许文本窗口或固定滚动窗口(可能是更好的术语)

    所以,这就留给你去管理了

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

    使用原始VT100,您必须跟踪何时滚动。当您滚动时,您可以删除顶行,然后在页脚前插入一个空行,然后在新的空行上书写


    当然,诅咒会帮你处理所有这些。

    你可以使用滚动区域来完成。类似这样的内容(请记住,虽然您可以硬编码转义序列,但这更具可读性):


    您可以使用滚动区域来执行此操作。类似这样的内容(请记住,虽然您可以硬编码转义序列,但这更具可读性):


    Thermanal主题是否需要调整大小?这就是他们很久以前编写库的原因。Thermanal主题是否需要调整大小?这就是他们很久以前编写库的原因。滚动区域
    [{start};{end}r
    看起来它会起作用。我只需要为页脚设置最大行数。滚动区域
    [{start};{end}r
    看起来它会起作用。我只需要为页脚设置最大行数。
    #!/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