OSDN の wordpress にお世話になってたが、highlight.js の使い方がわからず、こっちに移行しようと思う。 highlight のテストがてら、あちらでの投稿をこちらに再投稿する。
boost のヘッダファイルを見ていると、include guard 用のシンボルが UUID_xxxxx... という感じにしてあるのに気づいた。 なるほど。これは確かに uuid を使った方が #define [ファイル名] なんかよりも合理的に思える。 これは真似したいなと思うが、ヘッダファイルを新規作成する度に、uuidgen した文字列を sed s/-/_/g してコピーしてソースに貼り付け、とか考えると明らかに面倒だ。 じゃあ、emacs lisp で自動化してやろうか、と思って書いたのが以下の lisp コード。
boost のヘッダファイルを見ていると、include guard 用のシンボルが UUID_xxxxx... という感じにしてあるのに気づいた。 なるほど。これは確かに uuid を使った方が #define [ファイル名] なんかよりも合理的に思える。 これは真似したいなと思うが、ヘッダファイルを新規作成する度に、uuidgen した文字列を sed s/-/_/g してコピーしてソースに貼り付け、とか考えると明らかに面倒だ。 じゃあ、emacs lisp で自動化してやろうか、と思って書いたのが以下の lisp コード。
(defun insert-random-uuid ()
(interactive)
"Inserts a UUID string suitable to CPP identifier"
(shell-command "echo UUID_$(uuidgen | tr a-z\- A-Z\_)" t))
(defun insert-include-guard ()
(interactive)
"Inserts C/C++ header include guard."
(progn
(insert "#if !defined(")
(insert-random-uuid)
(let (p1 p2)
(setq p1 (point))
(end-of-line)
(setq p2 (point))
(kill-ring-save p1 p2))
(insert ")\n#define ")
(yank)
(insert "\n#endif /* ")
(yank)
(insert " */")
(beginning-of-line)
(open-line 3)
(forward-line)
))
これが eval された後、emacs で M-x insert-include-guard すると、
#if !defined(UUID_364889E3_11A2_493E_B861_5C20F63968D8)
#define UUID_364889E3_11A2_493E_B861_5C20F63968D8
#endif /* UUID_364889E3_11A2_493E_B861_5C20F63968D8 */
というような感じのテキストが自動挿入される。
尤も、c++11 以降なら、#pragma once で事足りる。
返信削除コンパイルすると、以下の様な warning が出るようになったので、仰せの通りに forward-line に変更した。
返信削除In insert-include-guard:
05-misc.el:33:6:Warning: `next-line' is for interactive use only; use
`forward-line' instead.