nonomori

SRE見習いのブログ

preztoのsorinテーマをカスタマイズする

もう2018年も残すところあと3日となりました。今回はpreztoのsorinテーマをちょっとだけ変更してzshのプロンプトを自分好みにカスタマイズする話です。

preztoとは

preztoはzshの設定を管理するためのフレームワークです。zshの設定を自分でいろいろ便利にしようとすると設定ファイルが複雑化して管理しずらくなりますが、 preztoは機能をmoduleという単位で設定・追加する仕組みを提供してくれるため、zshの設定ファイルを簡潔な状態に保つことができます。また、あらかじめ用意されている機能の一つとして、プロンプトのデザインを変更するtheme機能があり、幾つか用意されているテーマの中から好みのものを選んでプロンプトのデザインを変更することができます。

github.com

sorinテーマ

私が一番好きなテーマはsorinというやつで、↓の画像に示すようにシンプルなデザインとなっています。一番左端にワーキングディレクトリのパスが省略された形式で表示され、右端にgitの情報が表示されています。

プロンプト

このままでもまぁ良いのですが、使っていると気になるところが出てきました。それは、gitの情報が右端に表示されるという点です。ターミナルで作業している時、基本的に視線は左側にあるプロンプトの方を向いていると思います。そのため、右端に何か情報が表示されると大幅な視線移動が発生して、すごくストレスになるということがわかりました。そこで、右端に表示されるgitの情報を左側に表示するようにpreztoのコードを変更しようと思います。

prompt_sorin_setupの変更

調べてみると、sorinテーマを実際に表示しているコードは prezto/modules/functions/prompt_sorin_setup であることがわかりました。 これを以下のように変更します。

--- a/modules/prompt/functions/prompt_sorin_setup
+++ b/modules/prompt/functions/prompt_sorin_setup
@@ -50,7 +50,7 @@ function prompt_sorin_async_callback {
         fi
       else
         # Git target detected, update the git fragment and redisplay the prompt.
-        _prompt_sorin_git="${_git_target}${_git_post_target}"
+        _prompt_sorin_git=" ${_git_target}${_git_post_target}"
         zle && zle reset-prompt
       fi
       ;;
@@ -161,10 +161,10 @@ function prompt_sorin_setup {
   _prompt_sorin_pwd=''

   # Define prompts.
-  PROMPT='${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{4}${_prompt_sorin_pwd}%(!. %B%F{1}#%f%b.)${editor_info[keymap]} '
+  PROMPT='${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{4}${_prompt_sorin_pwd}${_prompt_sorin_git}%(!. %B%F{1}#%f%b.)${editor_info[keymap]} '
   RPROMPT='$python_info[virtualenv]${editor_info[overwrite]}%(?:: %F{1}'
   RPROMPT+=${show_return}
-  RPROMPT+='%f)${VIM:+" %B%F{6}V%f%b"}${_prompt_sorin_git}'
+  RPROMPT+='%f)${VIM:+" %B%F{6}V%f%b"}'
   SPROMPT='zsh: correct %F{1}%R%f to %F{2}%r%f [nyae]? '
 }

ちょっとした解説

  • PROMPT : 左側のプロンプトに表示される文字列が格納されている変数
  • RPROMPT : 右端に表示される文字列が格納されている変数
  • _prompt_sorin_git : gitの情報を表す文字列が格納されている変数

コードを見ると、RPROMPTの中に_prompt_sorin_gitが埋め込まれていることがわかります。従って、RPROMPTの中から_prompt_sorin_gitを消してPROMPTの中に移すことで、左側にgitの情報を表示させることができます。

できた

良い感じ

f:id:Naofumi_Murata:20181229040714p:plain

おわり。