豪鬼メモ

一瞬千撃

Emacsで折り返し位置をハイライトするcolumn-maker.el

集団でプログラミングをする環境では、コーディングの際の桁数を順守するように求められることは珍しくない。俺は普段はXのEmacsで作業していて、そのウィンドウ幅が80桁になるように設定を書いていた。こうしておけば、ウインドウの端に来た時に改行すればいい。

(if (eq window-system 'x) (progn
  (setq default-frame-alist '(
      (foreground-color . "#ddeeff")
      (background-color . "#002222")
      (width . 80) (height . 50))))

ただ、実際これは不便である。各種環境からsshでリモートログインして使う場合には当然この設定が効かないので、自分でウィンドウ幅を80桁あたりに直すとかいう苦行を強いられるからだ。また、80桁ギリギリで改行した箇所と改行せずに折り返された箇所の区別がつきにくいのも問題だ。さらに、諸事情で折り返しを敢えてしないコードも書いたり読んだりすることがあるわけだが、その際に強制的に折り返されたのを見るというのも気に入らない。

ウィンドウは広く使っていても、80桁の来た所で折り返すべき旨を示唆してくれればよいのになと思って調べたところ、column-maker.elというドンピシャなのが公開されているじゃないか。こいつをインストールして、以下のような設定を書く。

(add-to-list 'load-path "/usr/share/emacs/site-lisp")
(require 'column-marker)
(if (eq window-system 'x) (progn
  (defface my-face-folding '((t (:background "#444444"))) nil)
  (defvar my-face-folding 'my-face-folding)
) (progn
  (defface my-face-folding '((t (:background "#dddddd"))) nil)
  (defvar my-face-folding 'my-face-folding)
))
(column-marker-create column-marker-9 my-face-folding)
(add-hook 'c-mode-hook (lambda () (interactive) (column-marker-9 80)))
(add-hook 'c++-mode-hook (lambda () (interactive) (column-marker-9 80)))
(add-hook 'ruby-mode-hook (lambda () (interactive) (column-marker-9 80)))
(add-hook 'python-mode-hook (lambda () (interactive) (column-marker-9 80)))
(add-hook 'java-mode-hook (lambda () (interactive) (column-marker-9 80)))
(add-hook 'perl-mode-hook (lambda () (interactive) (column-marker-9 80)))
(add-hook 'lua-hook (lambda () (interactive) (column-marker-9 80)))
(add-hook 'sh-hook (lambda () (interactive) (column-marker-9 80)))

すると、X上でも端末経由でも、80桁目のバックグラウンドのコントラストをちょっと落とすことで、控えめに改行を示唆してくれる。改行なんてしねーよという場合にもあんまり目障りじゃない。これで出張も安心だね。ありがたやありがたや。

f:id:fridaynight:20140611205302p:plain