LoginSignup
53

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-07-31

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

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

(追記ここまで)

こんな感じ

スクリーンショット 2017-01-11 00.28.50.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 の設定方法

#(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の四つのコマンドを実行しているということです。そのコマンドは自分で書かなくてはいけません。

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

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

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

load average

スクリーンショット 2017-01-11 00.56.28.png

まずload averageを知らない方はこちらの記事とかを参考に。

get_load_average_tmux
#!/bin/sh

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

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

音量

スクリーンショット 2017-01-11 00.58.24.png

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

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とか

通常時 : スクリーンショット 2017-01-11 00.59.31.png

電波検索中 : スクリーンショット 2017-01-11 01.08.48.png

電波がない、wifiオフの時 : スクリーンショット 2017-01-11 01.10.46.png

これはオリジナルも入ってますが、b4b4r07さんの設定に強く影響を受けています。というかほとんど真似してます。
ssid,接続状態,回線の強さ的なやつが一目でわかるので本当に便利です。

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

バッテリー

スクリーンショット 2017-01-11 01.01.18.png スクリーンショット 2017-01-11 01.04.06.png

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

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


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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
53