tmux-powerline


##はじめに

この記事は､[みんなで作ろう最強の設定ファイル Advent Calendar 2013](http://qiita.com/advent-calendar/2013/dotfiles)という企画の一部です｡

```bash:
cd

git clone https://github.com/syui/dotfiles.git
```

##解説

`tmux`というものがあります。これは、起動すると､1つの端末ウィンドウで複数の仮想端末を実現できるツールです。

```bash:
sudo port install tmux
```

そして、`tmux`は、`~/.tmux.conf`という設定ファイルに設定を記述することで､様々な個人設定を反映することが出来ます｡

```bash:~/.tmux.conf
# 文字コード
set-window-option -g utf8 on
```

今回は､[tmux-powerline](https://github.com/erikw/tmux-powerline)というものを設定ファイルに追加してみます。

tmux-powerline`というのは、ステータスラインを様々なシェルスクリプトを使い見栄えを良くするために用いられます｡

[画面下がそれにあたります]

では、実際にツールをダウンロードし､設定ファイルに反映させていきましょう｡

```bash:
mkdir -p ~/dotfiles/.tmux

cd !$

git clone https://github.com/erikw/tmux-powerline.git
```

ここで、設定ファイルには､以下を追記します｡

```bash:~/.tmux.conf
# ステータスラインの設定 {{{
set-option -g status on
set-option -g status-interval 2
set-option -g status-utf8 on
set-option -g status-justify "centre"
set-option -g status-left-length 60
set-option -g status-right-length 90
set-option -g status-left "#(~/dotfiles/.tmux/tmux-powerline/powerline.sh left)"
set-option -g status-right "#(~/dotfiles/.tmux/tmux-powerline/powerline.sh right)"
# }}}
```

次に､表示形式の設定を行います｡設定は､`~/dotfiles/.tmux/tmux-powerline/theme/default.sh`から可能になります｡

また、複数のテーマファイルを作って､切り替えたい場合は､`~/dotfiles/.tmux/tmux-powerline/config/defaults.sh`を変更します｡

```bash:~/dotfiles/.tmux/tmux-powerline/config/defaults.sh
# Default values for non segment configuration options.

export TMUX_POWERLINE_DEBUG_MODE_ENABLED_DEFAULT="false"
export TMUX_POWERLINE_PATCHED_FONT_IN_USE_DEFAULT="true"
export TMUX_POWERLINE_THEME_DEFAULT="ここにファイル名を入れる"
```

しかし、切り替えを考えていない場合は､`~/dotfiles/.tmux/tmux-powerline/theme/default.sh`を変更していくことにしましょう｡

```bash:~/dotfiles/.tmux/tmux-powerline/theme/default.sh
# Default Theme
# ここは､各表示の繋ぎ目部分をどうするかの設定になります｡

if patched_font_in_use; then
  TMUX_POWERLINE_SEPARATOR_LEFT_BOLD="⮂"
  TMUX_POWERLINE_SEPARATOR_LEFT_THIN="⮃"
  TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD="⮀"
  TMUX_POWERLINE_SEPARATOR_RIGHT_THIN="⮁"
else
  TMUX_POWERLINE_SEPARATOR_LEFT_BOLD="◀"
  TMUX_POWERLINE_SEPARATOR_LEFT_THIN="❮"
  TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD="▶"
  TMUX_POWERLINE_SEPARATOR_RIGHT_THIN="❯"
fi

TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR=${TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR:-'235'}
TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR=${TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR:-'255'}

TMUX_POWERLINE_DEFAULT_LEFTSIDE_SEPARATOR=${TMUX_POWERLINE_DEFAULT_LEFTSIDE_SEPARATOR:-$TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD}
TMUX_POWERLINE_DEFAULT_RIGHTSIDE_SEPARATOR=${TMUX_POWERLINE_DEFAULT_RIGHTSIDE_SEPARATOR:-$TMUX_POWERLINE_SEPARATOR_LEFT_BOLD}


# Format: segment_name background_color foreground_color [non_default_separator]
# ここは、`tmux-powerline/segments`にあるシェルスクリプトの実行結果を、どのような順番で表示するかの設定になります｡

# ステータスライン左
if [ -z $TMUX_POWERLINE_LEFT_STATUS_SEGMENTS ]; then
  TMUX_POWERLINE_LEFT_STATUS_SEGMENTS=(
    "tmux_session_info 2 7" \ #セッション
    "hostname 3 255" \ #ホスト名
    "vcs_compare 60 255" \ #Compare
    "vcs_staged 64 255" \ #Staged
    "vcs_modified 9 255" \ #Modified
    "vcs_others 245 0" \ #Others
    "ifstat 30 255" \ #ネットワーク利用率
    #"ifstat_sys 30 255" \ #ネットワークシステム
    #"lan_ip 24 255 ${TMUX_POWERLINE_SEPARATOR_RIGHT_THIN}" 　\ #LAN IP アドレス
    #"wan_ip 24 255" \ #WAN IP アドレス
    
  )
fi

# ステータスライン右
if [ -z $TMUX_POWERLINE_RIGHT_STATUS_SEGMENTS ]; then
  TMUX_POWERLINE_RIGHT_STATUS_SEGMENTS=(
    #"earthquake 3 0" \ #地震速報
    "vcs_branch 29 88" \ #ブランチ名
    #"pwd 89 211" \ #現在のディレクトリ
    "mailcount 9 255" \ #メール
    "now_playing 234 37" \ #再生曲
    "cpu 240 136" \ #CPU
    "load 6 7" \ #ロード
    #"tmux_mem_cpu_load 234 136" \ #メモリ
    "battery 5 7" \ #バッテリー
    #"weather 37 255" \ #天気
    #"rainbarf 0 0" \ #降水確率
    #"xkb_layout 125 117" \ #XKBのレイアウト
    "date_day 2 7" \ #日付
    "date 2 7 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \ #日付
    "time 2 7 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \ #時刻
    #"utc_time 235 136 $ {TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \ #起動時間
  )
fi
```

では、分かりにくそうな部分を説明します｡

なお、表示を無効化したい場合は､行頭に`#`をつけると、非表示に出来ます｡

上の例で言えば､`#"battery …`となります。

色については､数字で設定します｡例えば､`0`が黒、`5`がピンク、`7`が白となっています｡各自で好きな色を設定してみてください｡


このように、ステータスラインを自動で設定してくれる`™ux-powerline`なのですが、`tmux`の書き方を利用することも出来ます｡

例えば､設定ファイルに書いたこの部分を変更してみましょう｡

```bash:~/.tmux.conf
set-option -g status-left "#(~/dotfiles/.tmux/tmux-powerline/powerline.sh left)"
```

```bash:~/.tmux.conf
set-option -g status-left "#(~/dotfiles/tmux-powerline/powerline.sh left)#[bg=black]#[fg=white] #[fg=red]#(pwd-name) #[bg=red]#[fg=black]⮀#[bg=red]#[fg=white] M #(~/dotfiles/bin/used-mem) %% #[bg=black]#[fg=red]⮀"
```

ここで、各記述方式について見て行きたいと思います｡

|記述方式|内容|
|----|----|
|#[bg=black]|背景色を黒にする|
|#[fg=white]|フォント色を白にする|
|#(pwd-name)|`pwd-name`というコマンドがあれば、その実行結果を表示する|
|%%|%と表示する|

このような書き方ができるので､自分が良いと思うステータスラインにカスタマイズしてみるのも面白いかもしれません｡

そして、カスタマイズした内容をすぐに反映したければ､以下の様なキーを設定しておくとよいでしょ｡

```bash:~/.tmux.conf
# キーバインドの設定 {{{
# P-rで設定ファイルの再読
bind r source-file ~/.tmux.conf\; display-message "Reload Config!!"
# }}}
```

これは、`Prefix`キーである`Ctrl`+`b`と`r`を続けて押すことで設定ファイルの再読み込みが実行されるという設定です｡


###フォント

フォントが上手く表示されない場合があります｡そのような場合は、フォントにパッチを当てて､パッチを当ててできたフォントを端末に設定してみましょう。

```bash:
sudo port install fontforge

curl -O https://raw.github.com/Lokaltog/powerline/develop/font/fontpatcher.py -O http://www.marksimonson.com/assets/content/fonts/AnonymousPro-1.002.zip

unzip -j *.zip

fontforge -script fontpatcher.py *.ttf

mv *.ttf ~/Library/Fonts/
```

[https://github.com/Lokaltog/powerline](https://github.com/Lokaltog/powerline)

[http://www.marksimonson.com/fonts/view/anonymous-pro](http://www.marksimonson.com/fonts/view/anonymous-pro)