shuto_log.aep

ブログ名変わりました。自分がやったことなどを備忘録的な感じで残していこうと思います。

zshに牧瀬紅莉栖を召喚する方法

こういうタイトルってqiitaとかのほうが釣れるんですかね???(釣るな)
何はともあれ、oh-my-zshのテーマ設定ファイルである.zsh-themeファイルをいじってちょっと分かったことをメモ。

こんな感じですよ。

zshとは

zsh(ゼットシェル)とは、コマンドシェルの一つで、macだとターミナルの中で動いているシェルアプリの類。macは標準だとbash(バッシュ)というシェルが使われている。ターミナルを起動すると上部のバーに「bash」と表示されると思う。
僕はそもそもbashさえ使いこなせていないのでbashzshの違いはあまり分からないが、後述のoh-my-zshzsh用なのでzshを使っている。(ちなみに僕はターミナルの代わりにiTerm2を使っているのでスクリーンショットとかちょっと違うかも)

oh-my-zshとは

oh-my-zshとはzshを圧倒的に使いやすくしてくれるやつ(語彙力)。zshの見た目とかコマンドを良い感じにカスタマイズしてくれる。テーマファイルを別途読み込むことで、色んなスキンに変えることが出来る。

今回はそれのテーマのカスタマイズ。agnosterというテーマからForkしてきている。
github.com

わかったこと

シェルスクリプトの文法とか全然知らなかったので調べながら.zsh-themeファイルを読んだのだけど、どうやらファイルの中ではシェルスクリプトの関数を定義して、それを元にシェルのステータスなどを出力しているみたい。

シェルスクリプトの関数について

行単位で結果が出力されるシェルにも関数があるんです。(画像のように、関数を定義する時は改行をしてもきちんと前行の続きとして関数定義を続けることが出来る。)
f:id:shutosg:20160217225520p:plain

ちなみに$1ってのは関数の第一引数を表している。Processingとかで言ったら

void testFunc(Object obj){
  println("hogehoge" + obj);
}

みたいな感じ。シェルスクリプトで関数を宣言する時は引数をいくつ受け取る関数か、とか考えなくていいんですね。

qiita.com

.zsh-themeについて

プロンプトの基本事項

テーマファイルに

PROMPT='表示する内容'

というのを書くと、シェルでは

表示する内容 $ 

みたいに表示される。コマンド入力待機の時の左側の表示のこと(この部分をプロンプトと言う)ですね。
また、プロンプトの表示には特殊なパラメータが用意されているようで、例えば%dはカレントディレクトリの絶対パスだったり、%Cはホームディレクトリからの相対パスだったり。

PROMPT='%d'

とすると

/User/shuto/Documents $

みたいな感じで表示される。同じく時間や日付を返してくれるパラメータとかユーザ名とかローカルホスト名を返してくれるパラメータとかがあるらしい。
qiita.com

また、

PROMPT='%F{文字色}[色を付けたい文字列]%f'

とすると文字色を変えることが出来る。同様にFをKに変えると背景色も変更することができる。ただし、色は用意されたものの中から選ぶ必要がある。
qiita.com

そして、PROMPTの行は' '内で改行することも出来て、その際はきちんと2行で表示される。この事を用いて1行目には現在の時間やディレクトリの情報を、2行目に紅莉栖を表示するようにした。

前行のコマンドの成功・失敗によってプロンプトの表示を変える

シェルスクリプトには前行で実行したコマンドが成功したか失敗したかを表す$?という変数(終了ステータス)が用意されている。その中身はtruefalseだか10とかで、その値に応じてプロンプトの表示を切り替えることができる。
itchyny.hatenablog.com
qiita.com
三項演算子の表記がめちゃくちゃ可読性悪いので最悪だけど、これで終了ステータスに応じて好きな顔文字が表示できるようになる。
とその前に書き忘れてたけどプロンプト内に"シェルスクリプトの実行後の値"を出力したい場合は

PROMPT='%(シェルスクリプト)'

とすると関数を実行した返り値が表示される。

結局自分のプロンプトはこんな感じになった。build_promptとかは日付とか時間とかローカルホストの情報を一気に表示する関数。あとは背景色変える命令とか。

PROMPT='%{%f%b%k%}$(build_prompt)
%(?.%{$bg[red]%}.%{$bg[yellow]%})%(?.カイバーヽ(*゚д゚)ノ.ガイヴァーヽ(#゚д゚#%)ノ) < ${reset_color}%  '

2016/02/23追記
追記と修正。
上記の説明を

PROMPT='%(関数名)'

としていたが、語弊があったっぽかったので記述を修正しました。
あと当記事とは直接的には関係ないですが、LinuxCUI初心者にオススメの記事を見つけましたので追記。
qiita.com
追記ここまで

最後に

というわけでzshに牧瀬紅莉栖を召喚するoh-my-zshテーマはまだ開発中ですが、
github.com
にて公開しています。