我正在编写一个过滤器(在用于终端输出的管道中),有时需要“覆盖”刚刚发生的行。它的工作原理是将标准输入逐个字符地传递到标准输出,直到\n
达到,然后调用特殊行为。我的问题是如何返回到行的开头。
我首先想到的是使用\r
或 ANSI 序列\033[1G
。但是,如果该行足够长以在终端上换行(并因此导致其滚动),则这些只会将光标移回到当前位置physical line.
我的第二个想法是跟踪行的长度(自上一个以来传递的字符数)\n
),然后回显\b
那么多次。但是,如果该行包含控制字符或转义序列(可能还有 Unicode?),就会出错。
除了搜索所有特殊序列并使用它来调整我的字符数之外,是否有一种简单的方法可以实现这一目标?
即使存在一个“神奇序列”,当写入控制台时会可靠地擦除最后写入的行,您仍然会在输出上获得该行和序列(尽管隐藏在控制台上)。想想如果有人将输出写入文件,或者将其通过管道传递到其他过滤器,会发生什么?他们知道如何处理这样的输入吗?并且不要告诉我您排除了在其他地方写入而不是直接写入控制台的可能性。迟早,有人会想要重定向输出 - 也许甚至是你!
正确的方法是在处理每一行时将其缓冲在内存中,然后决定是否输出它。这确实没有办法解决。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)