notes-mode と memo-mode の比較論

西本孝志
最終更新: [2005/11/03]
これは EmacsLisp のメーリングリストである ML-ELF において
西本@早大さんが発表された,
notes-mode と memo-mode の比較と統合的使用に関する報告です.

本ページとしての公開に快諾頂いた西本さんに感謝.

Contents

START
  1. はじめに
  2. なぜ人間はメモを書くのか?
  3. なぜコンピュータにメモを書くのか?
  4. notes-mode
  5. memo-mode
  6. 要約
  7. 融合できないか?
  8. さらに summarye も使う

はじめに
Top, Prev, Next
メモ書きツールはいろいろあります。
僕が愛用しているのは、 notes-mode と memo-mode です。
最近、 notes-mode と memo-mode の bug-fix と拡張に熱中しています。
ソースファイルを眺め、比較検討した結果を徒然なるままに書いてみます。


なぜ人間はメモを書くのか?
Top, Prev, Next
     (1) 覚えておくべきことを記録する。
     (2) 重要な点に焦点を置く。
     (3) 時刻とともに記録するときは、「その時刻に」やったことの証拠を残す。

なぜコンピュータにメモを書くのか?
Top, Prev, Next
     (1) 書くよりも打つ方が早い上、見易い。
     (2) 情報がすでにコンピュータ上にある。
     そのために生じる利点がある。
       A. 検索が容易。
       B. 見出しの作成など、本来自動でやってほしいことはコンピュータが行っ
       てくれる。
       C. 複製が容易。

notes-mode
Top, Prev, Next
     (1) 何から構成されているか?
       A. Emacs Lisp: Emacs 内のインターフェースはこれで書かれている。
       B. perl      : 内部処理は perl で書かれている。
     (2) ファイルフォーマット
       A. 1日1ファイルが原則。
         a. たとえば 3/8/1999 のファイルは ~/NOTES/199908/990803 というファ
         イルに格納される。2000年問題にも対応。
         b. ファイル名からいつ書いたのかが分かる。
       B. 1つのファイルの中に複数のエントリが存在する。
         a. 正規表現 "^\\* " を満たし、かつ、次の行が "^-+$" を満たす行が
         そのエントリのタイトル。次の行は単なる underline に過ぎない。
         b. 一つのファイルに同じタイトルのエントリが複数存在していてもよい。
     (3) pseudo-URL(notes URL) によるリンク機能
       A. BNF(syntax にあまり自信ない)
       link      := '<' notes-URL '>'
       notes-URL := file-URL | file-URL tag
       tag       := '#' count title
       count     := [0-9]*
       file-URL  := 'file:///' filename
         a. BNF における count は一つのファイルに同じタイトルのエントリが存
         在する場合、同じエントリの何番目のエントリを指すのかを指定す
         るためのもの。
       B. notes-URL により、ほかの notes エントリや他のファイル簡単に飛べる。
       C. 実現法は簡単で、filename を開き、tag と完全一致する行に飛んでい
       るだけ。 count が与えられているときは、その回数繰り返す。 
       D. カーソル位置のエントリを URL に変換したものを取得し、 yank する
       機能がある。
     (4) 自動見出し作成機能
       A. 内部処理は perl で行う。 cron job で定期的に実行する。
       B. ~/NOTES 以下のファイルのすべてのエントリのタイトルを拾い、 
       index ファイルにセーブされる。
       C. その index ファイルを使って、同じタイトルのエントリは過去のもの
       から順に繋げられる。
       D. Emacs 内では、過去(未来)の同じタイトルのエントリには C-c C-p
       (C-c C-n)で行ける。
       E. 同じタイトルのエントリをすべて取り出すことができる。
     (5) 特別なエントリ Today
       A. 今日のファイルを開くとき、昨日の Today エントリがコピーされる。
         a. やるべきこと(to do list)を Today に書けばよい。
         b. to do list に書いてあることを実行し終わったら消せば、明日のエ
         ントリにはコピーされない。
     (6) notes ファイルを編集するための、特別な機能は用意していない。
       A. これは一見欠点のようだが、ほかの Emacs の機能と組み合わせること
       が容易であるという利点でもある!

