だいぶ前にメールにメモがつけたいを読んだときに、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表示と両立できないという問題が出てきます。
メモを付けると同時にユーザフラグを立てて、そのフラグの立っているメッセージの色を変えると、メモの付いているメッセージがすぐにわかって良いかも知れません。