だいぶ前にメールにメモがつけたいを読んだときに、QMAIL3でもマクロを使えばできるかなと思っていたのですが、BTSでもそんな話が出てきたので試しに作ってみました。といっても、その過程でいくつか本体のバグが見つかって直したり、機能を追加したりしたので、r3198以降でないと動きません。
まず、メールボックスフォルダにmacroとmemoというディレクトリを作成します。そして、macroディレクトリにmemo.macroというファイル名で以下の内容のファイルを作成します。
@Progn(# メモのファイル名を取得します。
@Defun('GetFileName',
@Concat('memo/',
@RegexReplace(Message-Id,
/[^A-Za-z0-9_.!@#$%^&-]/,
'',
@True()))),
# メモを読み込んで返します。読み込めない場合には空文字列を返します。
@Defun('LoadMemo',
@If(@CanMemo(),
@Catch(@Load(@GetFileName()), ''),
'')),
# メモを保存します。一番目の引数に保存するメモを指定します。
@Defun('SaveMemo',
@If(@CanMemo(),
@Save(@GetFileName(), $1),
@False())),
# メモが取れるかどうか調べます。Message-Idが無いとメモは取れません。
@Defun('CanMemo',
Message-Id),
# 入力ダイアログを開いてメモを入力し保存します。
@Defun('InputMemo',
@If(@CanMemo(),
@Catch(@SaveMemo(@InputBox('メモを入力してください',
:INPUT-MULTILINE,
@LoadMemo())),
@MessageBox('メモの保存に失敗しました')),
@MessageBox('Message-Idがないのでメモが取れません'))))
それからmenus.xmlを編集して適当なところにメニューを追加します。今回は、リストビューのコンテキストメニューに付けてみました。追加するのはこんな行です。
<menuitem text="Mem&o..."
action="MessageMacro"
param="@Progn(@Include('macro/memo.macro'), @InputMemo())"/>
さらにヘッダビューに表示するためにheader.xmlを編集します。最後の方にこんな感じでつけてみました。
<line hideIfEmpty="memo">
<static width="auto" style="bold" showAlways="true">Memo:</static>
<edit name="memo">{@Progn(@Include('macro/memo.macro'), @LoadMemo())}</edit>
</line>
リストビューのコンテキストメニューから[Memo...]を選ぶとダイアログが開くのでそこでメモを入力します。メモが付いているメッセージを開くと、ヘッダビューにそのメモが表示されます。メモは最初に作ったmemoディレクトリに保存されます。
問題点としては、
というのがありそうです。二番目の問題は、表示用テンプレートを使ってメッセージの下などに表示するという方法で回避できますが、今度はHTML表示と両立できないという問題が出てきます。
メモを付けると同時にユーザフラグを立てて、そのフラグの立っているメッセージの色を変えると、メモの付いているメッセージがすぐにわかって良いかも知れません。