[Mew-dist 14067] Re: mew-scan-form

Shun-ichi GOTO gotoh at example.com
2000年 9月 5日 (火) 02:38:59 JST


>>>>> at Mon, 4 Sep 2000 17:05:20 +0900
>>>>> 後藤 == Shun-ichi GOTO <gotoh at example.com> said,
後藤> ## この辺りの仕様は以前書いたものを出せます。
後藤> ## でもいまちと忙しいので、今晩にでも...

と、いうことで、出しては見ますが、今見るとあまりに冗長です;-(
これを考えた当時はscan-format指定に凝っていて、われながら
やりすぎだと思う。

でも一応参考までに、とういことで、出しておきます。

## 仕様記述部分の抜粋です


;; format指定方法

;; formatにはリストを指定する。基本型としては、リストのなかに、描画し
;; たい文字列あるいはキーワード(keyword)をならべ、それを連結してものが
;; 描画される。キーワードとは、描画しているメッセージの情報で、以下の
;; ものが使用できる。

;; from         ... From:のユーザ名
;; to           ... to: のユーザ名(To:に複数のアドレスがある場合は先頭のもの)
;; group        ... group名(Mailing List名)。
;; seqno        ... sequence number文字列
;; subject      ... MLのprefix (i.e. [Mew-dist 1234])を取り除いたSubject
;; full-subject ... MLのprefixを含んだ完全なSubject
;; new-subject  ... 親メッセージと違うSubjectの場合その文字列
;; body         ... メッセージ本文のダイジェスト文字列
;; sep          ... 直前の文字列またはキーワードの内容がnonでない場合、
;;                  1つの空白を挿入
;; indent       ... indentレベルに応じた空白文字列(thread viewでのみ有効)


;; いずれもメッセージ情報に該当する要素が無い場合はnilを返す。
;; nilは空文字列として描画される。

;; 文字列やキーワードの他にリストを入れ子にして指定することが出来る。
;; 入れ子になったリストも同様に基本処理(連結)が行なわれる。
;; 
;; ただしリストの先頭が特殊キーワード(special)あるいは整数であった場合
;; は若干異なる。これを取り除いた残りの部分のリストに対して先に説明し
;; たような基本処理が行なわれ、その結果に対して特定の処理を作用させる
;; ことが出来る。

;; 整数の場合は文字幅の指定となる。残りのリストの連結処理が行われ、そ
;; の結果を指定文字幅となるように切りつめる。幅が足りない場合は空白で
;; 詰められる(左寄せ)。負の整数を指定すると右寄せとなる(注:右寄せを行
;; うためにはmue.elのrev 1.71以降が必要)。

;; 特殊キーワードはprefix, postfix, surroundのように引数をとるものがあ
;; る。引数を使用するものの場合は、これらをリストから取り除いたリスト
;; が基本処理の対象となる。特殊キーワードは以下のものが使用出来る。

;; dquote      ... 処理結果が空文字列でなければダブルクォートで囲む
;; squote      ... 処理結果が空文字列でなければシングルクォートで囲む
;; bracket     ... 処理結果が空文字列でなければブラケット"[]"で囲む
;; paren       ... 処理結果が空文字列でなければ括弧"()"で囲む
;; date-format ... 1つの文字列引数をとりformat-time-stringを実行
;;                 引数文字列の指定方法に関しては
;;                 M-x describe-function format-time-string を参照のこと。
;; prefix      ... 1つの文字列引数をとり、処理結果が空文字列でなければ
;;                 その引数文字列を結果文字列の前に連結する。
;; postfix     ... 1つの文字列引数をとり、処理結果が空文字列でなければ
;;                 その引数文字列を結果文字列の後ろに連結する。
;; surround    ... 2つの文字列引数(pre, post)をとり、処理結果が空文字列で
;;                 なければ結果文字列の前にpreを、後ろのpostを連結する。

;; 最終的に作成された文字列は、summaryのwindow-width - 1の幅に収まるよ
;; うに切りつめられて描画される。


;; 例

;; MUEのThread Viewでの書式と同等のものを指定する場合。

;;  '(date " " indent (bracket (18 from)) sep 
;;	 (postfix " // " new-subject) body)

;; MUEのNormal Viewでの書式と同等のものを指定する場合。

;;  '(date " " (bracket (18 from)) sep
;;       full-subject (prefix " //" body))



感じ掴めます? (^^;

こういった指定をフォルダ毎、view mode 毎に切り替えられるようにしてたりし
ました。

## ホントやりすぎだな。ヘタすると色まで指定しそうな勢い。。。

ちなみに
'(date " " indent (bracket (18 from)) sep 
      (postfix " // " new-subject) body)
という例は、こんなふぅになります。
## thread なのは説明のためのご愛嬌

 1234  09/05 [わたし <watashi at example.com] こんち // こんにちは、今日も暑いですね。
 1235  09/05   [あのひと <anohito@] そうですねぇ。昨日まではそれほどは
 1237  09/05     [no-name at example.com ] 天気 (was こんち) // 昨日の天気に
 1236  09/05   [かれ <kare at example.com] ほんと暑いですね。私んちはクーラーが

このような仕様にしたのは、ちょっとやりすぎとも思いますが、
一応そんな指定をさせて、incやscanアクションの先頭で1回、
それを描画するためのlambdaを作って(byte-compileして)行描画関数と
して使用してました。


(let ((name xxxx)
      (addr yyyy)
      (subj zzzz)
      ......)
     (user-line-draw-function)
 )

みたいに変数化してdynamic-bindingを使って参照させるという案もアリですが、
使いもしないものまで値にして作成しておくのはやっぱ重いので、
mew-scan-get-name, mew-scan-get-subj みたいな関数にしておいて
lambda化してました。


## ということで、もう寝ます。(-_-).zZ

--- Regards,
 Shun-ichi Goto  <gotoh at example.com>
   R&D Group, TAIYO Corp., Tokyo, JAPAN



Mew-dist メーリングリストの案内