これを達成する普遍的な方法はありません。

これを達成する普遍的な方法はありません。

電力線フォントが正しく表示される必要がある宇宙船プロンプトzshテーマをインストールしました。したがって、DEのターミナルエミュレータ内で実行されるシェルではなく、tty(私が知っている限りビットマップフォントのみを使用できます)で直接実行されるシェルでこれを無効にしたいと思います。

私はこれを私の.zshrcに入れてみました。

if [[ -o login ]] ; then
    return
fi

ログインシェルで設定の読み込みを無効にしますが、suを使用するとターミナルエミュレータ(Konsole)で実行しても、ルートシェルもログインとして表示されます。

➜ su
Password: 
n750jv# echo $-
569XZilms

関係があるかどうかはわかりませんが、実際には/rootにある.zshrcへのシンボリックリンクを作成し、構成が同期状態を維持します。

注:ttyでecho $ -を実行すると、まったく同じ出力が表示されます。569XZilms

答え1

zshを実行している端末に特定の文字が正しく表示されるかどうかを知りたいことがわかりました。 (しかし、これはフォントの種類には関係ありません。文字エンコーディングとフォントに使用する文字が含まれているかどうかに関連しています。)

環境変数を使用して、シェルがTERM実行されている端末を確認してください。これはフォントオーバーレイのための良い経験的な方法です。

すべてをスキップしないでください.zshrc。エイリアス、完成など、シェルの実行場所に関係なく、ほとんどの設定が意味があります。プロンプトの内容のみが変更されます。

case $TERM in
  xterm*|konsole*)
    set_fancy_prompt;;
  *)
    set_less_fancy_prompt;;
esac

あるいは、端末がUnicodeを使用するのか8ビットのエンコーディングを使用するのかは、十分に優れた経験的方法かもしれません。ロケールカテゴリはLC_CTYPE良い経験的方法でなければなりません。

case ${(L)LC_ALL:-${LC_CTYPE:-$LANG}} in
  *UTF*)
    set_fancy_prompt;;
  *)
    set_less_fancy_prompt;;
esac

これはログインシェルかどうかには関係ありません。たとえば、SSH経由でログインしている場合は、ログイン場所によっては、テキストコンソール、GUI端末、または他の種類の端末(または端末なし)に表示されるログインシェルが表示されます。

答え2

これを達成する普遍的な方法はありません。

使用中の電力線文字個人使用領域Unicode。何度も電線が見えます。素晴らしいフォント”)ユーザは個人使用領域を理解する。意味するいくつかはどこでも同じように動作しません。その意味は完全に私的な合意によって決まります。

パーソナルリージョンコードポイントのためにどのグリフをレンダリングするか、どのパーソナル配列を使用してレンダリングするかを決定する標準的な方法はありません。実際に文字の外観を見たり、人間が読める文書を読む以外に、フォントにPowerlineが必要とする非標準の文字の外観があるかどうかを確認する方法はありません。

また、非標準の独自のPowerlineグリフ(Tamzenなど)を含むいくつかのビットマップフォントもあります。したがって、通常の場合、端末がカーネル仮想端末であるかどうかに応じてプロキシすることはできません。 KVTは非標準の専用電力線文字を表示することも、表示しないこともあります。

また、シェルがログインシェルかどうかに応じて賢明にプロキシすることはできません。シェルは、非ログインシェルになるのと同じように、フォントに非標準の独自のPowerline文字の外観を持つターミナルエミュレータのログインシェルにすることができます(複数のGUIターミナルエミュレータはログインシェルでシェルを起動できます)。フォントに非標準のプライベートPowerline文字の外観を持たないターミナルエミュレータで(サブシェルをフォーク+実行したり、mailx「シェルアウト」するなどの作業が可能なためですvi)。

君はそれを調べればいい自分のプライベートな準備。端末ログインセッションの表示方法を探すあなたは(いいえ)インストールしました個人使用地域コードポイントの特別な意味です。これを達成するためのさまざまな方法の例:

  • gettyまたはKVTログインのログインサービスで自分が設計した環境変数を設定loginし、シェル初期化スクリプトを閉じます(管理者アクセス権が必要で、後でこの設定を維持する必要がある場合)。
  • 個人的な方法でターミナルデバイスファイル名を閉じます(ただし、シリアル接続を介して実際のターミナルをインポートしたりSSHをインポートしたりすると、この作業は本当に複雑になります)。
  • ␅(U + 0005)文字を送信して返される内容をドラッグします。ただし、これは常に端末でユーザーがプログラムでき、実際に何も返されない可能性があります。

手をつないで...

もちろん、より良い方法は、テーマに標準文字を使用して心配しないことです。どのこれらの障害物。

個人使用ゾーンコードポイントは実際には必要ありません。あなたのテーマの作者が思うように、ロックされたロックの場合。 U+1F512で標準化(

答え3

問題を発見しました。エイリアスを忘れました。〜のようにスーエル私自身…:D

編集:@Gillesの提案に従って$ TERM環境変数の内容を確認し、Linuxコンソールでない場合にのみテーマをロードするように設定を変更しました。

if test "$TERM" != "linux"
then
    autoload -U promptinit; promptinit
    prompt spaceship
fi

関連情報