Powerline が重いとか都市伝説を信じてる奴ってまだいるの?(5日目 powerline-daemon 編)


Powerline についての記事、これで 5 つ連続してますね。

題名はホッテントリメーカーです。イヤいるんですけどね、僕とか。

前回やたらとセグメントを追加したおかげで、動作がもっさりしてきたかもしれません。というか僕がそうでした。そういう方は第 2 回に名前だけ紹介した powerline-daemon の利用を検討してみましょう。

powerline-daemon のインストール

これは特に難しくありません。ダウンロードしてきて、必要なファイルをパスの通ったディレクトリに置くだけです。

$ cd ~/git
$ git clone https://github.com/kovidgoyal/powerline-daemon
$ cd ~/bin
$ ln -s ../git/powerline-daemon/powerline-daemon
$ ln -s ../git/powerline-daemon/powerline-client.py

README には powerline-client.c をコンパイルして使うように記されていますが、Python で書かれている powerline-client.py でも大して変わらんと思います。多分。

後は、powerline-daemon と打って、起動するだけです。

$ powerline-daemon
# テーマやカラースキームの変更は自動的に適用されるが、
# Powerline 本体や、セグメント用のモジュールなどを書き換えたときは再起動が必要。
$ powerline-daemon -r

シェルプロンプトの設定

Bash での例を書きます。今までは公式ドキュメントにあるとおり、.bashrc に 1 行だけ追加していたと思いますが、

. ~/git/powerline/bindings/bash/powerline.sh

powerline-client.py を使うように、中身を書き換えて .bashrc に直接貼り付けておきます。

# powerline

_powerline_tmux_setenv() {
    if [[ -n "$TMUX" ]]; then
        tmux setenv TMUX_"$1"_$(tmux display -p "#D" | tr -d %) "$2"
    fi
}

_powerline_tmux_set_pwd() {
    _powerline_tmux_setenv PWD "$PWD"
}

_powerline_tmux_set_columns() {
    _powerline_tmux_setenv COLUMNS "$COLUMNS"
}

_powerline_prompt() {
    [[ -z "$POWERLINE_OLD_PROMPT_COMMAND" ]] ||
        eval $POWERLINE_OLD_PROMPT_COMMAND
    PS1="$(powerline-client.py shell left -r bash_prompt --last_exit_code=$?)"
    _powerline_tmux_set_pwd
}

trap "_powerline_tmux_set_columns" SIGWINCH
_powerline_tmux_set_columns

[[ "$PROMPT_COMMAND" == "_powerline_prompt" ]] ||
    POWERLINE_OLD_PROMPT_COMMAND="$PROMPT_COMMAND"
export PROMPT_COMMAND="_powerline¥_prompt"

シェルを再起動すると、プロンプトがずいぶん軽快になっているはずです。

tmux の設定

これは単に powerline となっていたところを powerline-client.py に書き換えるだけですね。

set -g status-left '#[fg=colour16,bg=colour254,bold] #S #[fg=colour254,bg=colour236,nobold]?#(powerline-client.py tmux left)'
set -g status-right '#(powerline-client.py tmux right)'

vim は……?

さて、これらができるならば、当然 vim はどうなの? となりますよね。結論から言うと、 vim では powerline-client.py が使えません。もとい、必要ありません。

tmux や bash は Powerline を表示するために /usr/bin/python を別プロセスで立ち上げていますが、vim は内蔵の Python インタプリタを使うので資源を余計に消費しない(はず)のです。

とはいえ、セグメントで重い処理(前回書きました、Last.fm の再生履歴のような)してたら意味ありませんからね。vim の Powerline では vim の情報を表示するだけにしておきましょう。

コメントを残す