ターミナルにお寿司を出す

[お前らのターミナルはダサい](https://qiita.com/kinchiki/items/57e9391128d07819c321)を読んで、

「確かにダサい。ダサいしお寿司食べたい。」と思ったのでターミナルの入力待ちをお寿司にしてへいお待ちって感じにした。

# before
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241408/f026e8e8-95d2-8221-95ed-e79700271676.png)

# after
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241408/3197c0dd-b822-a8db-7037-49747fa6cf14.png)

# 手順

## 兎にも角にもまずお寿司

`.zshrc`を編集していきます。ユーザホームディレクトリにあると思います。なければ作りましょう。

```console
vim ~/.zshrc
```
```bash:~/.zshrc
PROMPT='🍣'
```
`PROMPT`はプロンプトの左側に何を表示するのかを設定する項目になります。
編集が終わったら`source`で読み込みます。

```console
source ~/.zshrc
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241408/92b5013b-5f2b-6118-795c-28626f0dfe38.png)
お寿司です。お寿司が出ましたね。
ちなみに、絵文字は`cmd`+`ctrl`+`space`で入力できます。（キー配列によって異なるかも）

## カレント表示したい
さて、最大の目的のお寿司は出せたものの、これでは~~お寿司だけに~~完全にネタになってしまいますね。

カレントを出していきましょう。`.zshrc`を編集して再度読み込みましょう。

```bash:~/.zshrc
PROMPT='%~ 🍣'
```

`%~`はカレントパスを示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241408/bc292981-e572-7251-e0b0-8e13a5eae4e1.png)
お寿司が今どこにあるかが分かるようになりましたね。

## 今何時？
お寿司に夢中になって時間を忘れてしまいそうなので右側に時間を出します。

```bash:~/.zshrc
RPROMPT='%D{%H:%M:%S}'
PROMPT='%~ 🍣'
```

`RPROMPT`は、`PROMPT`が左側だったのに対して、プロンプトの右側に何を表示するのかを設定する項目になります。
`%D`は時間を示し、続く`{%H:%M:%S}`はフォーマットになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241408/ae304a31-12cd-a251-58a0-ef737960bcbd.png)
時間が分かるようになりましたね。

## ブランチ名も欲しい
一応エンジニアなのでブランチ名も出していきましょう。
ブランチ名の取得は下記のコマンドで取得できます。これを使っていきます。

```console
git rev-parse --abbrev-ref HEAD
```

```bash:~/.zshrc
function git-current-branch {
  local branch_name
  branch_name=`git rev-parse --abbrev-ref HEAD 2> /dev/null`
  if [ -n "$branch_name" ]; then
    echo $branch_name
  fi
}

setopt prompt_subst
RPROMPT='%D{%H:%M:%S}'
PROMPT='%~ `git-current-branch` 🍣'
```

少し煩雑な処理なのでfunctionにまとめています。
`setopt prompt_subst`は変数展開をしてくれる設定です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241408/36c9a958-fda3-c9cf-5c42-ba8b8cfb5800.png)

git管理されているディレクトリではブランチ名が表示されるようになりましたね。

## お寿司の位置を固定したい
パスが長くなればなるほど、ブランチ名が長くなればなるほど、
お寿司が右に追いやられていって可哀想なので固定します。
と言っても改行するだけ。

```bash:~/.zshrc
function git-current-branch {
  local branch_name
  branch_name=`git rev-parse --abbrev-ref HEAD 2> /dev/null`
  if [ -n "$branch_name" ]; then
    echo $branch_name
  fi
}

setopt prompt_subst
RPROMPT='%D{%H:%M:%S}'
PROMPT='%~ `git-current-branch`
 🍣'
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241408/9c513879-dc2a-a116-7fbd-0331c3951769.png)

お寿司の定位置ができました。安心しますね。

## 色々もっと目立たせたい

お寿司があると言えども白黒だと見難いので色をつけたり太文字にしたりしていきます。
文字色の指定には`%F{カラーコード}対象文字%f`、
背景色の指定には`%K{カラーコード}対象文字&k`、
太字にするには`%B対象文字%b`を使います。
カラーコードは[256 COLORS - CHEAT SHEET](https://jonasjacek.github.io/colors/)から探すと良いかと。

```bash:~/.zshrc
function git-current-branch {
  local branch_name
  branch_name=`git rev-parse --abbrev-ref HEAD 2> /dev/null`
  if [ -n "$branch_name" ]; then
    echo "%B%F{29}%f%K{29}%F{15} $branch_name %f%k%b"
  fi
}

setopt prompt_subst
RPROMPT='%F{99}%D{%H:%M:%S}%f'
PROMPT='%F{33}%~%f `git-current-branch`
 🍣'
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241408/52158c86-21d2-d2b2-24ac-a7d0fb119cea.png)

カラフルになり、お寿司がなじみましたね。

## 仕上げ
あとはもう個人の好みで仕上げてしまいましょう。

```bash:~/.zshrc
function git-current-branch {
  local branch_name
  branch_name=`git rev-parse --abbrev-ref HEAD 2> /dev/null`
  if [ -n "$branch_name" ]; then
    echo "%B%F{29}◀%f%K{29}%F{15} $branch_name %f%k%b"
  fi
}

setopt prompt_subst
RPROMPT='%F{99}%D{%H:%M:%S}%f'
PROMPT='%F{33}%~%f `git-current-branch`
 🍣  ▶  '
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241408/81eb08dd-2938-bf61-af5e-3134c02ed7ba.png)

完成。お寿司食べたい🍣

# 参考
* [お前らのターミナルはダサい](https://qiita.com/kinchiki/items/57e9391128d07819c321)
* [256 COLORS - CHEAT SHEET](https://jonasjacek.github.io/colors/)
* [Zshでデキるプロンプト](https://www.slideshare.net/tetutaro/zsh-20923001)
* [git Documentation](https://git-scm.com/docs/git-rev-parse#Documentation/git-rev-parse.txt---abbrev-refstrictloose)