2012年11月16日金曜日

風のごとく押す: time-stamp

出ました、「風のごとく」シリーズ第2弾です。
今回はソースコード内に最終保存日時などを自動で書き込ませることができるtime-stampというEmacsの機能を紹介します。
これでコピーライト情報の表記を簡単に出来るようになりますね。
他人にもソースコードを渡しやすくなります。


やり方ですが、筆者の.emacs.elの設定方法を用いて説明したいと思います。
;; 最終更新日の自動挿入
(require 'time-stamp)
(add-hook 'before-save-hook 'time-stamp)
(setq time-stamp-active t)
(setq time-stamp-start "[lL]ast[ -][uU]pdated[ \t]*:[ \t]*<")
(setq time-stamp-format "%:y/%02m/%02d %02H:%02M:%02S from %s by %u")
(setq time-stamp-end ">")
(setq time-stamp-line-limit 20)
3行目で毎回のセーブごとに書き込むというモードにしています。
注目して欲しいのは5~7行目です。

5行目で、タイムスタンプ打つ場所を指定しています。
どういうことかというと、この場合は"last updated: <"という文字列を発見した場合にその後にタイムスタンプを打ちます。
ここでは正規表現が使えますので、最初の[lL]は小文字からでも大文字からでも始まって良いという意味を表しています。
その他の[ ]のカッコでくくられたところも、中の文字どれが表れても良いという意味になります。
アスタリスク(*)は前の文字が0個以上あっても良いということになります。
[ ¥t]*の意味は、スペースかタブ文字が何個あっても良いということになります。
まとめると、5行目の定義によって
  • last updated: <
  • Last-Updated : <
  • Last-updated :< 
などといった文字列を発見次第そこにタイムスタンプを打つということになります。

6行目でタイムスタンプのフォーマットを指定しています。
以下のようなものが使えます。
;;     %:a -- Monday 曜日
;;     %#A -- MONDAY 全部大文字で曜日
;;     %:b -- January 月

;;     桁数を指定すると指定した文字だけが表示される.
;;     "%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   -- ファイル名
;;     %F   -- ファイル名のフルパス
;;     %s   -- マシン名
;;     %u   -- ログインしたユーザ名
;;     %U   -- ログインしたユーザのフルネーム 
これをこのままコメントとして貼り付けておけば便利なのではないでしょうか。

7行目はタイムスタンプの終了文字列を表しています。
つまり、5行目の文字列と7行目の文字列の間に6行目で指定したフォーマットでタイムスタンプが押されることになります。

8行目で指定しているのは、何行目までに指定した文字列があったらタイムスタンプを押すのかということです。
ここでは20行目までに"last updated: <"という文字列を書かないとタイムスタンプを押せないようにしてあります。
何も設定しないと8行目まで見てくれるらしいです、確か

この設定の結果を示します。
例えばC言語のソースファイル冒頭で次のようなコメントを入れるとします。
/* Last Updated: <> */
これで保存します。
すると、以下のような結果になることが分かるでしょう。
 
/* Last Updated: <2012/11/16 23:05:06 from user-no-imac.local by user> */ 
  
お分かりいただけただろうか?

参考サイトはこちらです。
http://www.bookshelf.jp/soft/meadow_37.html

2 件のコメント :

  1. これおもしろいですね!マジ感謝です。

    返信削除
  2. コメントのアカウントも同じやから自作自演みたいになっとるしw

    返信削除