memo-mode
Top, Prev, Next
     (1) 何から構成されているか?
       A. 大半が Emacs Lisp で書かれていて、付属のツール群は perl で書か
       れている。
     (2) ファイルフォーマット
       A. ファイル名は任意。また、ファイル名が存在しなくてもよい。
       B. 1つのファイルの中に複数のエントリが存在する。
         a. "^---$" を満たす行の次がタイトル。
         b. memo-summarize で sammary を表示することが可能。
     (3) リンク機能は作成中らしい。
     (4) 階層メモを書くことができる。これが主な目的。
       A. 行頭の字下げの量と矢印で論理の階層化が図れる。
       B. 同じ字下げの量ならば、同じ階層である。
       C. 複数の行の字下げをずらすことができる。これは大変重宝する。
       D. そのことにより、文書のアウトラインを練るために使える。
     (5) 埋め込みメモ機能
       A. プログラムのコメントやメールに階層メモを書くことが可能。

要約
Top, Prev, Next
     (1) notes-mode の特徴
       A. メモの編集よりも、メモの「整理」に重点を置いている。強力なリン
       ク機能より明らか。
       B. 日付とファイル名を関連付けているため、「日記」として使用できる。
         a. すなわち、マクロな点に焦点を置いている。
     (2) memo-mode の特徴
       A. メモの整理よりも、メモの「編集」に重点を置いている。手軽に階層
       メモが書ける点がよい。
       B. 編集機能は「埋め込みメモ機能」により、他の major-mode でも使え
       る。
         a. すなわち、ミクロな点に焦点を置いている。

融合できないか?
Top, Prev, Next
     (1) 「要約」に書いた通り、両 mode の趣きは異っている。
     (2) そのため、両方をうまくくっつけることで、両 mode の利点が生きてく
     るのでは?
     (3) メモの整理は notes-mode に任せて、編集は memo-mode を使おう。
       A. 案1:埋め込みメモ機能を使う。
         a. notes-mode のエントリのタイトルを書いた後は、メモの編集に入る
         ことは当然のこと。
         b. いちいちモードの切換えをしなければならない。
           * notes-mode と memo-mode の共通の binding が存在する
             # たとえば C-c C-i
             notes-mode なら、notes-goto-index-entry
             memo-mode なら、 memo-indent-increment
             # そのため、混乱をきたす。
         c. ということで却下。
       B. 案2:notes-mode に memo-mode の編集機能を加える。
         a. 案1にあるような欠点がなくなる。
         b. 共通の binding については、どちらかを優先させる。
           * 当然、 memo-indent-increment の方が遥かに頻度が高いので、そ
           れを C-c C-i とする。
           * notes-goto-index-entry は C-c M-C-i など適当な位置に変更す
           る。
         c. notes-mode は defun ではなく、 text-mode からの derived-mode 
         として定義されているため、 memo-mode からの derived-mode に変
         更する。
         d. めでたしめでたし!!!!!

さらに summarye も使う
Top, Prev, Next
     (1) 以下の設定を加えよ
     (setq se/mode-delimiter-alist
      (cons
       (list 'notes-mode
             (concat "^\\* \\(.*\\)\n\\-"
                 "\\|^"
                 (substring memo-entry-separated-tag 1 -1)
                 "\n\\(.+\\)$")
             (lambda (b e name)
               (if (match-string 1)
                   (concat "* " (match-string 1))
                 (concat "    " (match-string 2)))))
       se/mode-delimiter-alist))
       A. ただし、 match-string を 19.28 以前の Emacs で使うときは emu.el 
       を load すること。

memo-mode