Emacsのエンコーディング指定プラグマを挿入する
Emacsではエンコーディング方法や modeの指定をファイルごとに行う
ことができます。
;; -*- coding:utf-8 mode:cperl -*-
です。コメントは別にいらないみたいなんですけど、当然コンパイラ等には
見せたくないのでコメントアウトするのが普通です. ファイル名は拡張子で
決めることができるんですが、エンコーディングをまれに間違うのが痛い。
バージョン 23.1を入れたら改善されるのかもしれないですが, Ruby等の言語
では同様の方法でエンコーディングを指定できるので, 挿入しておいて損は
ないでしょう。(modeについては拡張子がないファイルは便利ですね)
しかし "-*-"を二回も書くのが面倒くさいし, 書き方自体も忘れてしまう
こともあるので, 現在のバッファ名から拡張子を読み取って指定した
エンコーディングを埋めるものを書いてみた.
(defun insert-encoding-pragma (charset) "Insert encoding pragma for each programming language" (interactive "sInput encoding: ") (let* ((extension (insert-encoding-get-file-extension (buffer-name))) (comment-char (insert-encoding-get-comment-char extension)) (pragma (concat comment-char "-*- coding:" charset " -*-"))) (progn (beginning-of-line) (insert-string pragma)))) (defun insert-encoding-get-comment-char (extension) (let ((sharp-langs '("sh" "pl" "t" "pm" "rb" "py")) (slash-langs '("c" "h" "cpp")) (semicolon-langs '("gosh" "el" "scm" "lisp"))) (cond ((member extension sharp-langs) "#") ((member extension slash-langs) "//") ((member extension semicolon-langs) ";;") (t "")))) (defun insert-encoding-get-file-extension (filename) (if (string-match "\\.\\([a-zA-Z0-9]+\\)$" filename) (substring filename (match-beginning 1) (match-end 1))))
プラグマを挿入したい行に移動して insert-encoding-pragmaとすると,
エンコーディングを問われます。それに応じて挿入されます。
# sample.pl #-*- coding:utf-8 -*- ;;; sample.el ;;-*- coding:utf-8 -*- // sample.cpp //-*- coding:euc-jp -*-
エンコーディングは補完できるようにした方がいいかな。あと対応する
ファイルタイプが普段書く言語ぐらいしかない. Rubyとか Pythonは書かない
ですが。comment-regionとかを参考にすればもうちょいマシになるのかな ?
てか Lispはやっぱり括弧が多いですね。括弧はエディタ任せで、インデントで
見るようになったのでね.メモ帳で書けと言われれば死にそうですが。