0

PHP インタラクティブ CLI プログラムに関連するバグがあります。

readline_add_history を使用して履歴にコマンドを追加し、readline を使用してそれらを読み込みます。

バグは、上矢印キーを使用して履歴を 5 文字以上のコマンドまでスクロールすると、コマンドの最初の文字が「固着」し、矢印キーを使用して再度スクロールした後もそこにとどまることです。 . Enterキーを押した後にのみ消えます。

例えば:

% 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 もありますが、矢印キーを使用しても呼び出されません。

4

1 に答える 1

0

readline() とプロンプト フィールド (PHP 5.5.9 Ubuntu でテスト済み) にバグがあるようです。プロンプト フィールドに \n など、使用した「印刷できない」文字が含まれている場合です。

私は同様の問題を抱えていました.ESCコードを使用してプロンプトを色付けしようとすると、履歴機能が混乱するだけです:(

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

残念ながら、履歴機能を正しく機能させたい場合は、プロンプトに通常の文字のみを含めることができます。

于 2014-09-23T09:57:59.917 に答える