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