* wl-e21.el (wl-draft-insert-signature): Fix comment style.
[elisp/wanderlust.git] / wl / wl-spam.el
index 8c94de0..8cb870f 100644 (file)
@@ -206,7 +206,8 @@ See `wl-summary-mark-action-list' for the detail of element."
 
 (eval-when-compile
   ;; Avoid compile warnings
-  (defalias-maybe 'wl-summary-spam 'ignore))
+  (defalias-maybe 'wl-summary-spam 'ignore)
+  (defalias-maybe 'wl-summary-unmark-spam 'ignore))
 
 (defun wl-summary-test-spam (&optional folder number)
   (interactive)
@@ -214,20 +215,32 @@ See `wl-summary-mark-action-list' for the detail of element."
        (number (or number (wl-summary-message-number)))
        spam)
     (message "Checking spam...")
-    (when (setq spam (elmo-spam-message-spam-p (elmo-spam-processor)
-                                              folder number))
-      (wl-summary-spam number))
+    (if (setq spam (elmo-spam-message-spam-p (elmo-spam-processor)
+                                            folder number))
+       (wl-summary-spam number)
+      (wl-summary-unmark-spam number))
     (message "Checking spam...done")
     (when (interactive-p)
       (message "No: %d is %sa spam message." number (if spam "" "not ")))))
 
+(defun wl-summary-test-spam-messages (folder numbers &rest args)
+  (elmo-with-progress-display (elmo-spam-check-spam (length numbers))
+      "Checking spam"
+    (let* ((spams (elmo-spam-list-spam-messages (elmo-spam-processor)
+                                               folder
+                                               numbers))
+          (goods (car (elmo-list-diff numbers spams))))
+      (dolist (number spams)
+       (wl-summary-spam number args))
+      (dolist (number goods)
+       (wl-summary-unmark-spam number)))))
+
 (defun wl-summary-test-spam-region (beg end)
   (interactive "r")
   (let ((numbers (wl-summary-collect-numbers-region beg end)))
     (cond (numbers
-          (wl-spam-map-spam-messages wl-summary-buffer-elmo-folder
-                                     numbers
-                                     #'wl-summary-spam))
+          (wl-summary-test-spam-messages wl-summary-buffer-elmo-folder
+                                         numbers))
          ((interactive-p)
           (message "No message to test.")))))
 
@@ -259,6 +272,19 @@ See `wl-summary-mark-action-list' for the detail of element."
       (wl-spam-register-spam-messages wl-summary-buffer-elmo-folder
                                      (list number)))))
 
+(defun wl-summary-register-as-spam-region (beg end)
+  (interactive "r")
+  (let ((numbers (wl-summary-collect-numbers-region beg end)))
+    (cond (numbers
+          (wl-spam-register-spam-messages wl-summary-buffer-elmo-folder
+                                          numbers))
+         ((interactive-p)
+          (message "No message to register as spam.")))))
+
+(defun wl-thread-register-as-spam (&optional arg)
+  (interactive "P")
+  (wl-thread-call-region-func 'wl-summary-register-as-spam-region arg))
+
 (defun wl-summary-register-as-spam-all ()
   (interactive)
   (wl-spam-register-spam-messages wl-summary-buffer-elmo-folder
@@ -283,6 +309,19 @@ See `wl-summary-mark-action-list' for the detail of element."
       (wl-spam-register-good-messages wl-summary-buffer-elmo-folder
                                      (list number)))))
 
+(defun wl-summary-register-as-good-region (beg end)
+  (interactive "r")
+  (let ((numbers (wl-summary-collect-numbers-region beg end)))
+    (cond (numbers
+          (wl-spam-register-good-messages wl-summary-buffer-elmo-folder
+                                          numbers))
+         ((interactive-p)
+          (message "No message to register as good.")))))
+
+(defun wl-thread-register-as-good (&optional arg)
+  (interactive "P")
+  (wl-thread-call-region-func 'wl-summary-register-as-good-region arg))
+
 (defun wl-summary-register-as-good-all ()
   (interactive)
   (wl-spam-register-good-messages wl-summary-buffer-elmo-folder
@@ -397,10 +436,18 @@ See `wl-summary-mark-action-list' for the detail of element."
   (define-key
     wl-summary-mode-map "rkc" 'wl-summary-test-spam-region)
   (define-key
+    wl-summary-mode-map "rks" 'wl-summary-register-as-spam-region)
+  (define-key
+    wl-summary-mode-map "rkn" 'wl-summary-register-as-good-region)
+  (define-key
     wl-summary-mode-map "tkm" 'wl-thread-spam)
   (define-key
     wl-summary-mode-map "tkc" 'wl-thread-test-spam)
   (define-key
+    wl-summary-mode-map "tks" 'wl-thread-register-as-spam)
+  (define-key
+    wl-summary-mode-map "tkn" 'wl-thread-register-as-good)
+  (define-key
     wl-summary-mode-map "mk" 'wl-summary-target-mark-spam)
   (define-key
     wl-summary-mode-map "ms" 'wl-summary-target-mark-register-as-spam)