[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 メーリングリストの案内