我正在编写一个只在命令行上运行的PHP脚本(思考矩阵)。
此刻它会打印一行代码,这些代码以新行结束,一遍又一遍。当屏幕填满时,它开始随每一行滚动。滚动方向是从底部到顶部。
是否仍然使用终端中的光标位置来反转此行为并开始在屏幕顶部打印代码行,以便滚动从上到下?
示例代码:
for ($lines=1000;$lines>0;$lines--) {
echo "this is a basic line of code\n";
}
我正在尝试的内容:
for ($lines=1000;$lines>0;$lines--) {
echo "\033[0;0H";
echo "\nthis is a basic line of code";
}
这是一个非常基本的例子,它模拟了我想要实现的目标 - php在0,0位置打印一条线。在0,0写新行,旧行向下移动一行。当反复重复时,滚动将被反转。
除了使用 ANSI 之外,我可能还有其他方法可以做到这一点?
因为“终端将根据操作系统的不同而不一致”的评论显示---我正在使用mac,这是一个有趣的小项目,所以它需要支持
答案 0 :(得分:1)
除了ANSI(或基于curses的东西)之外,你几乎没有其他选择。这是一个ANSI示例:
#!/usr/bin/php
<?php
for ( $lines = 1000; $lines > 0; $lines-- ) {
echo "This is line $lines of output\r";
echo "\033[T\033[A";
}
?>
打印每一行,然后将光标移动到 行的左边距,打印反向索引(\033[T
),然后将光标移动到新的空白行(\033[A
)。它适用于Terminal.app
有趣的是,php binding for ncurses没有提供terminfo接口(与大多数其他语言绑定不同)。