Emacsでもしゃれた画面でプログラミングがしたい!!


Emacsを使っていると、使い心地はいいんだけどどうしても見た目がおしゃれじゃないというか、やっぱりテキストベースな分、現代風のテキストエディタより見た目が古臭いのが気になる人がいると思います。そんな人達のためにEmacsで自分がしている画面カスタマイズを晒したいと思います。ちなみに自分のEmacsはこんな感じです。

使っているパッケージ

カスタマイズと言ってもほとんどは既存のパッケージを使わせてもらっているだけです。

atom-one-dark-theme

atom-one-dark-theme - github

自分はEmacsを使い始める前はAtomを使っていて、そのテーマが気に入っていたのでEmacsでそれを再現できるこちらのテーマを使っています。helmやundo-treeなど主要なパッケージの色も一括で設定できるようになっているのでおすすめです。使い方はパスの通ったディレクトリに置いてinit.elに一行追加するだけです。

init.el
(load-theme 'atom-one-dark t)

powerline

powerline - github

Emacsのデフォルトのモードラインってめちゃくちゃダサくないですか?Vimはフォントにパッチ当ててまで頑張ってるのにEmacsの記事を見てるとあんまり気にしてない人が多そうだし、その分モードラインのカスタマイズに関する記事が少ない気がします。EmacsだってVimみたいにかっこいいpowerlineが使いたい!という人はみんなの味方、powerline.elを入れておきましょう。
ちなみにVimのpowerlineとEmacsのpowerlineは微妙に実装方法が違っているようで、Emacsのpowerlineは矢印の三角部分の表示がおかしくなることが多いです。これについては今後時間があるときにしっかり書きたいと思います。

2017/03/12 追記:書きました 
⇢ Emacsのpowerline.elの不具合を解消する
とりあえず自分の設定はこんな感じです。

init.el
(require 'powerline)

(defun powerline-my-theme ()
  "Setup the my mode-line."
  (interactive)
  (setq powerline-current-separator 'utf-8)
  (setq-default mode-line-format
                '("%e"
                  (:eval
                   (let* ((active (powerline-selected-window-active))
                          (mode-line (if active 'mode-line 'mode-line-inactive))
                          (face1 (if active 'mode-line-1-fg 'mode-line-2-fg))
                          (face2 (if active 'mode-line-1-arrow 'mode-line-2-arrow))
                          (separator-left (intern (format "powerline-%s-%s"
                                                          (powerline-current-separator)
                                                          (car powerline-default-separator-dir))))
                          (lhs (list (powerline-raw " " face1)
                                     (powerline-major-mode face1)
                                     (powerline-raw " " face1)
                                     (funcall separator-left face1 face2)
                                     (powerline-buffer-id nil )
                                     (powerline-raw " [ ")
                                     (powerline-raw mode-line-mule-info nil)
                                     (powerline-raw "%*")
                                     (powerline-raw " |")
                                     (powerline-process nil)
                                     (powerline-vc)
                                     (powerline-raw " ]")
                                     ))
                          (rhs (list (powerline-raw "%4l")
                                     (powerline-raw ":")
                                     (powerline-raw "%2c")
                                     (powerline-raw " | ")                                  
                                     (powerline-raw "%6p")
                                     (powerline-raw " ")
                                     )))
                     (concat (powerline-render lhs)
                             (powerline-fill nil (powerline-width rhs)) 
                             (powerline-render rhs)))))))

(defun make/set-face (face-name fg-color bg-color weight)
  (make-face face-name)
  (set-face-attribute face-name nil
                      :foreground fg-color :background bg-color :box nil :weight weight))
(make/set-face 'mode-line-1-fg "#282C34" "#EF8300" 'bold)
(make/set-face 'mode-line-2-fg "#AAAAAA" "#2F343D" 'bold)
(make/set-face 'mode-line-1-arrow  "#AAAAAA" "#3E4451" 'bold)
(make/set-face 'mode-line-2-arrow  "#AAAAAA" "#3E4451" 'bold)

(powerline-my-theme)

2017/07/09 追記:stakemori様よりご指摘をいただき修正しました。

rainbow-delimeters

rainbow-delimeters

括弧の色を階層別にカラフルにしてくれるパッケージです。対応した括弧がないと黒く表示されるので、括弧の閉じ忘れがなくなります。デフォルトだと隣り合う括弧の色味が近かったりしてわかりづらいので、自分のカラーテーマに合わせて変更すると幸せになれると思います。
ちなみにこのパッケージは専用の設定画面が用意されているので、そちらを使ってカスタマイズしましょう。起動方法は以下のコマンドを入力するだけです。

M-x customize-group rainbow-delimiters

その他

モードラインで使用中のマイナーモードを見られるようにしたい人はこちらの記事(mode-lineのモード情報をコンパクトに表示する)のようにすると長ったらしくなりすぎなくていいと思います。自分はマイナーモードが見える利点があまり感じられなかったので(有効利用している人は使い方をコメントで教えてください)非表示にしています。左側に行番号表示がしたい人は標準のlinum-modeよりnlinum-modeの方が軽量のようです。自分の環境ではなぜかうまく表示できませんでした。

とりあえず以上のような設定をすれば新しいエディタから来た人も満足できるのではないでしょうか。古いエディタなのでその分どうしてもアニメーションができるAtomなどには及びませんが、気にならないくらいの差になったと思います。