私は色付きの線を印刷するプログラムを書いていますが、それをやっていくうちに、発生する行の折り返しの問題に対処することが増えていることに気づきます。
これは PHP で書かれた一種のターミナルです。プロンプトは次のとおりです。
$return = readline("\033[44m\033[1;37m{$this->text}>>\033[0m ");
履歴をスクロールすると、テキストが 10 文字ずれてしまいます。21 文字入力して 1 文字を削除すると、行全体がクリアされ、上の行から文字が削除され始めます。これは、47 列幅のコンソールで発生しています。
エスケープを追加しようとすると
$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]>>
ここで何が欠けているのでしょうか?
答え1
によるとhttp://mywiki.wooledge.org/BashFAQ/053checkwinsize
コマンド履歴をスクロールする場合は、このオプションが必要になる場合があります。
shopt -s checkwinsize