[mew-dist 21367] Re: Delete duplicated messages

Shun-ichi TAHARA ( 田原 俊一 ) jado at example.com
2002年 8月 1日 (木) 19:18:33 JST


From: KOIE Hidetaka (鯉江英隆) <hide at example.com>
Message-Id: <20020801.190002.70213914.hide at example.com>

> > 鯉江さん方式のとちょっと仕様が違います(最初だけマークしないモードと最
> > 後だけマークしないモードと、全部マークするモード)。
> > 
> > どっちがいいでしょうね。
> 
> この仕様で満足できそうな気がしてきたので、これでいいです。

あ、だとすると、私の出したコードにはちょっとデッドコードがありますので、
それ抜きますね。
# 鯉江さん仕様に合わせようとしたときだけ意味のある cond があるので。

今、mew-summary-mark-skip-on-duplication のデフォルト値は 'last になっ
てますが、'first の方がいいのかもしれませんね。

ちゅか、mew-scan-form-mark-delete の処理でも、skip-on-duplication が効
くといいなぁ、とかいう邪悪な考えが…

# たぶん (setq mew-scan-form-mark-delete nil) にして手動で M-d が正解

とりあえず、こちらもこれで決定稿な気分です。
_______________________________
田原 俊一   jado at example.com, shunichi_tahara at example.com
                                  http://flowernet.gr.jp/jado/
FingerPrint:  16 9E 70 3B 05 86 5D 08  B8 4C 47 3A E7 E9 8E D9
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
-------------- next part --------------
;;(define-key mew-summary-mode-map "\M-d" 'mew-summary-mark-duplication)

(defvar mew-summary-mark-for-duplication mew-mark-delete
  "*Mark for duplicated messages, used by mew-summary-mark-duplication.")

(defvar mew-summary-mark-skip-on-duplication 'first
  "*What message not to put mark on among the duplicated messages,
detected by mew-summary-mark-duplication.

Possible value is 'first, 'last, or nil(put marks on all of duplicated
messages). Other values are considered as 'first.")

(defun mew-summary-mark-duplication (&optional arg)
  "Put marks on the duplicated messages in Summary, Virtual or Thread
mode. The mark to put is specified in mew-summary-mark-for-duplication.

If called with '\\[universal-argument]', process in the region."
  (interactive "P")
  (mew-summary-not-in-queue
   (mew-summary-not-in-draft
    (let ((reversep (eq mew-summary-mark-skip-on-duplication 'last)) (count 0)
	  key my-id dup-id id size ids beg end region)
      (cond
       (arg
	(setq region (mew-summary-get-region))
	(setq beg (car region))
	(setq end (cdr region)))
       (t
	(setq beg (point-min))
	(setq end (point-max))))
      (message "Marking duplications...")
      (save-excursion
	(goto-char end)
	(beginning-of-line)
	(setq end (point))
	(goto-char beg)
	(beginning-of-line)
	(setq beg (point))
	;; from mew-summary-thread-region in mew-threaed.el
	(setq size (mew-count-lines beg end))
	(cond
	 ((<= size 211)
	  (setq size 211))
	 ((<= size 1511)
	  (setq size 1511))
	 ((<= size 7211)
	  (setq size 7211))
	 (t
	  (setq size 18211)))
	(setq ids (make-vector size 0))
	(save-restriction
	  (narrow-to-region beg end)
	  (goto-char (if reversep (point-max) (point-min)))
	  (catch 'loop
	    (while t
	      (when (and (mew-summary-message-number)
			 (not (mew-summary-marked-p)))
		(setq my-id (mew-summary-my-id))
		(when (> (length my-id) 0)
		  (setq dup-id (intern-soft my-id ids))
		  (if (null dup-id)
		      ;; first time (no duplication)
		      (set (intern my-id ids) t)
		    (when (symbol-value dup-id)
		      ;; second time (first duplication)
		      (unless mew-summary-mark-skip-on-duplication
			(save-excursion
			  (goto-char (point-min))
			  (when (search-forward
				 (format "\r <%s> " my-id) nil t)
			    (beginning-of-line)
			    (mew-mark-put-mark
			     mew-summary-mark-for-duplication 'no-msg)
			    (setq count (1+ count))))
			(set (intern my-id ids) nil)))
		    (mew-mark-put-mark
		     mew-summary-mark-for-duplication 'no-msg)
		    (setq count (1+ count)))))
	      (cond
	       (reversep
		(beginning-of-line)
		(if (bobp)
		    (throw 'loop t)
		  (forward-line -1)))
	       (t
		(forward-line 1)
		(if (eobp)
		    (throw 'loop t))))))))
      (if (= count 0)
          (message "Marking duplications...done  (no duplication)")
        (message "Marking duplications...done  (marked %d msgs.)" count))))))


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