新規ファイル作成時に使用するテンプレートファイルを指定して作成

auto-insert では、ファイル名(拡張子等)以外で使用するテンプレートファイルの切り替えが出来なかったので、ちょっと改造してみました。


元となった elisp はこちらです。
http://www.02.246.ne.jp/~torutk/cxx/emacs/mode_extension.html


[before]

;; 〜〜〜〜〜〜〜〜〜〜

(setq auto-insert-alist
      (append '(
               ("\\.cpp$" . ["template.cpp" my-template])
               ("\\.h$" . ["template.h" my-template])
              ) auto-insert-alist))
(add-hook 'find-file-hooks 'auto-insert)

;; 〜〜〜〜〜〜〜〜〜〜


[after]

;; 〜〜〜〜〜〜〜〜〜〜

(setq auto-insert-alist
      (append '(
               ("\\.cpp$" . [read-template-file my-template])
               ("\\.h$" . [read-template-file my-template])
               ("\\.hpp$" . [read-template-file my-template])
              ) auto-insert-alist))
(add-hook 'find-file-hooks 'auto-insert)

;; 新規ファイル作成時に使用するテンプレートファイルを設定するように追加
(defun read-template-file ()
  (setq template-file (read-from-minibuffer "template-file :"))
  (insert-file-contents 
     (concat my-template-file-directory
        (concat "/" template-file))))

;; 〜〜〜〜〜〜〜〜〜〜


新規ファイル作成時に使用するテンプレートファイル名を指定して、バッファにコピーするように処理を追加しました。
これで、同じ cpp ファイルでも使用するテンプレートファイルを切り替えることが出来ます。
elisp 的にこれで合っているのか分かりませんが、とりあえず満足。