最近PS1を少し調整しています。コードは以下のように表示されます。
PS1='$(if [[ $? != 0 ]]; then echo " \e[91m\e[0m"; fi) \u $(assemble_prompt)$ '
欠落している文字のソースは次のとおりです。素晴らしいフォント私の質問と機能assemble_prompt
には関係ありません。
私が経験している問題は、ターミナルウィンドウのサイズをプロンプトサイズ(約)に減らすとPS1が破損することです。これはPS1設定を無視し、PS1を$
文字のみに設定するようです(スクリーンショットを参照)。入力を開始すると、カスタムプロンプトが上書きされます。
前のコマンドが成功しなかった場合は、「失敗」文字を追加して問題の範囲をif句に絞り込みました。その部分を削除すると、すべてが期待どおりに機能します。
if
セクションを維持しながらウィンドウサイズが小さすぎるときにPS1リセットの問題を解決する方法はありますか?
rxvt-unicode
PS:端末として使用していますが、他のすべての端末にはまだ問題があります(テスト済みxterm
、st
)。
ベストアンサー1
\[...\]
実際に文字を印刷しないことをBashに通知するために、端末制御コードを束ねることができます。そうしないと、シェルがプロンプトの幅を計算しようとすると混乱します。
したがって"\[\e[91m\]xxx\[\e[0m\]"
。
~から手動:
\[ Begin a sequence of non-printing characters.
This could be used to embed a terminal control sequence into the prompt.
\] End a sequence of non-printing characters.