Telephone Lineでモダンなmode-lineに✨

[Telephone Line](https://github.com/dbordak/telephone-line)でモダンなmode-lineを設定する方法を記載します。


# Telephone Lineとは

簡単にいうとあの有名な[powerline](https://github.com/milkypostman/powerline)を再実装したもので、
下記のようにセパレータでmode lineに表示するコンテンツを分割し、視認性をあげることができます。

![abs.jpg](https://qiita-image-store.s3.amazonaws.com/0/15684/51d3fc03-5281-16ab-0e93-bac1066fdbbb.jpeg)

![rainbow.png](https://qiita-image-store.s3.amazonaws.com/0/15684/56d230a0-31e8-e289-1b62-c01d01bbbce9.png)



# 設定方法

上記を設定するには、パッケージをインストールしたあと、
下記のように設定してあげればOKです。

```el:init.el
;; Telephone Line modeを読み込み
(require 'telephone-line)

;; 左側で表示するコンテンツの設定
(setq telephone-line-lhs
      '((evil   . (telephone-line-evil-tag-segment))
        (accent . (telephone-line-vc-segment
                   telephone-line-erc-modified-channels-segment
                   telephone-line-process-segment))
        (nil    . (telephone-line-minor-mode-segment
                   telephone-line-buffer-segment))))

;; 右側で表示するコンテンツの設定
(setq telephone-line-rhs
      '((nil    . (telephone-line-misc-info-segment))
        (accent . (telephone-line-major-mode-segment))
        (evil   . (telephone-line-airline-position-segment))))

;; Telephone Lineモードを使う設定
(telephone-line-mode 1)
```

下記のサンプルが参考になります。
<https://github.com/dbordak/telephone-line/blob/master/examples.org>


# 何が良いのか？


## バッテリーインクルード

[様々なコンテンツ表示用の関数](https://github.com/dbordak/telephone-line/blob/master/telephone-line-segments.el)が用意されており、
init.elで設定するだけで使うことができます。


```elisp:init.el
;; Left edge
(setq telephone-line-lhs
      '((nil  . (telephone-line-buffer-segment))
        (nil  . (telephone-line-airline-position-segment))))

;; Right edge
(setq telephone-line-rhs
      '(
      ;; nyan-catを表示
      (nil  . ((telephone-line-nyan-segment :active)))
      ;; version-cotrolのブランチを表示
      (nil  . ((telephone-line-vc-segment :active)))
      ;; 自作関数（※後述）
      (nil  . ((my-flycheck-segment :active)))
      (nil  . ((my-perspeen-segment :active)))
      (accent  . (telephone-line-major-mode-segment))))
```
↓こんな感じになります。
![スクリーンショット 2019-02-05 23.44.06.png](https://qiita-image-store.s3.amazonaws.com/0/15684/c2403451-7cba-28f0-d552-a6d497add3e8.png)

## 高い拡張性

こんなものを表示したい、この表示気に入らないなぁいう場合は、
`telephone-line-defsegment`を利用して自分でコンテンツ表示用の関数を定義することができます。
例えば、私はワークスペース切り替えのパッケージにperspeenというパッケージを使っているのですが、現在のワークスペースとワークスペースの累計をmode-lineに表示しています。

```elisp:init.el
(telephone-line-defsegment my-perspeen-segment ()
    (let ((fg "#A6E22E"))
      (when perspeen-mode
        (let ((index 0)
              (currnet-ws 0))
          (mapcar (lambda (ws)
                    (setq index (1+ index))
                    (if (eq ws perspeen-current-ws)
                        (setq current-ws index)))
                  perspeen-ws-list)
          (format "%s %s"
                  (propertize (all-the-icons-material "desktop_windows")
                              'face `(:family ,(all-the-icons-material-family) :height 1.0 :foreground ,fg))
                  (propertize (format "%s/%s" current-ws index)
                              'face `(:foreground ,fg)))))))
```
![スクリーンショット 2019-01-31 1.22.34.png](https://qiita-image-store.s3.amazonaws.com/0/15684/4aed99a7-1d11-452f-682a-7259afb9b1b9.png)
サンプルが下記に大量にあるので、参考になるかと思います。
<https://github.com/dbordak/telephone-line/blob/master/telephone-line-segments.el>


# 終わりに

mode-lineをモダンにできるTelephone Lineを紹介しました。
見た目をかっこよくして、テンション上げていきましょう〜。