[Mew-dist 04930] Re: Using for Threading

Hideyuki SHIRAI Shirai at example.com
1998年 5月 28日 (木) 17:44:42 JST


白井です。

From: masato nagano <naga at example.com> さん曰く
Subject: [Mew-dist 04928] Re: Using for Threading
Message-ID: <19980528172405S.naga at example.com>
Date: Thu, 28 May 1998 17:21:49 +0900

nagano> togashi> ;;スレッドを有効にする。
nagano> togashi> (setq mew-prog-imls-arg-list '("--thread=yes" "--indent=2"))
nagano> togashi> とか(indent はお好みでどうぞ)でいかがでしょうか。
nagano> 
nagano> 私も、この方法で、スレッド表示をさせていますが、
nagano> 現在の1.93b36では、pickを行なうと、Marking messages ... の途中で、
nagano> 
nagano> Search failed: "^[ ]*178[^0-9]+"
nagano> 
nagano> と言われてしまいます。
nagano> 
nagano> mew-pick.elをちらっと読んだだけですが、message-numberが降順に並んでい
nagano> る前提で最適化してあるようなので、スレッドを有効にして表示していると、
nagano> 並びがぐちゃぐちゃになって、message-numberの最大、最小の取得と、マーク
nagano> 対象のsearchの時にうまくいかないようです。

こういう問題もありますし、私自身の慣れもあるので、普段はthread表
示しないのですが、たまにthreadでMLを読みたいなぁと思うときがあり、
以下のものを作って遊んでいます。

# ほとんど、mewのソースからの盗作ですが……

"T" でそのポイント以降のメールをthread表示し、"C-u T" で普通に表
示しなおします。

# mark とか region に対応したかったんですが、素直にあきらめました。
## 汚いコード(って汚いコードしか書けない)ですので、Own Risk でお
## 願いします

nagano> # mewとしては、スレッド表示は未対応なんですよね、たしか。

ですよね。確か。。。

;; ---------
;; define-key は mew-summary-mode-hook で評価してください。

(define-key mew-summary-mode-map "T" 'mew-thread)

(defun mew-thread (arg)
  "Thread mode listing after point.
If with C-u normal mode listing after point."
  (interactive "P")
  (if (or (mew-syntax-number) (mew-summary-message-number))
      (progn
	(if (mew-syntax-number)
	    (while (not (mew-summary-message-number))
	      (forward-line -1)))
	(if arg
	    (mew-thread-region (point) (point-max))
	  (mew-thread-region (point) (point-max) t)))
    (message "Can't exec thread mode.")))

(defun mew-thread-region (r1 r2 &optional method)
  (let (rbeg)
    (save-excursion
      (goto-char (min r1 r2))
      (beginning-of-line)
      (setq rbeg (point))
      (mew-thread-region-subr rbeg method))))

(defun mew-thread-region-subr (&optional rbeg method)
  (if (not (mew-summary-exclusive-p))
      ()
    (mew-mark-clean-up)
    (let* ((folder (buffer-name))
	   arg-tmp)
      (let ((buffer-read-only nil))
	(delete-region (or rbeg (point-min)) (point-max)))
      (if (not method)
	  ()
	(setq arg-tmp mew-prog-imls-arg-list)
	(setq mew-prog-imls-arg-list
	      (append '("--thread=yes" "--indent=2")
		      mew-prog-imls-arg-list)))
      (mew-summary-scan-body mew-prog-imls
			     'mew-summary-mode
			     folder
			     mew-cs-scan
			     (mew-update-range))
      (if (not method)
	  (message "Normal listing %s ... " folder)
	(setq mew-prog-imls-arg-list arg-tmp)
	(message "Thread listing %s ... " folder)))))



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