保存時に自動でRuby 1.9のmagic commentをつける〜Ruby 1.8ユーザーも用意を
Ruby 1.9で実行するスクリプトに日本語を書く場合、スクリプトの文字コードを表すmagic commentは事実上必須となる。しかし、いちいち手で書くのは面倒臭い。Emacsは編集中のバッファの文字コードを知っているんだから、Emacsに書かせればいい。誰かがやってそうな気がするけど、見つからなかったので速攻で書いた。
別の文字コードで保存した場合には、magic commentも追随する。narrowingにも対応している。
Ruby 1.8を使っている人も将来Ruby 1.9に移行することになるので今のうちにやっておくといい。Ruby 1.8ではmagic commentは無視されるだけなのでつけていても問題ない。
(defun ruby-insert-magic-comment-if-needed () "バッファのcoding-systemをもとにmagic commentをつける。" (when (and (eq major-mode 'ruby-mode) (find-multibyte-characters (point-min) (point-max) 1)) (save-excursion (goto-char 1) (when (looking-at "^#!") (forward-line 1)) (if (re-search-forward "^#.+coding" (point-at-eol) t) (delete-region (point-at-bol) (point-at-eol)) (open-line 1)) (let* ((coding-system (symbol-name buffer-file-coding-system)) (encoding (cond ((string-match "japanese-iso-8bit\\|euc-j" coding-system) "euc-jp") ((string-match "shift.jis\\|sjis\\|cp932" coding-system) "shift_jis") ((string-match "utf-8" coding-system) "utf-8")))) (insert (format "# -*- coding: %s -*-" encoding)))))) (add-hook 'before-save-hook 'ruby-insert-magic-comment-if-needed)