PHP交互式CLI:历史的向上和向下箭头



我有一个涉及php交互式CLI程序的错误。

我使用readline_add_history将命令添加到历史记录中,并使用readline读取它们。

错误在于,如果使用向上箭头键,我在历史记录中滚动到一个命令5个字符或更长时间,则命令的第一个字符会"粘住",并且在我继续使用箭头键再次滚动后会停留在那里。它只有在我按下回车键后才消失。

例如:

% hello
<enter>
%
<up arrow key>
% hello
<down arrow key>
% h
<up arrow key>
% hhello
<down arrow key>
% h
<enter>
%
<up arrow key>
% hello
** notice here that the extra h isn't read in as a command. **

在哪里可以查看涉及箭头键/命令历史记录的代码?我在网上查找了readline如何处理箭头键和历史记录的资源,但什么也找不到。

我的代码是这样的:

while(true)
{
$command = readline( "n%" );
.. do stuff ..
readline_add_history( $command );
}

我还有一个readline_completion_function,但当我使用箭头键时,它不会被调用。

如果提示字段中有"不可打印"字符,比如您使用过的,那么readline()和提示字段(用PHP 5.5.9 Ubuntu测试)似乎有一个错误。

我也遇到过类似的问题,当试图使用ESC代码为提示着色时,它只会导致历史记录功能失控:(

示例:$_command=readline("\033[32m PHP>\033[35m");

不幸的是,如果您希望历史记录函数正常工作,那么提示中只能有普通字符。

最新更新