codingを入れないように
ruby-modeを使っていると、ファイルに保存するときに
# -*- coding: utf-8 -*-
っていうコメントが入ります。文字コードを自動で認識してくれるいいやつなんですが、プロジェクトでは他の人はemacs使ってないし、他のこのコメントが入ってないファイルも普通にutf-8で認識してくれているので、僕には不要なんですよね。
っていう訳で、これを出力しないようにしようと思って /Applications/Emacs.app/Contents/Resources/site-lisp/ruby-mode.el をみてみました。関係してるっぽいのはこの辺。
(defun ruby-mode-set-encoding () (save-excursion (widen) (goto-char (point-min)) (when (re-search-forward "[^\0-\177]" nil t) (goto-char (point-min)) (let ((coding-system (or coding-system-for-write buffer-file-coding-system))) (if coding-system (setq coding-system (or (coding-system-get coding-system 'mime-charset) (coding-system-change-eol-conversion coding-system nil)))) (setq coding-system (if coding-system (symbol-name (or (and ruby-use-encoding-map (cdr (assq coding-system ruby-encoding-map))) coding-system)) "ascii-8bit")) (if (looking-at "^#![^\n]*ruby") (beginning-of-line 2)) (cond ((looking-at "\\s *#.*-\*-\\s *\\(en\\)?coding\\s *:\\s *\\([-a-z0-9_]*\\)\\s *\\(;\\|-\*-\\)") (unless (string= (match-string 2) coding-system) (goto-char (match-beginning 2)) (delete-region (point) (match-end 2)) (and (looking-at "-\*-") (let ((n (skip-chars-backward " "))) (cond ((= n 0) (insert " ") (backward-char)) ((= n -1) (insert " ")) ((forward-char))))) (insert coding-system))) ((looking-at "\\s *#.*coding\\s *[:=]")) (t (insert "# -*- coding: " coding-system " -*-\n")) )))))
(add-hook (cond ((boundp 'before-save-hook) (make-local-variable 'before-save-hook) 'before-save-hook) ((boundp 'write-contents-functions) 'write-contents-functions) ((boundp 'write-contents-hooks) 'write-contents-hooks)) 'ruby-mode-set-encoding)
僕のつたないelispの知識を総動員した結果、ruby-mode-set-encodingの最後のinsertを呼び出さない設定はできない、と判断しました。本当か?
じゃあ、もうruby-mode-set-encodingを無効にしちゃいなよ、というわけで勘で下のコードを.emacsに追加してみた。defunで上書きしたいので、ruby-modeを先にロードしないとダメー。
(require 'ruby-mode) (defun ruby-mode-set-encoding () ())
一応、これでcodingは出なくなりました。しかし、これじゃないような気がしてます。