Linuxのプロンプト(PS1)がPuTTy(シフトアウト/シフトインを含む線画)で正しく表示されない


2

俺の Linuxプロンプト として設定され:

┌─ (USERNAME@HOSTNAME PATH) ->
└─ $

PS1 です:

export PS1="\n\[\033[30;1m\]\[\033(0\]l\[\033(B\]\[\033(0\]q\[\033(B\] (\u@\h \[\033[31;1m\]\w\[\033[30;1m\]) ->\n\[\033(0\]m\[\033(B\]\[\033(0\]q\[\033(B\] \`if [ \$? = 0 ]; then echo \[\e[1\;30m\]\\$\[\e[1m\]; else echo \[\e[1\;31m\]\\$\[\e[0m\]; fi\` \[\033[0m\]"

どういうわけか、それ できません PuTTyから正しく表示されるように、スクリーンショットは次のとおりです。 difference

の設定 - > 翻訳 私のパテで:

  • リモート文字セット - > UTF-8
  • 線画文字の取り扱い - > Use Unicode line drawing code points

My PuTTyに正しいプロンプトを表示するにはどうすればよいですか? (ところで、私はすべてのオプションを試してみました 線画文字の取り扱い


PuTTy Promptはまだ使用して動作することはできません。

if [ -z "$DISPLAY" ]
then
export PS1="\n\[\033[30;1m\]┌─ (\u@\h \[\033[31;1m\]\w\[\033[30;1m\]) ->\n└─ \`if [ \$? = 0 ]; then echo \[\e[1\;30m\]\\$\[\e[1m\]; else echo \[\e[1\;31m\]\\$\[\e[0m\]; fi\` \[\033[0m\]"
else
export PS1="\n\[\033[30;1m\]\[\033(0\]l\[\033(B\]\[\033(0\]q\[\033(B\] (\u@\h \[\033[31;1m\]\w\[\033[30;1m\]) ->\n\[\033(0\]m\[\033(B\]\[\033(0\]q\[\033(B\] \`if [ \$? = 0 ]; then echo \[\e[1\;30m\]\\$\[\e[1m\]; else echo \[\e[1\;31m\]\\$\[\e[0m\]; fi\` \[\033[0m\]"
fi

new_ps1


また試してみる キティ 。以下に提示された解決策は私にとっては完全にうまくいきます。
Daniel B

回答:


2

これを修正する方法は、「シフトアウト/シフトイン」シーケンスの使用をやめて、(あなたの例で行ったのと同じように)直接線描画文字をUTF-8としてインクルードすることです。

PS1="\n\[\033[30;1m\]┌─ (\u@\h \[\033[31;1m\]\w\[\033[30;1m\]) ->\n└─ \`if [ \$? = 0 ]; then echo \[\e[1\;30m\]\\$\[\e[1m\]; else echo \[\e[1\;31m\]\\$\[\e[0m\]; fi\` \[\033[0m\]"

ここでの問題は、PuTTYが現在UTF-8モードで実行されている場合、ISO 2022代替文字セットシーケンスをサポートしていないことです。 PuTTYがあります ほしい物リストのエントリ 説明と一緒に なぜUTF-8とISO 2022を混在させるのは望ましくないのです。


コメントのように:Consolasの古いバージョンにはボックス描画文字がありませんでした。 Windows 8からConsolasを入手する必要があります。


うわー、クールに見えます、私はあなたが試した後に結果を知らせます。さて、私は使っています ノームターミナル そして パテ 端末がPuTTyまたはGnome-Terminalであることをどのようにして知ることができますか ?だから私は追加することができます if...else... にとって PS1
Marslo

ところで、私は使っています `sudo fgconsole` -gt 6 ターミナルを見つけるためにはx-windowsかそうではありません。
Marslo

@Marslo:気にしないでください - どちらの場合もUTF-8を使用してください。 GNOMEターミナルは長年UTF-8をサポートしています...
grawity

1
@Marslo:一般的に、このようなチェックはより具体的なものであるべきです。つまり、ちょっと考えて なぜ あなたはそれをチェックしています。 //設定はX11に依存しますか?それからチェックしてください $DISPLAY 設定されています。 しない fgconsoleを使用すると、rootがいないシステムでは失敗します。ディスプレイマネージャがvt1またはvt2でXorgを起動すると決めたとき、またはVTがLinuxから消えたとき、またはレスキューシェルに入ったときに失敗します。 on tty9 ... //これはPuTTYが持っているがGNOMEターミナルが持っていない機能に依存しますか?再試行する;同じUTF-8が実際には両方でうまく機能するので、チェックを省略すると処理が簡単になります。
grawity

1
ああ、おもしろい。それはおそらくあなたのフォントに欠けているだけでしょう?以前のバージョンのConsolasにはありませんでした。
grawity
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.