コマンドラインプロンプトでホスト名を色付けする

コマンドラインプロンプトでホスト名を色付けする

bashのコマンドラインプロンプトのホスト名部分にカスタムカラーを設定したいと思います。

私の.bashrcファイルでは、デフォルトのコマンドラインプロンプトは次のとおりです。

PS1='[\u@\h \W]\$ '

ホスト名だけを色分けするために、次のヒントを考えました。

PS1='[\u@\e[40;36m\h\e[0m \W]\$ '

私は作業しているホストごとに異なる色を使用します。シェーディング部分は期待どおりに機能するようです。ただし、上記のプロンプトが表示された後、コマンドラインナビゲーションは正しく機能しません。たとえば、カーソルを行の先頭または末尾に移動できない場合があります。デフォルトのプロンプトに戻すと、すべてがうまく機能します。

私のカラーチップに問題がありますか?ホスト名にのみ色を正しく割り当てるにはどうすればよいですか?

この質問は問題ではありません。しかし、私はArch Linux KDEを実行し、Konsoleで作業しています。

ベストアンサー1

背景

特別なプロンプトシーケンスが展開された後、プロンプトの残りの各文字を計算してプロンプトの長さを計算します。

質問

色の順序(実際にはプロンプトの長さには含まれていません)を追加したので、bashプロンプトは実際よりも長いと見なされます。
したがって、bash線がどこから始まり終わるかを知る方法がないため、前述の機能障害が発生します。

解決策

bashマニュアルから:

\[    Begin a sequence of non-printing characters, which could be used to 
      embed a terminal control sequence into the prompt

\]    End a sequence of non-printing characters

カラーエスケープシーケンスの周囲に追加すると、プロンプトの長さには含まれません。

おすすめ記事