[Mew-dist 1895] Re: mew-summary-search-parent

Mito mit at example.com
1997年 9月 5日 (金) 10:43:28 JST


※ "な" こと motonori at example.com さんの
   『[Mew-dist 1888] Re: mew-summary-search-parent』からの引用です。

な> Config に Annotate=yes を入れるだけで OK のはずです。

あれ?いれたはずなのに...。

な> imput の際に References: あるいは In-Reply-To: があって、
な> その message-id が DB にあれば、その親メッセージに対して
な> Replied: が annotate されます。

おぉ〜、親メッセージのほうに付くのですね。
どれどれ、昨日のメールは...ちゃんと付いていました、これはお
もしろいですね。

大きな勘違いをしていました。どうも失礼しました。(_ _)

な> というわけで、あるメッセージに対して、親メッセージが1つと
な> 子メッセージが複数存在することになります(最大)。
な> 子メッセージが複数ある場合、どれを選ぶかというのを、
な> UI としてどのように実装するかが問題ですね…

「C-u - 1 ^」で最初の「(Replied:|Forwarded:|Resent:)
Message-Id:」を調べ、「C-u - 2 -」で二番目の
「(Replied:|Forwarded:|Resent:) Message-Id:」を調べる。
「C-u 2 ^」で二つ前の親を検索する。

というのがよさそうな気がします...が、めんどうなので、「C-u ^」
で最初の「(Replied:|Forwarded:|Resent:) Message-Id:」のメッ
セージを検索できるようにだけしました。(_ _)

imput は最後に annotate した子メッセージのヘッダが一番上にく
るようにしてくれているようなので、「C-u ^」では最後に reply, 
forward, resent したメッセージにジャンプします。

# どなたかやっていただけませんか?
# mew-field-get-value を使うと最初のヘッダしか持ってこれない
# から、ちょっとめんどうなんですよね...。
-- 
9/5 10:41頃
NECソフトウェア新潟  水戸
mailto:mit at example.com
-------------- next part --------------
(defun mew-summary-search-parent (rev)
  (interactive "P")
  (let ((folder (mew-summary-folder-name))
        (pnum "0")
        (nomatch t)
        mess ref pid pf rh
        (idh (list (list "References:"
                         "In-Reply-To:")
                   (list "Replied: Message-Id:"
                         "Forwarded: Message-Id:"
                         "Resent: Message-Id:"))))
    (if rev
        (setq idh (car (cdr idh)))
      (setq idh (car idh)))
    (if (not (or (mew-summary-message-number) (mew-summary-part-number)))
        (error "No message")
      (mew-summary-display t)
      (setq mess (or (mew-cache-hit
                      (cons (buffer-name) (mew-summary-message-number)))
                     (mew-buffer-message)))
      (set-mark (point))
      (set-buffer mess)
      (while idh
        (setq rh (car idh))
        (setq ref (mew-header-get-value rh))
        (if ref
            (setq idh nil)
          (setq idh (cdr idh))))
      (if (and ref (string-match "<[^>]*>\\( *<[^>]*>\\)*" ref))
            (setq ref (substring ref (match-beginning 0) (match-end 0))))
      (if (not ref)
          (error "No References header")
        (while ref
          (if (not (string-match "<[^>]*>" ref))
              (setq ref nil)
            (setq pid (substring ref (match-beginning 0) (match-end 0)))
            (setq ref (substring ref (match-end 0)))))
        (set-buffer (get-buffer-create mew-buffer-tmp))
        (erase-buffer)
        (message "searching parent...")
        (call-process mew-prog-imhist nil t nil (concat "--lookup=" pid))
        (message "searching parent...done")
        (goto-char (point-min))
        (while
            (and nomatch
                 (re-search-forward  "\\(\\+[^,]*\\)/\\([1-9][0-9]*\\)" nil t))
          (let ((next (match-end 0)))
            (setq pf (buffer-substring (match-beginning 1) (match-end 1)))
            (setq pnum (buffer-substring
                        (match-beginning 2) (match-end 2)))
            (if (string= folder pf)
                (if (string= pnum "0")
                    (error "No parent message in this folder.")
                  (set-buffer folder)
                  (mew-summary-jump-message pnum)
                  (setq nomatch nil))
              (goto-char next))))
        (if nomatch
            (if (string= pnum "0")
                (error "No parent message")
              (message (concat "Parent message is " pnum
                               " in " pf " folder"))))
          ))))


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