[mew-dist 21358] Re: Delete duplicated messages

KOIE Hidetaka ( 鯉江英隆 ) hide at example.com
2002年 8月 1日 (木) 16:47:42 JST


  Message-Id: <20020801.133716.50030938.kazu at example.com>
  Date:       Thu, 01 Aug 2002 13:37:16 +0900 (JST)
  From:       Kazu Yamamoto (山本和彦) <kazu at example.com>
  Subject:    [mew-dist 21355] Re: Delete duplicated messages

  | > 単に、後ろから見るようにすれば大抵オッケーのような気がします。
  | 
  | それがいいですね。
  | 
  | 前からモードと、後ろからモードを用意して、付けるマークも選べればよいの
  | では?

こんなんでどうでしょう。

--
KOIE Hidetaka 鯉江英隆 <hide at example.com>
-------------- next part --------------
(defun mew-summary-hash-size (beg end)
  "Get obarray hashsize"
  (let ((size (mew-count-lines beg end)))
    (cond
     ((<= size 211)
      211)
     ((<= size 1511)
      1511)
     ((<= size 7211)
      7211)
     (t
      18211))))

(defvar mew-summary-delete-dups-direction 'backward)
(defvar mew-summary-delete-dups-primary-mark mew-mark-review)
(defvar mew-summary-delete-dups-others-mark mew-mark-delete)

(defun mew-summary-delete-dups (&optional arg)
  "Put delete marks on the duplicased messages in Summary, Virtual or
Thread mode.

If called with '\\[universal-argument]', process in the region."
  (interactive "P")
  (mew-summary-not-in-queue
   (mew-summary-not-in-draft
    (save-excursion
      (let ((pmark mew-summary-delete-dups-primary-mark)
            (omark mew-summary-delete-dups-others-mark)
            (pmarks 0)
            (omarks 0)
            (dir (if (eq mew-summary-delete-dups-direction 'forward)
                     1 -1))
            beg end region my-id primary-id p ids cmp)
        (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))))
        (setq ids (make-vector (mew-summary-hash-size beg end) 0))
        (cond
         ((eq mew-summary-delete-dups-direction 'forward)
          (setq cmp '<)
          (setq end (save-excursion
                      (goto-char end) (beginning-of-line) (point)))
          (goto-char beg)
          (beginning-of-line))
         ((eq mew-summary-delete-dups-direction 'backward)
          (setq cmp '>=)
          (goto-char end)
          (end-of-line)
          (setq end (save-excursion
                      (goto-char beg) (beginning-of-line) (point))))
         (t
          (error
           "Value of mew-summary-delete-dups-direction is invalid")))
        (message "Marking duplications...")
        (catch 'quit
          (while (funcall cmp (point) end)
            (when (and (mew-summary-message-number)
                       (not (mew-summary-marked-p)))
              (setq my-id (mew-summary-my-id))
              (when (> (length my-id) 0)
                (setq primary-id (intern-soft my-id ids))
                (if (null primary-id)
                    (set (intern my-id ids) (point))
                  (setq p (symbol-value primary-id))
                  (if (numberp p)
                      (save-excursion
                        (goto-char p)
                        (if pmark
                            (mew-mark-put-mark pmark 'no-msg))
                        (setq pmarks (1+ pmarks))
                        (set (intern my-id ids) t)))
                  (if omark
                      (mew-mark-put-mark omark 'no-msg))
                  (setq omarks (1+ omarks)))))
            (if (not (= 0
                        (forward-line dir)))
                (throw 'quit t))))
        (if (= pmarks 0)
            (message "Marking duplications...done (no duplications)")
          (message "Marking duplications...done (dups: %d:%d)"
                   pmarks omarks)))))))
        


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