毎日もくもく

毎日もくもく

日記,そして備忘録

Powerline を導入する(tmux のステータスラインのカスタマイズ)

前の記事: xartaky.hatenablog.jp

zsh, tmux に Powerline を入れたので設定をいじる. といっても zsh の方は文句ないし,tmux の方も色は文句ないので,tmux のステータスラインをいじっていく. インストールガイドのこれを見てやっていく.
設定ファイルをいじる前に,元からある設定ファイル ~/.local/lib/python3.6/site-packages/powerline/config-files/*.config/powerline にコピーする.

$ cp -r ~/.local/lib/python3.6/site-packages/powerline/config-files ~/.config/powerline

今後は ~/.config/powerline 以下のファイルをいじる.
~/.config/powerline を見ると,config.json というファイルがあり,このファイルで,どの設定ファイルを読むか決めている. config.json の中身を見ると,tmux に関するところでは以下のようになっている.

"tmux": {
  "colorscheme": "default",
  "theme": "default"
},

自明に “colorscheme” は色について,"theme" はステータスラインで表示するものについて設定していることが分かる. 今回は色はいじらないので,"theme" だけいじる.
tmux の theme 設定ファイルは ~/.config/powerline/themes/tmux に入っている. 最初は default.json だけ入っていて,上記の config.json では "theme": "default" として default.json を指定している.
ステータスラインをいじっていくので,まずは default.jsonmytheme.json としてコピーして,mytheme.json をいじっていく.

$ cp default.json mytheme.json

特にいじっていない mytheme.json(つまり default.json)は拙者の環境では以下のようになっていた.

{
    "segments": {
        "right": [
            {
                "function": "powerline.segments.common.sys.uptime",
                "priority": 50
            },
            {
                "function": "powerline.segments.common.sys.system_load",
                "priority": 50
            },
            {
                "function": "powerline.segments.common.time.date"
            },
            {
                "function": "powerline.segments.common.time.date",
                "name": "time",
                "args": {
                    "format": "%H:%M",
                    "istime": true
                }
            },
            {
                "function": "powerline.segments.common.net.hostname"
            }
        ]
    }
}

これを見ると

  • powerline.segments.common.sys.uptime
  • powerline.segments.common.sys.system_load
    • Return system load average
  • powerline.segments.common.time.date
    • Return the current date
  • powerline.segments.common.net.hostname
    • Return the current hostname

といった segment が読み込まれていることが分かる. これに通信の状態(powerline.segments.common.net.network_load)やバッテリーの残量(powerline.segments.common.bat.battery)などを加えた. 最終的に mytheme.json は以下のようになった.

{
    "segments": {
        "right": [
            {
                "function": "powerline.segments.common.sys.uptime",
                "priority": 60
            },
            {
                "function":"powerline.segments.common.sys.cpu_load_percent",
                "before": "CPU:",
                "width": 7,
                "align": "c",
                "priority": 50
            },
            {
                "function":"powerline.segments.common.sys.system_load",
                "before": "System:",
                "width": 3,
                "align": "c",
                "priority": 50
            },
            {
                "function":"powerline.segments.common.net.network_load",
                "width": 15,
                "align": "c",
                "priority": 40
            },
            {
                "function": "powerline.segments.common.bat.battery",
                "before": "Battery:",
                "width": 16,
                "align": "c"
            },
            {
                "function": "powerline.segments.common.time.date"
            },
            {
                "function": "powerline.segments.common.time.date",
                "name": "time",
                "args": {
                    "format": "%H:%M",
                    "istime": true
                }
            },
            {
                "function": "powerline.segments.common.env.user"
            },
            {
                "function": "powerline.segments.common.net.hostname"
            }
        ]
    }
}

この変更を反映させるために ~/.config/powerline/config.json の tmux の部分を以下のようにする.

"tmux": {
  "colorscheme": "default",
  "theme": "mytheme"
},

これで tmux のステータスラインがそれっぽくなった. ちなみに tmux のステータスラインの segment として使えるものはこれCommon segmentsTmux segments に載っているものだと思う(多分). また,before などについてはこれを参照.

  • before
    • A string which will be prepended to the segment contents.

  • width
    • Enforces a specific width for this segment. This segment will work as a spacer if the width is set to auto. Several spacers may be used, and the space will be distributed equally among all the spacer segments. Spacers may have contents, either returned by a function or a static string, and the contents can be aligned with the align property.

  • align
    • Aligns the segments contents to the left (l), center © or right ®. Has no sense if width key was not specified or if segment provides its own function for auto width handling and does not care about this option.

  • priority
    • Optional segment priority. Segments with priority None (the default priority, represented by null in json) will always be included, regardless of the width of the prompt/statusline. If the priority is any number, the segment may be removed if the prompt/statusline width is too small for all the segments to be rendered. A lower number means that the segment has a higher priority. Segments are removed according to their priority, with low priority segments (i.e. with a greater priority number) being removed first.

  • args
    • A dict of arguments to be passed to a function segment.