Emacsからスクロールバーを消してyalinum-modeを入れた


e2wm.elを使わせてもらうようになってから、ウィンドウの使い方がだいぶ変わってきました。そして、これまでは気にも留めなかったものがすごく気になるようになってきました。

https://cacoo.com/diagrams/TiwovYL3X1hUhZ4D-EF0F7.png

e2wmでは、かなりのウィンドウでプラグインが動くことになるのでスクロールバーがあっても、全くありがたくありません。そもそも、スクロールバーを最近ドラッグした記憶もおぼつきません。

スクロールバーを消すのはすごく簡単で次のコードを.emacsあたりに貼っとけば消えます。

(toggle-scroll-bar nil)

ただ、これのやっかいなところは全部消えてしまうところです。どうやらバッファローカルには消せないようで全てのバッファから跡形もなくスクロールバーを消しさってしまいます。

スクロールバーは文字どおりスクロールさせるバーとしては全く活躍していないのですが、バッファの大きさがどれくらいでそのバッファで自分がどの辺りにいるのか、ということを知るうえではかなり重宝します。なのでコードを書いているバッファや長い文章を開いているバッファでは残っておいてもらいたいのです。

というわけで、何か良い方法はないものだろうか、と探していたところ、@tm8stさんが作られたyalinum.elを発見しました。

行番号表示にスクロールバー風現在表示領域の表示機能を追加したyalinum.elを公開しました。 – tm8stの日記

これは、行番号の表示部分にスクロールバー風の物体を表示してくれるelispです。linum-modeを常用している人だと行番号が表示されるスペースでスクロールバーな物体も表示されるのでかなりオトクです。

https://cacoo.com/diagrams/TiwovYL3X1hUhZ4D-6B9B1.png

yalinum.elの素敵なところは、バッファごとに表示の有無を変えられるところ。つまり先程の不満を解決してくれるわけです。 今のところ、次のような設定で各モードのフックポイントにひっかけています。

;;フックにかける
(dolist (hook (list
               'c-mode-hook
               'emacs-lisp-mode-hook
               'lisp-interaction-mode-hook
               'lisp-mode-hook
               'java-mode-hook
               'haskell-mode-hook
               'sh-mode-hook
               'python-mode-hook
               'ess-mode-hook
               'inferior-ess-mode-hook
               'lua-mode-hook
               'scala-mode-hook))
  (add-hook hook '(lambda ()
                   (yalinum-mode 1))))

;;yalinumの背景色の設定
(set-face-background 'yalinum-bar-face "DarkOliveGreen")

とっても素晴らしいです!! これでスクロールバーとお別れできます。 あまりにも素晴らしかったので、行数に応じて行番号を表示する領域の幅が自動で変わるようにしてみました。といっても本家linum-modeのコードをコピペしただけです。

myuhe/emacs-yalinum – GitHub

表示領域原理主義者の方は導入すると幸せになれること間違いなしです。