web-dev-qa-db-ja.com

ZSHテーマ、プロンプト、およびターミナルベースのテーマの違いは何ですか?

私はおそらくこれを考えすぎ始めたかもしれませんが、それについての適切な説明も見つかりませんでした。最近oh-my-zshをインストールしましたが、「プロンプト」の外観と使用される色、およびテキスト全体で色が使用される「場所」を変更するいくつかのテーマが付属しています。

これを正しく理解すると、ある種の赤い色、ある種の緑の色、ある種の青など、いくつかの「基本」色があります。テーマは、「ここで青い色が欲しいので、特定の青い色はこの16進値」。

なぜそれなら、使用するターミナルエミュレーターもテーマを適用できるのか混乱しています。私はHyperJSを使用しており、すべての色を担当しているように見えるテーマを適用できますが、プロンプトレイアウトはoh-my-zshを介して設定できます。

Oh-my-zshで使用されているテーマと端末のテーマの違いは何ですか?誰かがテーマが何をしているのかなどの全体的な内訳を説明できますか?

1
Max McKinney

色の端末サポートは、さまざまな規格で指定されています。 ECMA-48 またはそれ以降の標準で色が追加されました。最近の端末はほとんどが仮想ウィンドウであり、 専用ハードウェアデバイス ではありません。通常、エミュレートされる端末は、TERM環境変数を設定することで変更できます— たとえば、色をサポートしていません

最新の端末の場合、色が必要な場合、通常のアドバイスは256色のサポートを有効にすることです。これは、古い標準でははるかに少ない色しか指定されていないため、通常はTERM=xterm-256colorを使用します。さまざまな ドキュメントには正確なコードの詳細が記載されています 色の生成に使用され、これは手動で行うことができます

% print "\033[31;5mDANGER DANGER WILL ROBINSON\033[0m"
...

ただし、移植性のためには、通常、ncursesなどのライブラリを使用するか、場合によってはさまざまなカラーコードに固有のZSH構文を使用することをお勧めします。

% print -P '%F{red}DANGER%f'
...
% print -P '%F{red}DANGER%f' | hexdump -C
00000000  1b 5b 33 31 6d 44 41 4e  47 45 52 1b 5b 33 39 6d  |.[31mDANGER.[39m|
00000010  0a                                                |.|
00000011
% print "\033[31;5mxxx\033[0m" | hexdump -C
00000000  1b 5b 33 31 3b 35 6d 78  78 78 1b 5b 30 6d 0a     |.[31;5mxxx.[0m.|
0000000f

Oh-my-zshが行っているのは、上記と同様のランダムなコードビットをバンドルして、(最終的に)上記の\033[31mコードのようなものを生成し、端末によって消費されて表示される(または表示されない)ことです。端末がこれらのコードをどのように処理するかは端末次第です。代わりに、\033[31m(「前景色赤」)を緑として表示(または無視)することができます。ターミナルでのそのような色設定のセットは、ターミナルソフトウェアによってテーマと呼ばれる場合があります。これは、同じ名前を使用しているにもかかわらず、oh-my-zshテーマとは完全に異なります。

1
thrig

Oh-my-zshは基本的に、zshのデフォルト promptinit がすでに実行していることを実行します。テーマファイルを調達することで、少し違ったやり方をしています。基本的な考え方は、PS1、PS2、PS3、およびPS4の値を変更することです。ターミナルエミュレータはこれらの値を変更しません(afaik)。たとえば、ターミナルエミュレータでフォントのデフォルトの色が赤に設定されている場合、$ reset_colorは赤になります。

ストックZSHインストールで独自のテーマを非常に簡単に作成できます。たとえば、私は独自のストックzshテーマを持っています(プロンプト)。

次の内容のファイル~./.zsh/Prompt/prompt_XXXXXXX_setupを作成できます。

Prompt_XXXXXXX_setup() {
    autoload -Uz colors && colors
    # You now have access to:
    # $fg[red] etc
    # $bg[red] etc
    # and the bold variant: $bg_bold and $fg_bold
    # and the $reset_color
    Prompt="$fg_bold[blue]My shiney$reset_color $bg_bold[green]Prompt %(!.#.%) " # although the docs seem to prefer you using PS1
}

Prompt_XXXXXXX_setup "$@"

このプロンプトを有効にするには:

zcompile ~/.zsh/Prompt/prompt_XXXXXXX_setup # optional, but advised

# set this in your .zshrc and you will always have this as a Prompt when using zsh
fpath=(~/.zsh/Prompt $fpath)
autoload -Uz promptinit && promptinit && Prompt XXXXXXX  

プロンプトをPrompt <name>で切り替えるか、プロンプトのリストを取得できるようになりました:Prompt -l。より複雑なセットアップが必要な場合は、ここを参照してください: zsh-Prompt-powerline または 自分のセットアップ 。 ZSHドキュメント here またはソースコード promptinit も参照してください。

1