diff lisp/gnus/gnus-cus.el @ 79022:65ad63ddd4f6

Merge from gnus--rel--5.10 Revision: emacs@sv.gnu.org/emacs--rel--22--patch-115
author Miles Bader <miles@gnu.org>
date Tue, 09 Oct 2007 08:55:58 +0000
parents 24202b793a08
children 1cb31606209f a3c27999decb bdb3fe0ba9fa
line wrap: on
line diff
--- a/lisp/gnus/gnus-cus.el	Tue Oct 09 08:39:33 2007 +0000
+++ b/lisp/gnus/gnus-cus.el	Tue Oct 09 08:55:58 2007 +0000
@@ -766,6 +766,67 @@
 				       ,group))))
   widget)
 
+(define-widget 'gnus-score-extra 'group
+  "Edit score entries for extra headers."
+  :convert-widget 'gnus-score-extra-convert)
+
+(defun gnus-score-extra-convert (widget)
+  ;; Set args appropriately.
+  (let* ((tag (widget-get widget :tag))
+	 (item `(const :format "" :value ,(downcase tag)))
+	 (match '(string :tag "Match"))
+	 (score '(choice :tag "Score"
+			 (const :tag "default" nil)
+			 (integer :format "%v"
+				  :hide-front-space t)))
+	 (expire '(choice :tag "Expire"
+			  (const :tag "off" nil)
+			  (integer :format "%v"
+				   :hide-front-space t)))
+	 (type '(choice :tag "Type"
+			:value s
+			;; I should really create a forgiving :match
+			;; function for each type below, that only
+			;; looked at the first letter.
+			(const :tag "Regexp" r)
+			(const :tag "Regexp (fixed case)" R)
+			(const :tag "Substring" s)
+			(const :tag "Substring (fixed case)" S)
+			(const :tag "Exact" e)
+			(const :tag "Exact (fixed case)" E)
+			(const :tag "Word" w)
+			(const :tag "Word (fixed case)" W)
+			(const :tag "default" nil)))
+	 (header (if gnus-extra-headers
+		     (let (name)
+		       `(choice :tag "Header"
+				,@(mapcar (lambda (h)
+					    (setq name (symbol-name h))
+					    (list 'const :tag name name))
+					  gnus-extra-headers)
+				(string :tag "Other" :format "%v")))
+		   '(string :tag "Header")))
+	 (group `(group ,match ,score ,expire ,type ,header))
+	 (doc (concat (or (widget-get widget :doc)
+			  (concat "Change score based on the " tag
+				  " header.\n")))))
+    (widget-put
+     widget :args
+     `(,item
+       (repeat :inline t
+	       :indent 0
+	       :tag ,tag
+	       :doc ,doc
+	       :format "%t:\n%h%v%i\n\n"
+	       (choice :format "%v"
+		       :value ("" nil nil s
+			       ,(if gnus-extra-headers
+				    (symbol-name (car gnus-extra-headers))
+				  ""))
+		       ,group
+		       sexp)))))
+  widget)
+
 (defvar gnus-custom-scores)
 (defvar gnus-custom-score-alist)
 
@@ -822,7 +883,7 @@
 				     (gnus-score-string :tag "Subject")
 				     (gnus-score-string :tag "References")
 				     (gnus-score-string :tag "Xref")
-				     (gnus-score-string :tag "Extra")
+				     (gnus-score-extra :tag "Extra")
 				     (gnus-score-string :tag "Message-ID")
 				     (gnus-score-integer :tag "Lines")
 				     (gnus-score-integer :tag "Chars")