Emacs で CVS 風のタイムスタンプを使いたい
ファイルの最初のほうに
$Id: filename,v 2.00 2009/03/10 02:42:00 author Exp $
って書いてあるのをよく見かけませんか?
これは更新するたびに毎回入力しなおしているわけではなく, CVS (バージョン管理システムの一種) が $Id$ という文字列を展開してくれるからなんですね.
でも CVS どころかバージョン管理システムも使ってないし, っていう場合も多いと思います. 全てのファイルをバージョン管理していることは少ないはずですしね. そういう場合にもこのフォーマットを使いたくなりました.
Emacs では time-stamp.el で同様のことが実現できます.
おそらく標準で付属しています. (Emacs23 では確認済み)
.emacs に以下のように記述します.
;; $Id$ を CVS ライクに置き換える (when (require 'time-stamp nil t) (setq time-stamp-start "\\$Id") (setq time-stamp-end "\\$") (setq time-stamp-format ": %f %04y/%02m/%02d %02H:%02M:%02S %u Exp ") (if (not (memq 'time-stamp write-file-hooks)) (setq write-file-hooks (cons 'time-stamp write-file-hooks))))
そしてファイルの8 行目までに $Id$ という文字列を記述します. デフォルトではファイルの 8 行目を 最後とみなし, 先頭と 8 行目の間のみを検索するからです. これでファイルを保存するときに自動的に最初のようなフォーマットが挿入されます.
カスタマイズする場合は time-stamp-start, time-stamp-end, time-stamp-format をいじるだけです.
簡単に説明すると time-stamp-start は開始位置を設定し, time-stamp-end は終了位置を設定しています. 正規表現で指定するので, この場合$はエスケープしています.
time-stamp-format で実際に挿入されるフォーマットを指定します.
見てもらえれば何を意味しているかはだいたいわかると思います.
他の書式についても引用で紹介しておきます.
さらに, モードやファイルごとに書式を変えたりといったカスタマイズも紹介されています.
%:a → 「 Monday 」. 曜日 %#A → 「 MONDAY 」. 曜日を全部大文字で %:b →「 September 」. 月名. 桁数を指定すると指定した文字だけが表示されます. "%2#A"なら「 MO 」など. %02H → 「 15 」 . 時刻 (24 時間) %02I → 「 03 」 . 時刻 (12 時間) %#p → 「 pm 」 PM と AM の別 %P → 「 PM 」 PM と AM の別 %w → 土曜なら 「 6 」 . 日曜を 0 とし, 何番目の曜日なのか %02y → 「 03 」. 西暦の下 2 桁. %z → 「 jst 」. タイムゾーン %Z → 「 JST 」. タイムゾーン %% → 「%」自体を入力 %f → 「 meadowmemo.texi 」ファイル名 %F → 「 d:/home/meadowmemo.texi 」ファイル名のフルパス %s → マシン名 %u → ログインしたユーザ名 %U → ログインしたユーザのフルネームMeadow/Emacs memo: テンプレートと更新時刻の入力