以下に ChangeLog メモの 1 エントリーを示す。
2004-07-07 Masayuki Ataka <> * title: this line is item heading. item item item item item item * title (subtitle): The second item. item must be indented by one TAB. Blank line is not considered as item separator.
「エントリー」は「エントリー・ヘッダー」と複数の「アイテム」より成る。
「エントリー・ヘッダー」は上の例では「2004-07-07 Masayuki Ataka <>」 と書かれている部分である。「エントリー・ヘッダー」は、記入日と記入者の情報を含む。 「エントリー・ヘッダー」のことを、clmemo.el では、日付行と呼ぶ事もある。
「アイテム」は `*' (アスタリスク) で始まる。 「アイテム」は、TAB でインデントされなければならない。 clmemo.el では、空行を「アイテム」の区切りとは考えない。 便宜上、アイテムの一行目を「アイテム・ヘッダー (ヘディング)」と呼ぶ。
ChangeLog でいう所の、「ファイル名」部分を「タイトル」、 「関数名」部分を「サブ・タイトル」と呼ぶ。
注 chalow では、サブ・タイトルをカテゴリーと呼び、 丸カッコではなく角カッコで表す。
2004-07-07 Masayuki Ataka <> * title[category][second category]: this line is item heading. item item item item item item
注 cltools との名称の変更点
cltools ver 0.9 clmemo ver 1.0 --- --- date entry entry item entry title subentry subtitle
cltools 時代は、「アイテム」と「タイトル」の両方の意味で「エントリー」と呼んでいた。
clmemo.el は以下の場所にある。
<URL:http://isweb22.infoseek.co.jp/computer/pop-club/emacs/clmemo-1.0rc3.tar.gz>
$ tar xzvf clmemo-1.0.rc3.tar.gz $ cd clmemo-1.0rc3 $ make # make install
.emacs に以下のコードを追加
(autoload 'clmemo "clmemo" "ChangeLog memo mode." t) (setq clmemo-file-name "~/personal/memo/clmemo.txt") (global-set-key "\C-xM" 'clmemo)
ChangeLog メモの末尾に以下のコードを追加する。
^L Local Variables: mode: change-log clmemo-mode: t End:
C-x M に関数 clmemo をバインドしたとします。
変数 clmemo-title-list を定義する。
(setq clmemo-title-list '("idea" "bookmark" "Emacs" "映画"))
すると、「idea, bookmark, Emacs, 映画」について補完入力が出来るようになる。
変数 clmemo-title-list には、エイリアスを定義する事も出来る。
(setq clmemo-title-list '("idea" "bookmark" "Emacs" ("movie" . "映画")))
上のようにすると、「movie」が「映画」に展開される。
タイトルの末尾に `(' を入れると、続けてサブ・タイトルを入力できる。 サブ・タイトルの入力でも、補完は使える。
例えば、次のように入力すると
clmemo title: Emacs( subtitle for `Emacs': clmemo
以下のようになる。
-!- はカーソルの位置。
サブタイトルの末尾に `(' を置くと、2 つ目のサブタイトルを聞いてくる。
例えば、次のように入力すると
clmemo title: Emacs( subtitle for `Emacs': clmemo( subtitle for `Emacs (clmemo)': howm
以下のようになる。
.emacs に次のコードを追加する。
(setq clmemo-buffer-function-list '(clmemo-insert-region))
リージョンがある場合、C-x M はリージョンをメモに追加する。
その日付のエントリーにポイントを動かして、C-u C-x M。
夏休みの日記のように、メモする事を忘れてた場合なんかに便利。 このコマンドは、その日付のエントリーが既にある事を前提としている。 エントリーそのものがない場合 --- 日付がとびとびになっていた場合 --- は、 手間だけど、手入力でエントリーを入れて下さい。
変数 clmemo-subtitle-punctuation-char と clmemo-subtitle-char を次のように変更する。
(setq clmemo-subtitle-char "[" clmemo-subtitle-punctuation-char '( "[" . "]"))
変数 clmemo-title-format-function を定義する事で、入力したタイトルを編集できる。
例えば
clmemo のデフォールトのエントリー・ヘッダーは次のような形をしている。
2004-07-07 Masayuki Ataka <>
これを、曜日情報を加えた形、つまり
2004-07-07 (Wed) Masayuki Ataka <>
という形にするには、次のコードを .emacs に加える。
(setq clmemo-time-string-with-weekday t)
設定後、新しいエントリーに曜日情報が加わる。
曜日情報を加えたいエントリーをリージョンで囲み、次のコマンドを実行する。
M-x clmemo-format-header-with-weekday
曜日情報を削りたいエントリーをリージョンで囲み、次のコマンドを実行する。
M-x clmemo-format-header-without-weekday
ChangeLog では、行頭に TAB が必須である。 本節では、行頭の TAB を扱うコマンドを紹介する。
TAB キーは、他のコマンドにバインドされているので、TAB 文字の入力には使えない。 純粋に TAB 文字を入力したい場合は、C-q C-i とする。
M-y (M-x yank-pop) には、対応していない。 手数だけど、C-y M-y した後に、C-c TAB でインデントして下さい。
引用記号は変数 clmemo-quote-prefix で変更できる。
引用記号を一時的に変えたい場合は、数引数付で呼び出す。 すると clmemo-quote-region は引用記号を尋ねてくる。
; `>' の変わりに `|' を引用記号にする例 (setq clmemo-quote-prefix "|")
数引数 C-u を取ると、複数の年・月をジャンプできる。
インライン日付は、年月日をハイフンで繋ぎ [] で囲んだものである。
[2004-07-07]
一桁の月や日は、0 を入れて二桁にする。
インライン日付上で C-c RET すると、その日付のエントリーへジャンプする。 インライン日付は、どこにでも書く事が出来るが、改行を含んではならない。
[2004-07- 07]
上みたいなのは、ダメ。
次のようなインライン日付の上で C-c RET をすると
[2004-07-07-3]
2004 年 7 月 7 日の下から 3 番目のアイテムへジャンプする。
TAB 文字を入力するには、C-q TAB を使う。 アイテムの頭に TAB を入れる場合、C-c C-i の使用をお勧めする。
インライン日付入力モードは [YYYY-MM-DD] 形式のインライン日付の入力を少し (?) 楽にしてくれる。
C-c C-d (clmemo-insert-inline-date) とすると、インライン日付入力モードに入る。 インライン日付入力モードでは、View モードのように文字の入力が出来なくなる。 [space] や [backspace] で、メモの中を動き回り、入力したい日付のエントリーに来たら RET する。 すると、そのエントリーの日付がインライン日付の形式で元の場所に入る。
例えば、C-c C-d C-s clmemo RET とすると、clmemo が最初に出てくる日付が入力される。 同様に、C-c C-d RET とすると、その日の日付が入力出来る。
タグとは、一行指行のキーワードである。 次のような形
(tag-name: text)
注: clkwd.el で、キーワードと呼んでいたもの。
変数 clmemo-tag-list で設定する。
(setq clmemo-tag-list (cons '("tel" "e-mail") clmemo-tag-list))
デフォールトでは、url と file というタグが用意されている。
タグの上で、C-c RET すると、何かの関数が実行される。
デフォールトでは、
url タグ -> ブラウザを開く file タグ -> ファイルを開く
となっている。
タグ入力 or タグ・ジャンプ時に関数をフックさせる事ができる。 clmemo-tag-list を次の書式で入力する。
(タグ名 ジャンプ用関数 入力用関数)
clmemo-tag-list のデフォールト値は、次の通り。
(defvar clmemo-tag-list '(("url" browse-url-at-point) ("file" find-file-at-point clmemo-read-file-name))
次のコードを .emacs に入れておくと、 emacs-w3m でブラウジング中に clmemo を呼び出すと、 そのウェブページのタイトルと URL を自動挿入してくれる。
(setq clmemo-buffer-function-list '(clmemo-tag-insert-url-from-w3m))
自動挿入されたタグは、次のような形になる。
2004-04-22 (Thu) Masayuki Ataka <> * clmemo-title: Windowsユーザーのための電子メモ術 (url: http://blogger.main.jp/changelog/yayadoc/memolit.html)
clgrep.el は ChangeLog メモ用の grep である。 clgrep.el は blgrep の一部として配布されている。
clgrep は、アイテムを一単位として検索結果を出力する。 M-x occur と M-x clgrep の違いは、次のような感じ。 clmemo をキーに、検索してみた。
16179: * clmemo: completing-read に関する問題を修正してアップした。 16183: - clmemo.el を使っている人達は皆、Emacs (CVS) を 16186: (cite: (ELF:01847) clmemo について) 16602: * Idea (clmemo): C-u M-x clmemo で任意の日付のメモを挿入。 16603: C-u M-x clmemo は clmemo を開くだけなので、 16604: clmemo 中にいる時は、任意の日付のメモを挿入するようにしたい。
2002-09-28 (Sat) Masayuki Ataka <> * clmemo: completing-read に関する問題を修正してアップした。 completing-read は Alist しか受け付けない。 Emacs (CVS) は list も受け付けるようになっていたので 問題が表面化していなかった。 - clmemo.el を使っている人達は皆、Emacs (CVS) を 使っているとは思えないのだけど... (cite: (ELF:01847) clmemo について) 2002-09-17 (Tue) Masayuki Ataka <> * Idea (clmemo): C-u M-x clmemo で任意の日付のメモを挿入。 C-u M-x clmemo は clmemo を開くだけなので、 clmemo 中にいる時は、任意の日付のメモを挿入するようにしたい。 - 日付は、今ポイントのある位置から算出してもいい。
最新の blgrep は以下の場所にある。
<URL:http://isweb22.infoseek.co.jp/computer/pop-club/emacs/blgrep/blgrep-0.1rc1.tar.gz>
$ tar xzvf blgrep-0.1rc1.tar.gz $ cd blgrep-0.1rc1 $ cp path/to/clmemo.el ./ $ vi Makefile
Makefile の 15 行目のコメントを外す。
(old) EXT = #clgrep (new) EXT = clgrep
$ make # make install
.emacs に以下のコードを追加する。
; clgrep (autoload 'clgrep "clgrep" "grep mode for ChangeLog Memo file" t) (autoload 'clgrep-item-heading "clgrep" "grep each title of entry in ChangeLog Memo" t) (autoload 'clgrep-date "clgrep" "grep each title of entry in ChangeLog Memo" t) (add-hook 'clmemo-mode-hook '(lambda () (define-key clmemo-mode-map "\C-c\C-g" 'clgrep)))