tmuxのステータスバーにssidとかバッテリーとか音量とかload averageとか出す

**2018/4/7 追記**
macOS High Sierraにアップグレードしたところ、一部のスクリプトが正常に動作しないところがありました(SSIDとbattery)。

+ SSIDに関してはawkをちょっといじれば直ります。0.2秒考えればわかる様なやつなので割愛します。
+ batteryですが、環境によりそのままでも正常に動作する方もいるかもしれません。正常に動作しない方は(僕の場合はtmux自体がまともに使用不可になるほど致命的な問題が発生しました)こちらを参考にしてください。[Statusbar broken on High Sierra 10.13 ](https://github.com/gpakosz/.tmux/issues/126)

(追記ここまで)

こんな感じ


<img width="893" alt="スクリーンショット 2017-01-11 00.28.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/78906/ab2fdd49-0494-41b7-fe15-7f2d8f2f8158.png">

左:ペイン番号、ホスト名
右:load average、音量、ssid、回線の強さ的なもの、バッテリー、日付、時刻

ターミナルのthemeはsolarized darkです。違うやつだと色が変わります、多分。
どのくらい普及してるのかわかりませんが、tmuxのステータスの設定はpowerlineを使っている人も多いかと思います。僕は暇つぶしみたいなものなのでなるべく自分で書いています

環境はMax OS X El Capitan (10.11.2)です。
load average以外はOS Xでないと動かないと思います。
#解説

以下を`.tmux.conf`に書いてください。
すでに`set-option -g status-right~~`の箇所が存在している方はまあ適当になんとかしてください

```..tmux.conf
set-option -g status-right '#(get_load_average_tmux)#(get_volume_tmux)#(get_battery_tmux)#(get_ssid_tmux)#[fg=colour014] %H:%M | %m/%d %a#[default]'
```


`#[fg=red]`みたいなのは色の設定です。その辺の設定はめんどくさいので割愛します。
この記事がとてもわかりやすので参考にしてください。
[tmux の status line の設定方法](http://qiita.com/nojima/items/9bc576c922da3604a72b)

```
#(get_load_average_tmux)#(get_volume_tmux)#(get_battery_tmux)#(get_ssid_tmux)
```

👆の部分が今回の肝です。tmuxのステータスバーでは、`#()`で囲うことで、シェルのコマンドが実行できます。そのコマンドの出力の一行目がステータスラインに反映されます。

つまり、👆のでは`get_load_average_tmux` `get_volume_tmux` `get_battery_tmux` `get_ssid_tmux`の四つのコマンドを実行しているということです。そのコマンドは自分で書かなくてはいけません。

僕は今はすべてのコマンドをまとめて一つのコマンドにしていますが、とりあえずわかりやすいように今回はコマンドごとに分けて紹介します。分けてない現行で使っている設定はこちらです。

+ [tmux-status-line]
(https://github.com/arks22/dotfiles/blob/master/commands/tmux-status-line)

+ [.tmux.conf]
(https://github.com/arks22/dotfiles/blob/master/.tmux.conf)

zshを使っている人は以下のスクリプトをコピペすればそのまま動くと思います。bashは音量のやつだけ対応してないです、改行抑制のための`echo`の`-n`オプションが効かないのでそこだけ直せば動くと思います。

あるいは.tmux.confの`#(get_battery_tmux)`みたいなやつを
`#(sh path/to/get_battery_tmux.sh)`みたいな感じでやれば動くと思います。

##load average

<img width="68" alt="スクリーンショット 2017-01-11 00.56.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/78906/317d02d8-9ed8-a90f-db63-9b09821a6c06.png">

まずload averageを知らない方は[こちら](http://qiita.com/k0kubun/items/8065f5cf2da7605c8043)の記事とかを参考に。

```zsh:get_load_average_tmux
#!/bin/sh

echo "(#[fg=yellow]$(uptime | awk '{print $(NF-2)}')#[default]) "
```

uptimeで取ってきたやつをawkでペッとしてるだけです。

##音量

<img width="110" alt="スクリーンショット 2017-01-11 00.58.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/78906/0c9b82e7-45c1-c31c-0304-874b9593d9ef.png">

音量は少し凝っています。OS Xは音量が16段階なので、それに合わせて16段階で表示しています。muteの時はmuteってなります

```zsh:get_volume_tmux
#!/bin/zsh

if sound_info=$(osascript -e 'get volume settings') ; then
  if [ "$(echo $sound_info | awk '{print $8}')" = "muted:false" ]; then
    sound_volume=$(expr $(echo $sound_info | awk '{print $2}' | sed "s/[^0-9]//g") / 6 )
    str=""
    for ((i=0; i < $sound_volume; i++ )); do
      str="${str}■"
    done
    for ((i=$sound_volume; i < 16; i++ )); do
      str="${str} "
    done
    sound="#[bold][$str]#[default] "
  else
    sound="#[bold][      mute      ]#[default] "
  fi
  echo $sound
fi
```


##SSIDとか

通常時 : <img width="163" alt="スクリーンショット 2017-01-11 00.59.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/78906/83271591-a311-3190-92b5-85c89d3e2006.png">

電波検索中 : <img width="68" alt="スクリーンショット 2017-01-11 01.08.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/78906/2ec4029a-5003-53bd-8df7-6444790f6e64.png">

電波がない、wifiオフの時 : <img width="40" alt="スクリーンショット 2017-01-11 01.10.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/78906/a4b6db46-b4a8-2275-2400-561ee0ec65e3.png">


これはオリジナルも入ってますが、[b4b4r07さんの設定](https://github.com/b4b4r07/dotfiles/blob/master/.tmux/bin/wifi)に強く影響を受けています。というかほとんど真似してます。
ssid,接続状態,回線の強さ的なやつが一目でわかるので本当に便利です。

```zsh:get_ssid_tmux
#!/bin/sh

airport_path="/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport"

if air_info=($(eval "$airport_path" -I | grep -E "^ *(agrCtlRSSI|state|SSID):" | awk '{print $2}')) ; then

  rssi=${air_info[0]}
  state=${air_info[1]}
  ssid=${air_info[2]}

  case "$state" in
    "running" )
      signals=(▁ ▂ ▄ ▆ █)
      signal=""
      rssi_=$(expr 5 - ${rssi} / -20)
      for ((i=0; i < $rssi_; i++ )); do
        signal="${signal}${signals[$i]}"
      done
      airport_=" #[underscore]${ssid}#[default] | ${signal} "
    ;;
    "init"    ) airport_="#[fg=yellow] ... " ;;
    *         ) airport_="#[fg=red] ✘  " ;;
  esac  
  echo "#[bold]|#[default]${airport_}#[fg=colour014]|#[default] "
fi

```
##バッテリー

<img width="79" alt="スクリーンショット 2017-01-11 01.01.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/78906/9244b286-6cd1-1435-e5f6-ecd8461c73b6.png">     <img width="56" alt="スクリーンショット 2017-01-11 01.04.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/78906/ae4d8c72-3e68-626c-d6b8-5589cb06abd4.png">

充電中、または残量が15%より大きい時は背景がcyan(僕の設定だとほとんど緑)で、15%以下かつ充電していない時は背景が赤になります。
充電中は⚡雷⚡マークが出ます

```zsh:get_battery_tmux
#!/bin/sh



if battery_info=$(/usr/bin/pmset -g ps | awk '{ if (NR == 2) print $2 " " $3 }' | sed -e "s/;//g" -e "s/%//") ; then
  battery_quantity=$(echo $battery_info | awk '{print $1}')
  if [[ ! $battery_info =~ "discharging" ]]; then
    battery="#[bg=cyan,fg=black] ⚡ $battery_quantity% #[default]"
  elif (( $battery_quantity < 16 )); then
    battery="#[bg=red,fg=white] $battery_quantity% #[default]"
  else
    battery="#[bg=cyan,fg=black] $battery_quantity% #[default]"
  fi
  echo $battery
fi

```


*****


どこか動かないところがあれば多分こちらのミスなのでコメントしていただけるとありがたいです。