clmemo.el ver. 1.0 rc3 について

clmemo.el ver. 1.0 rc2 からの変更点

clmemo.el ver. 1.0 rc1 からの変更点

cltools ver. 0.9 からの変更点

ChangeLog メモの名称

以下に 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>

clmemo.el のインストール

$ tar xzvf clmemo-1.0.rc3.tar.gz
$ cd clmemo-1.0rc3
$ make
# make install

.emacs

.emacs に以下のコードを追加

(autoload 'clmemo "clmemo" "ChangeLog memo mode." t)
(setq clmemo-file-name "~/personal/memo/clmemo.txt")
(global-set-key "\C-xM" 'clmemo)

ChangeLog メモ

ChangeLog メモの末尾に以下のコードを追加する。

^L
Local Variables:
mode: change-log
clmemo-mode: t
End:

clmemo.el の使い方

メモを取る

C-x M に関数 clmemo をバインドしたとします。

C-x M
あなたの「ChangeLog メモ」を開き、メモのタイトルを補完入力する。
C-u C-x M
あなたの「ChangeLog メモ」を開く。
C-u C-u C-x M
あなたの「ChangeLog メモ」を検索する。

タイトルの補完入力

変数 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

以下のようになる。

変数 clmemo-subtitle-char
タイトルの末尾につける事で、サブ・タイトルの入力を促す文字。 デフォールトは "("。 注: cltools 0.9 では "+" だった。
変数 clmemo-subtitle-punctuation-char
サブ・タイトルの前後に、自動的に挿入される文字。 デフォールトは '( "(" . ")")。

リージョンをメモに追加したい

.emacs に次のコードを追加する。

(setq clmemo-buffer-function-list
        '(clmemo-insert-region))

リージョンがある場合、C-x M はリージョンをメモに追加する。

昔のエントリーにメモを追加したい

その日付のエントリーにポイントを動かして、C-u C-x M。

夏休みの日記のように、メモする事を忘れてた場合なんかに便利。 このコマンドは、その日付のエントリーが既にある事を前提としている。 エントリーそのものがない場合 --- 日付がとびとびになっていた場合 --- は、 手間だけど、手入力でエントリーを入れて下さい。

chalow のカテゴリー風にサブ・タイトルを入力する

変数 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 文字関連

ChangeLog では、行頭に TAB が必須である。 本節では、行頭の TAB を扱うコマンドを紹介する。

インデント

C-c TAB (M-x clmemo-indent-region)
リージョンを TAB でインデントする。

TAB キーは、他のコマンドにバインドされているので、TAB 文字の入力には使えない。 純粋に TAB 文字を入力したい場合は、C-q C-i とする。

Yank

C-c C-y (M-x clmemo-yank)
C-y (M-x yank) 後にテキストを TAB でインデントする。

M-y (M-x yank-pop) には、対応していない。 手数だけど、C-y M-y した後に、C-c TAB でインデントして下さい。

コピー

C-c C-w (M-x clmemo-kill-ring-save)
行頭の TAB を取り除いた後、M-w (M-x kill-ring-save) を実行する。

引用文字

C-c > (M-x clmemo-quote-region)
リージョンの行頭に引用記号 '>` を追加する。

引用記号は変数 clmemo-quote-prefix で変更できる。

引用記号を一時的に変えたい場合は、数引数付で呼び出す。 すると clmemo-quote-region は引用記号を尋ねてくる。

; `>' の変わりに `|' を引用記号にする例
(setq clmemo-quote-prefix "|")

次の月、次の年

C-x ] (M-x clmemo-next-year)
前年の同じ日へ
C-x [ (M-x clmemo-previous-year)
次年の同じ日へ
C-c } (M-x clmemo-next-month)
前月の同じ日へ
C-c { (M-x clmemo-previous-month)
次月の同じ日へ

数引数 C-u を取ると、複数の年・月をジャンプできる。

C-x C-p (M-x clmemo-mark-year)
その年をマークする
C-c C-h (M-x clmemo-mark-month)
その月をマークする

インライン日付

インライン日付は、年月日をハイフンで繋ぎ [] で囲んだものである。

[2004-07-07]

一桁の月や日は、0 を入れて二桁にする。

インライン日付上で C-c RET すると、その日付のエントリーへジャンプする。 インライン日付は、どこにでも書く事が出来るが、改行を含んではならない。

[2004-07-
07]

上みたいなのは、ダメ。

アイテム情報付インライン日付

次のようなインライン日付の上で C-c RET をすると

[2004-07-07-3]

2004 年 7 月 7 日の下から 3 番目のアイテムへジャンプする。

インライン日付へのジャンプ

TAB
次のインライン日付へジャンプする
Shift-TAB
前のインライン日付へジャンプする

TAB 文字を入力するには、C-q TAB を使う。 アイテムの頭に TAB を入れる場合、C-c C-i の使用をお勧めする。

インライン日付入力モード

インライン日付入力モードは [YYYY-MM-DD] 形式のインライン日付の入力を少し (?) 楽にしてくれる。

C-c C-d (clmemo-insert-inline-date) とすると、インライン日付入力モードに入る。 インライン日付入力モードでは、View モードのように文字の入力が出来なくなる。 [space] や [backspace] で、メモの中を動き回り、入力したい日付のエントリーに来たら RET する。 すると、そのエントリーの日付がインライン日付の形式で元の場所に入る。

RET
ポイントのあるエントリーの日付をインライン日付として入力する
C-u RET
ポイントのあるアイテムの日付とアイテム番号をアイテム情報付インライン日付として入力する
q
インライン日付入力モードから抜ける。

例えば、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 ( (M-x clmemo-tag-insert-quick)
設定したタグが入力できる。

タグ・ジャンプ

タグの上で、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))

url タグの自動挿入 (emacs-w3m とのコラボレーション)

次のコードを .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 (ChangeLog メモ grep)

clgrep.el は ChangeLog メモ用の grep である。 clgrep.el は blgrep の一部として配布されている。

clgrep は、アイテムを一単位として検索結果を出力する。 M-x occur と M-x clgrep の違いは、次のような感じ。 clmemo をキーに、検索してみた。

  1. Occur の場合
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 中にいる時は、任意の日付のメモを挿入するようにしたい。
  1. clgrep の場合
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>

clgrep.el のインストール

$ 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

.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)))