Python 版 Powerline を使ってみる(1日目)


130331-0007

ターミナルで カコイイ ステータスラインを実現するためにフォント自体を改造する というコロンブスの卵的機転で一世を風靡した vim-powerline がいつの間にやら duplicated となっています。現在はその代替として powerline が開発中です。

ただし “開発中” とはまさに言葉通りで、ほとんど毎週仕様が変わるα版っぷりを発揮してくれまして、追っていて暇することがありません。git pull と同時に大量のデバッグメッセージが出るのもしょっちゅうです。

今年初めから追っかけてある程度落ち着いたかな? とも思えてきましたのでここらで現状を書き留めておきます。

まあ、仕様はこれからも変わっていくと思いますし、4 月に受ける情報処理高度試験の勉強しろ! と内なる声が先ほどからうるさいので簡潔にまとめますね。

そもそもこれは何?

powerline はステータスラインをカコヨク彩るツールです。 vim-powerline はその名の通り vim のためのものでしたが、これはいくつかの理由から開発を中止し、Python を使ってフルスクラッチで書き直されました。特徴は以下のような感じです。

全部 Python で書かれてる!
vim-powerline は純粋な vim スクリプトで書かれていたために数多の制限にしばられていました。これを避けるために vim の Python インタプリタ機能を使って書き直されたものが powerline です。
vim 以外のステータスラインも書ける!
powerline は Python モジュールとして書かれていますので、vim 以外からも呼び出すことが出来ます。現在は bash などのシェルプロンプトや、tmux や ipython などのステータスラインを統一的に扱えるようになっています。
Python だから拡張も簡単!
今をときめく情強言語 Python で書かれてますからね。vim スクリプトの 変態文法 と向き合わずにすむのは強みです。

インストール

いろいろ変遷がありましたが、今はちゃんとドキュメントにまとまってます。

Overview — Powerline beta documentation
https://powerline.readthedocs.org/en/latest/overview.html

今までのフォントが使えない!?

ここ見ればばっちりなのですが、注意点としては、 vim-powerline で使っていたフォントはそのままでは使えない ことです。グリフはほとんど変わってないんですがコードポイントが違うんですよね。パッチ当て直すのがめんどくさいです(‘A`)

もっとも、設定ファイルを書き換えれば旧来のフォントを使い回すことも可能です。 config.json (メインの設定ファイル)だけで全て設定できるようになってますので助かります。僕はもう新しいフォントに変えちゃいましたけどね。

カスタマイズしよう!

この節書くだけでものすごい分量になる & 多分まだまだ変更ありなので、最低限のことだけ書いときます。

まずは gitclone するか、 pip でインストールしたディレクトリから設定ファイルをコピーしてきます。

$ mkdir -p ~/.config/powerline
# git ならこんな感じ
$ cp ~/git/powerline/powerline/config_files/* ~/.config/powerline
# メインの設定ファイル
$ vim ~/.config/powerline/config.json

あとはごりごり JSON やら Python モジュールを書いていくわけですが……先ほども書きましたように、ココにそれをまとめる余白はありませんので、実際に僕のレポジトリを見てくださいね。

delphinus35/dotfiles · GitHub
https://github.com/delphinus35/dotfiles

手順としては以下のような感じです。

簡単なカスタマイズなら config.json で十分
カラースキームを切り替えたり、先に書きました、特殊文字列をいじるだけならこのファイルだけで事足ります。
カラースキームを自作したり表示項目を付け足す
colorschemesthemes フォルダを見てください。各種の JSON ファイルが並んでます。
自作のセグメントを作る
これには Python の知識が必要になります。僕も Python 勉強しながら書いてますので当てにはならないとは思いますが、いくつか書いてますのでレポジトリのディレクトリ(.config/powerline/ext/ )とか powerline 本体のソースを参照してください。

おわりに

特に、最後の点に関してはまだまだ仕様が変わりそうな気配です。

天気情報や未読メール数の取得など、時間のかかる処理を別スレッドで非同期に実行してくれるみたいなのですが、僕のつたない Python 知識ではとても追いつきません。

これを読んだスーパーハカーは誰か解説してください。 (;´∀`) (powerline/lib/threaded.py 辺りがちんぷんかんぷんです……)

One thought on “Python 版 Powerline を使ってみる(1日目)

コメントを残す