我有一个涉及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");
不幸的是,如果您希望历史记录函数正常工作,那么提示中只能有普通字符。