From Kevin Greiner.
[gnus] / lisp / gnus-sieve.el
index e3477de..2fb82f9 100644 (file)
@@ -64,7 +64,7 @@ your Sieve script."
 For example: \"nnimap:mailbox\""
   :group 'gnus-sieve)
 
-(defcustom gnus-sieve-crosspost nil
+(defcustom gnus-sieve-crosspost t
   "Whether the generated Sieve script should do crossposting."
   :type 'bool
   :group 'gnus-sieve)
@@ -112,15 +112,15 @@ See the documentation for these variables and functions for details."
     (insert sieve-template))
   (insert gnus-sieve-region-start
          (gnus-sieve-script gnus-sieve-select-method gnus-sieve-crosspost)
-         gnus-sieve-region-end)
-  (sieve-mode))
+         gnus-sieve-region-end))
 
 (defun gnus-sieve-guess-rule-for-article ()
   "Guess a sieve rule based on RFC822 article in buffer.
-Return NIL if no rule could be guessed."
+Return nil if no rule could be guessed."
   (when (message-fetch-field "sender")
-    `(sieve address "sender" ,(regexp-quote (message-fetch-field "sender")))))
+    `(sieve address "sender" ,(message-fetch-field "sender"))))
 
+;;;###autoload
 (defun gnus-sieve-article-add-rule ()
   (interactive)
   (gnus-summary-select-article nil 'force)
@@ -202,9 +202,8 @@ considered.  This parameter should contain an elisp test
 such group, a Sieve IF control structure is generated, having the
 test as the condition and { fileinto \"group.name\"; } as the body.
 
-If CROSSPOST is non-nil, concatenate these conditionals
-sequencially, otherwsie with `elsif', causing a match on one group the
-other tests to be skipped.
+If CROSSPOST is nil, each conditional body contains a \"stop\" command
+which stops execution after a match is found.
 
 For example: If the INBOX.list.sieve group has the
 
@@ -220,16 +219,19 @@ This is returned as a string."
   (let* ((newsrc (cdr gnus-newsrc-alist))
         script)
     (dolist (info newsrc)
-      (when (or (not method) 
+      (when (or (not method)
                (gnus-server-equal method (gnus-info-method info)))
        (let* ((group (gnus-info-group info))
               (spec (gnus-group-find-parameter group 'sieve t)))
          (when spec
-           (push (concat "if " (gnus-sieve-test spec) " {\n\t"
-                         "fileinto \"" (gnus-group-real-name group) 
-                         "\";\n}")
+           (push (concat "if " (gnus-sieve-test spec) " {\n"
+                         "\tfileinto \"" (gnus-group-real-name group) "\";\n"
+                         (if gnus-sieve-crosspost
+                             ""
+                           "\tstop;\n")
+                         "}")
                  script)))))
-    (mapconcat 'identity script (if crosspost "\n" "\nels"))))
+    (mapconcat 'identity script "\n")))
 
 (provide 'gnus-sieve)