3

色付きの行を印刷するプログラムを書いていますが、それをやればやるほど、発生する行の折り返しの問題に対処していることに気づきます。

これは、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で動作させるために。

4

1 に答える 1

0

php 1.php

[タイマー]>>

<?php

$return = readline("\033[44m\033[1;37m[TIMER]>>\033[0m ");

?>

ここに追加されたダイアログの例があります

dialog --title "Welcome" --msgbox "\nMY TEST DIALOG \n\nPress <Enter> to continue or <Esc> to cancel." 10 50
于 2012-10-30T10:54:54.767 に答える