emacsでauto-insert
という定形作業が毎回発生してうっとおしいのでどうにかしたい。
下記のサイトを参考にemacsにテンプレを導入してみる。(ほぼそのままですが)
http://www.02.246.ne.jp/~torutk/cxx/emacs/mode_extension.html
http://d.hatena.ne.jp/higepon/20080731/1217491155
あと、最近ファイルをキャメルケースで、インクルードガードをスネークケースで書くことが多いので、インクルードガードをスネークケースに変換するように処理を追加。
キャメルケースとスネークケースの変換関数は以下のサイトのを利用。
http://recyclebin5385.blog13.fc2.com/blog-category-4.html
;; 自動挿入の設定
(require 'autoinsert)
;; テンプレート格納用ディレクトリ
(setq auto-insert-directory "~/.emacs.d/insert/")
;; ファイル拡張子とテンプレートの対応
(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);; 変換ルールの定義
(require 'cl)
(defvar template-replacements-alists
'*1 t))))
)
);; 変換実行の定義
(defun my-template ()
(time-stamp)
(mapc #'(lambda(c)
(progn
(goto-char (point-min))
(replace-string (car c) (funcall (cdr c)) nil)))
template-replacements-alists)
(goto-char (point-max))
(message "done."))
(add-hook 'find-file-not-found-hooks 'auto-insert)
すごい短いけど。テンプレはこんな感じ。
template.h
/* -*- coding:utf-8 -*- */ #ifndef %include-guard% #define %include-guard% #endif // %include-guard%
template.cpp
/* -*- coding:utf-8 -*- */
実行してみるとこんな感じ。
固定の文言の追加とかもできるからいろいろ便利。
*1:"%file%" . (lambda () (file-name-nondirectory (buffer-file-name)))) ("%file-without-ext%" . (lambda () (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) ("%include-guard%" . (lambda () (format "%s_H" (camel-to-snake (file-name-sans-extension (file-name-nondirectory buffer-file-name