2005-07-02

関連するメモのスレッド表示 |ChangeLogメモ|blgrep|Emacs|

ChangeLog メモは基本的にテキスト・ファイルなメモ形式だから、流れのあるメモ同士 (スレッド?) を繋げて表示する機能はない。そこで、一工夫してスレッド表示する方法を紹介してみる。ちなみに、このアイデアは chalow ML (非公開) に一年以上も前に投稿したもの。

方法は簡単。

  1. スレッド固有の文字列 (リンク・タグ) をメモに埋め込む。
  2. clgrep で「スレッド固有の文字列」を検索して一覧表示させる。

リンク・タグ

スレッドに固有の文字列は、リンク・タグと呼ぶことにしてる。書式はこう。

(link: [2005-07-02] foo #1)

上の例は、foo というスレッドを 2005-07-02 に作ったということ。スレッドが続けば、末尾の #1 の番号を上げていく。キモは、固有の文字列にスレッド開始の日付を含めること。一日のうちに、同種のスレッドを立ち上げることなんて滅多にないし、仮にあったとしても一日のうちだったら名前がバッティングしてもすぐ気付く (はず)。

リンク・タグ (link: [2005-07-02] foo # に対して clgrep をかければ、リンク・タグを含むメモだけが取り出せる。

使用例

以前このブログに書いた HMV のアカウントに入れない件について、メモしたスレッドを例として表示させてみよう。

2005-06-10 (Fri)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * Blog: HMV のアカウントに入れなかった件についてブログに書いた。
 同じようなトラブルに遭った人がいたら、ということで。
 (link: [2005-05-29] hmv #5)

2005-06-08 (Wed)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * HMV: 新アカウント登録。で、再び使えるようになった。
 (link: [2005-05-29] hmv #4)

2005-06-02 (Thu)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * HMV: アカウントにログインできない件について返答。
 > 新パスワード確認メールを見て、再トライしてくれ。
 その確認メールが届かないんだけど...
 (link: [2005-05-29] hmv #3)

2005-06-01 (Wed)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * HMV: ログイン用のメール・アドレスを教えて欲しいとサポート・センターからメール。
 (link: [2005-05-29] hmv #2)

2005-05-29 (Sun)  Masayuki Ataka  <ataka@milk.freemail.ne.jp>

 * HMV: HMV にログインできない件について
 メールで問い合わせた。
 (howm: 20050529-045054.howm)
 (link: [2005-05-29] hmv #1)

カテゴリー検索で同じような事もできるけど、もっと細かく一連の作業・手続き・話の流れをピックアップできるのがいい所。もし上の例で「HMV」に対して検索をすると、HMV で買い物をした話とかが出てきて情報が絞り込めない (もちろん、HMV でのお買い物は別のスレッドで管理してて、CD の購入・入金・発送・到着なんて 4 つ以上のメモが繋がる)。

clmemo hacks

#2 以降のリンク・タグは、コピペで入れればいいとして、一番最初のリンク・タグの生成と、リンク・タグの検索が面倒ですな。次のコードを .emacs に入れると幸せになれるかもしんない。

;
; link
;
(defun clmemo-tag-link-grep ()
  (interactive)
  (let (query beg end)
    (setq beg (progn (beginning-of-line) (skip-chars-forward " \t") (point))
   end (search-forward "#" nil t)
   query (concat (regexp-quote (buffer-substring-no-properties beg end))
   "[0-9.]+)"))
    (if (fboundp 'clgrep-item)
 (funcall #'clgrep-item query)
      (occur query))))

(defun clmemo-tag-link-insert ()
  (interactive)
  (concat "[
    (save-excursion
      (clmemo-backward-entry)
      (buffer-substring-no-properties
        (point) (progn (skip-chars-forward "-0-9") (point))))
  (insert "]  #1")
  (backward-char 3))

(setq clmemo-tag-list
      '("link" clmemo-tag-link-grep clmemo-tag-link-insert))

リンク・タグを入れたい所で C-c ( l するとタグが挿入される。そんで、リンク・タグの上で C-c RET するとリンク・タグを含むメモだけが抽出される。ただし、リンク・タグの中のインライン日付で C-c RET すると、その日付へのジャンプになっちゃうので注意。

No comments:

Post a Comment