使用在CLI模式下运行的PHP脚本,我想以一种可移植的方式获取光标位置。
带有代码:
// Query Cursor Position
echo "\033[6n";
在终端中,此代码报告光标位置,如下所示:
wb ?> ./script.php
^[[5;1R
wb ?> ;1R
但是,我无法在代码中检索两个值(行:5,列:1)。
经过对输出缓冲的一些测试之后:
ob_start();
echo "\033[6n";
$s = ob_get_contents();
file_put_contents('cpos.txt',$s);
我在cpos.txt文件中输入了“ \ 033 [6n”,而不是设备的答案。
并阅读STDIN:
$timeout = 2;
$sent = false;
$t = microtime(true);
$buf = '';
stream_set_blocking(STDIN,false);
while(true){
$buf .= fread(STDIN,8);
if(!$sent){
echo "\033[6n";
$sent = true;
}
if($t+$timeout<microtime(true))
break;
}
var_dump($buf);
缓冲区为空,但终端显示设备答案:
wb ?> ./script.php
^[[5;1R
string(0) ""
wb ?>
有没有一种方法可以无误地获得光标位置?
qq_花开花谢_0