色付きの行を印刷するプログラムを書いていますが、それをやればやるほど、発生する行の折り返しの問題に対処していることに気づきます。
これは、php で記述された一種の端末です。プロンプトは次のとおりです。
$return = readline("\033[44m\033[1;37m{$this->text}>>\033[0m ");
履歴をスクロールすると、印刷されていない文字がすべてに大混乱を引き起こします。
エスケープを追加しようとすると
$return = readline("\[\033[44m\033[1;37m\]{$this->text}>>\[\033[0m\] ");
次に、括弧を出力します...二重のバックスラッシュを追加しても。
\[\][timer]>>\[\]
echo -e でも同じことがわかりました。何が起こっているのか本当にわかりません。
最後に、PS1 を変更すると、問題なく動作します。
[mike@crest ~]$ export PS1="\[\033[44m\033[1;37m\][timer]>>\[\033[0m\] "
[timer]>>
ここで何が欠けていますか?
編集: 色付け/表示は問題ではありません。問題は、目に見えない文字がエスケープなしで印刷されると、bash で行の折り返しの問題が発生することです...そして、エスケープを追加すると、PS1 以外のすべての状況でそれらがプレーンテキストで印刷され、違いが何であるか、どのようにわかりませんPHPで動作させるために。