Powerline-shellでターミナルを改造しよう

## はじめに

もともとはgitのカレントブランチを常に表示したいという願望からいろいろ調べてたらPowerlineにたどり着きました。

| |Version|
|---|---|
|macOS|Mojave 10.14.6|
|python|2.7.15|

## Powerlineとは？

いい感じにターミナルの表示をかっこよくしてくれるツール、らしい。

## ゴールイメージ

![スクリーンショット 2019-12-06 2.01.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190770/48312771-7507-2f91-5c10-2f0d81d1bc5d.png)

- 端末名、ユーザーが不要なので表示しない
- gitのカレントブランチを表示する
- コマンド行で改行する

## Powerline-shellの設定

### インストール

[公式リポジトリ](https://github.com/b-ryan/powerline-shell)に沿ってインストールしていきます。
pipからインストールする方法もありますが、今回はgithubからcloneしてくる方法で進めます。

```shell
# 任意のディレクトリで実行
git clone https://github.com/b-ryan/powerline-shell
cd powerline-shell
python setup.py install
```

`powerline-shell`とコマンドを打ってわけの分からない文字列が出力されればOK。

```shell
$ powerline-shell
\[\e[38;5;250m\]\[\e[48;5;240m\] \u \[\e[48;5;238m\]\...
```

### ターミナルへの反映

自分はbashを使っているので、readmeを参考にbash用の設定をします。
以下を.bashrcに追加or新規作成します。

```shell:~/.bashrc
function _update_ps1() {
  PS1=$(powerline-shell $?)
}

if [[ $TERM != linux && ! $PROMPT_COMMAND =~ _update_ps1 ]]; then
  PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi
```

また、.bash_profileに.bashrcを読み込む設定を書き加えます。

```shell:~/.bash_profile
if [ -f ~/.bashrc ] ; then
  . ~/.bashrc
fi
```

ここまで設定したら、`source ~/.bash_profile`を実行して設定を反映させるとプロンプトの表示が変わるはず。

![スクリーンショット 2019-12-04 2.22.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190770/87335da8-a41a-f53d-3989-6b355fe41d79.png)

(すごい文字化け...)

## フォントの設定

### インストール

文字化けを解消するためpowerline用のフォントをインストールします。
今回は`SourceCodePro`を使います。

[公式リポジトリ](https://github.com/powerline/fonts)

コマンドでインストールする方法がよく分からなかったのでFinder上からインストールします。

リポジトリからzipファイルをダウンロードして解凍、対象のフォントを選択してFontBookで開くとフォントをインストールできます。

<img width="1100" alt="スクリーンショット 2019-12-04 2.33.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190770/870c2654-bad9-1d65-ad16-e1605e4033bd.png">

### 設定

ターミナルの設定で利用フォントを`SourceCodePro`を指定します。
画像はiTerm2の場合です。

![スクリーンショット 2019-12-04 2.40.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190770/cd61d665-b10d-3d1d-727e-5bb9b756f773.png)

これで文字化けせずに表示されるようになりました。

## 表示項目の設定

表示項目をカスタマイズしていきます。

- ユーザー名、端末名は表示しない
- コマンド行で改行する

### configファイルの生成

設定を変更するためのconfigファイルを作成します。

```shell
mkdir -p ~/.config/powerline-shell && \
powerline-shell --generate-config > ~/.config/powerline-shell/config.json
```

### configファイルの編集

ユーザー名と端末名を示す項目を削除します。

```diff:~/.config/powerline-shell/config.json
{
  "segments": [
    "virtual_env",
-   "username",
-   "hostname",
    "ssh",
    "cwd",
    "git",
    "hg",
    "jobs",
    "root"
  ]
}
```

即設定が反映されて、ユーザー名と端末名が消えました。

![スクリーンショット 2019-12-04 2.46.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190770/e60d19ab-7385-fb68-4df3-2254eb9835d7.png)

### .bashrcの編集

コマンド行で改行するために`.bashrc`に手を加えます。

```diff:~/.bashrc
function _update_ps1() {
- PS1=$(powerline-shell $?)
+ PS1="$(powerline-shell $?)\n$ "
}
```

`source ~/.bashrc`で設定を反映させると、コマンド行で改行するようになりました。
1行目の$マークを消せればいいんですけど消し方が分からず。。

![スクリーンショット 2019-12-04 2.48.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190770/6766cf05-55f4-e971-bd27-c0bdcd1f1f9b.png)

## 色の設定

色設定にも手を加えてみます。

### テーマファイルの作成

色を変更するためのテーマファイルを作成します。
テーマファイル群はpowerline-shellを解凍したディレクトリから`./powerline_shell/themes`にあります。
今回はデフォルトの色設定を少し調整したいので、ファイルをコピーします。

```shell
cp default.py mytheme.py
```

### テーマファイルの指定

コピーしたテーマを利用するように指定します。
ディレクトリは解凍先により変わります。

```diff:~/.config/powerline-shell/config.json
{
  "segments": [
    "virtual_env",
    "ssh",
    "cwd",
    "git",
    "hg",
    "jobs",
    "root"
  ],
+ "theme": "~/tools/powerline-shell/powerline_shell/themes/mytheme.py"
}
```

### テーマファイルの編集

先ほど作成した`mytheme.py`を編集します。
デフォルトだとgitブランチに変更点がある場合にブランチの背景がピンクになるんですが、
常にグリーンで表示したいので変更します。
BGが背景色でFGが文字色です。

```diff:mytheme.py
    REPO_CLEAN_BG = 148  # a light green color
    REPO_CLEAN_FG = 0  # black
-   REPO_DIRTY_BG = 161  # pink/red
-   REPO_DIRTY_FG = 15  # white
+   REPO_DIRTY_BG = 148
+   REPO_DIRTY_FG = 0
```

ブランチ部分の表示色が変わりました。

<img width="748" alt="スクリーンショット 2019-12-05 0.17.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190770/5cdb0ec4-ceae-7e5d-b3eb-42e2d802b98f.png">

### カラーのテスト

色と数値がどう結びついてるのかよく分からないんですけど、色の確認ができる仕組みが用意されてます。
解凍したpowerline-shellフォルダにある`colortest.py`を使います。

引数を元に背景と文字の色を確認できます。

<img width="638" alt="スクリーンショット 2019-12-05 0.21.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190770/b65f7131-3fbc-5b43-96f1-f55a63902d83.png">

## 補足 やっぱりRicty使いたい！

自分はフォントはRictyDiminishedが好きなので使いたいなと思っていたところ、Rictyでもpowerline用のフォントがありました！

これを使えばpowerline上でも文字化けすることなくRictyを使えます。

[GitHubリポジトリ](https://github.com/mzyy94/RictyDiminished-for-Powerline)

## まとめ

ターミナルがかっこよくなるとテンション上がる！
みなさんも自分だけのオリジナルのターミナルを作ってみてください！