X-Git-Url: http://cgit.sxemacs.org/?p=gnus;a=blobdiff_plain;f=lisp%2Fgnus.el;h=240b5902331ccb18797f6727fe9ca98d68880bb4;hp=d11fd84393f998113d9a95ee2e5e9bb40ded8a99;hb=4598d7eb56ad42593c8aee7189d3b31e6c476344;hpb=e5c3a3810539df6764a3fed0893c40aae3377e34 diff --git a/lisp/gnus.el b/lisp/gnus.el index d11fd8439..240b59023 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -1,6 +1,6 @@ ;;; gnus.el --- a newsreader for GNU Emacs -;; Copyright (C) 1987-1990, 1993-1998, 2000-2011 +;; Copyright (C) 1987-1990, 1993-1998, 2000-2012 ;; Free Software Foundation, Inc. ;; Author: Masanobu UMEDA @@ -36,6 +36,7 @@ (require 'wid-edit) (require 'mm-util) (require 'nnheader) +(require 'gnus-compat) ;; These are defined afterwards with gnus-define-group-parameter (defvar gnus-ham-process-destinations) @@ -293,10 +294,10 @@ is restarted, and sometimes reloaded." :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) -(defconst gnus-version-number "0.14" +(defconst gnus-version-number "0.2" "Version number for this version of Gnus.") -(defconst gnus-version (format "No Gnus v%s" gnus-version-number) +(defconst gnus-version (format "Ma Gnus v%s" gnus-version-number) "Version string for this version of Gnus.") (defcustom gnus-inhibit-startup-message nil @@ -699,7 +700,7 @@ be set in `.emacs' instead." (defface gnus-summary-cancelled '((((class color)) (:foreground "yellow" :background "black"))) - "Face used for cancelled articles." + "Face used for canceled articles." :group 'gnus-summary) ;; backward-compatibility alias (put 'gnus-summary-cancelled-face 'face-alias 'gnus-summary-cancelled) @@ -1008,10 +1009,11 @@ be set in `.emacs' instead." (purp "#9999cc" "#666699") (no "#ff0000" "#ffff00") (neutral "#b4b4b4" "#878787") + (ma "#2020e0" "#8080ff") (september "#bf9900" "#ffcc00")) "Color alist used for the Gnus logo.") -(defcustom gnus-logo-color-style 'no +(defcustom gnus-logo-color-style 'ma "*Color styles used for the Gnus logo." :type `(choice ,@(mapcar (lambda (elem) (list 'const (car elem))) gnus-logo-color-alist)) @@ -1042,12 +1044,15 @@ be set in `.emacs' instead." ((boundp 'image-load-path) (symbol-value 'image-load-path)) (t load-path))) - (image (find-image - `((:type xpm :file "gnus.xpm" + (image (gnus-splash-svg-color-symbols (find-image + `((:type svg :file "gnus.svg" + :color-symbols + (("#bf9900" . ,(car gnus-logo-colors)) + ("#ffcc00" . ,(cadr gnus-logo-colors)))) + (:type xpm :file "gnus.xpm" :color-symbols (("thing" . ,(car gnus-logo-colors)) ("shadow" . ,(cadr gnus-logo-colors)))) - (:type svg :file "gnus.svg") (:type png :file "gnus.png") (:type pbm :file "gnus.pbm" ;; Account for the pbm's background. @@ -1056,7 +1061,7 @@ be set in `.emacs' instead." (:type xbm :file "gnus.xbm" ;; Account for the xbm's background. :background ,(face-foreground 'gnus-splash) - :foreground ,(face-background 'default)))))) + :foreground ,(face-background 'default))))))) (when image (let ((size (image-size image))) (insert-char ?\n (max 0 (round (- (window-height) @@ -1102,6 +1107,22 @@ be set in `.emacs' instead." (setq mode-line-buffer-identification (concat " " gnus-version)) (set-buffer-modified-p t))) +(defun gnus-splash-svg-color-symbols (list) + "Do color-symbol search-and-replace in svg file." + (let ((type (plist-get (cdr list) :type)) + (file (plist-get (cdr list) :file)) + (color-symbols (plist-get (cdr list) :color-symbols))) + (if (string= type "svg") + (let ((data (with-temp-buffer (insert-file-contents file) + (buffer-string)))) + (mapc (lambda (rule) + (setq data (replace-regexp-in-string + (concat "fill:" (car rule)) + (concat "fill:" (cdr rule)) data))) + color-symbols) + (cons (car list) (list :type type :data data))) + list))) + (eval-when (load) (let ((command (format "%s" this-command))) (when (string-match "gnus" command) @@ -1225,7 +1246,12 @@ REST is a plist of following: (defcustom gnus-home-directory "~/" "Directory variable that specifies the \"home\" directory. -All other Gnus file and directory variables are initialized from this variable." +All other Gnus file and directory variables are initialized from this variable. + +Note that Gnus is mostly loaded when the `.gnus.el' file is read. +This means that other directory variables that are initialized +from this variable won't be set properly if you set this variable +in `.gnus.el'. Set this variable in `.emacs' instead." :group 'gnus-files :type 'directory) @@ -1370,13 +1396,6 @@ non-numeric prefix - `C-u M-x gnus', in short." :type '(repeat string)) (make-obsolete-variable 'gnus-secondary-servers 'gnus-select-method "24.1") -(defcustom gnus-nntp-server nil - "The name of the host running the NNTP server." - :group 'gnus-server - :type '(choice (const :tag "disable" nil) - string)) -(make-obsolete-variable 'gnus-nntp-server 'gnus-select-method "24.1") - (defcustom gnus-secondary-select-methods nil "A list of secondary methods that will be used for reading news. This is a list where each element is a complete select method (see @@ -1403,10 +1422,6 @@ no need to set this variable." (defcustom gnus-refer-article-method 'current "Preferred method for fetching an article by Message-ID. -If you are reading news from the local spool (with nnspool), fetching -articles by Message-ID is painfully slow. By setting this method to an -nntp method, you might get acceptable results. - The value of this variable must be a valid select method as discussed in the documentation of `gnus-select-method'. @@ -1419,6 +1434,7 @@ list, Gnus will try all the methods in the list until it finds a match." (const current) (const :tag "Google" (nnweb "refer" (nnweb-type google))) gnus-select-method + sexp (repeat :menu-tag "Try multiple" :tag "Multiple" :value (current (nnweb "refer" (nnweb-type google))) @@ -1569,9 +1585,12 @@ commands will still require prompting." :type 'boolean) (defcustom gnus-interactive-exit t - "*If non-nil, require your confirmation when exiting Gnus." + "*If non-nil, require your confirmation when exiting Gnus. +If `quiet', update any active summary buffers automatically +first before exiting." :group 'gnus-exit - :type 'boolean) + :type '(choice boolean + (const quiet))) (defcustom gnus-extract-address-components 'gnus-extract-address-components "*Function for extracting address components from a From header. @@ -1608,7 +1627,7 @@ slower." ("nnagent" post-mail) ("nnimap" post-mail address prompt-address physical-address respool server-marks) - ("nnmaildir" mail respool address) + ("nnmaildir" mail respool address server-marks) ("nnnil" none)) "*An alist of valid select methods. The first element of each list lists should be a string with the name @@ -1855,7 +1874,10 @@ total number of articles in the group.") :function-document "Whether this group should be ignored by the registry." :variable gnus-registry-ignored-groups - :variable-default nil + :variable-default (mapcar + (lambda (g) (list g t)) + '("delayed$" "drafts$" "queue$" "INBOX$" + "^nnmairix:" "^nnir:" "archive")) :variable-document "*Groups in which the registry should be turned off." :variable-group gnus-registry @@ -2545,7 +2567,7 @@ a string, be sure to use a valid format, see RFC 2616." (defvar gnus-extended-servers nil) ;; The carpal mode has been removed, but define the variable for -;; backwards compatability. +;; backwards compatibility. (defvar gnus-carpal nil) (make-obsolete-variable 'gnus-carpal nil "Emacs 24.1") @@ -2598,10 +2620,11 @@ a string, be sure to use a valid format, see RFC 2616." (scored . score) (saved . save) (cached . cache) (downloadable . download) (unsendable . unsend) (forwarded . forward) - (recent . recent) (seen . seen))) + (seen . seen) (unexist . unexist))) (defconst gnus-article-special-mark-lists '((seen range) + (unexist range) (killed range) (bookmark tuple) (uid tuple) @@ -2616,7 +2639,7 @@ a string, be sure to use a valid format, see RFC 2616." ;; `score' is not a proper mark ;; `bookmark': don't propagated it, or fix the bug in update-mark. (defconst gnus-article-unpropagated-mark-lists - '(seen cache download unsend score bookmark) + '(seen cache download unsend score bookmark unexist) "Marks that shouldn't be propagated to back ends. Typical marks are those that make no sense in a standalone back end, such as a mark that says whether an article is stored in the cache @@ -2632,9 +2655,13 @@ such as a mark that says whether an article is stored in the cache (defvar gnus-have-read-active-file nil) (defconst gnus-maintainer - "bugs@gnus.org (The Gnus Bugfixing Girls + Boys)" + "submit@debbugs.gnu.org (The Gnus Bugfixing Girls + Boys)" "The mail address of the Gnus maintainers.") +(defconst gnus-bug-package + "gnus" + "The package to use in the bug submission.") + (defvar gnus-info-nodes '((gnus-group-mode "(gnus)Group Buffer") (gnus-summary-mode "(gnus)Summary Buffer") @@ -2660,8 +2687,7 @@ such as a mark that says whether an article is stored in the cache gnus-newsrc-last-checked-date gnus-newsrc-alist gnus-server-alist gnus-killed-list gnus-zombie-list - gnus-topic-topology gnus-topic-alist - gnus-format-specs) + gnus-topic-topology gnus-topic-alist) "Gnus variables saved in the quick startup file.") (defvar gnus-newsrc-alist nil @@ -2887,7 +2913,8 @@ gnus-registry.el will populate this if it's loaded.") gnus-agent-save-active gnus-agent-method-p gnus-agent-get-undownloaded-list gnus-agent-fetch-session gnus-summary-set-agent-mark gnus-agent-save-group-info - gnus-agent-request-article gnus-agent-retrieve-headers) + gnus-agent-request-article gnus-agent-retrieve-headers + gnus-agent-store-article gnus-agent-group-covered-p) ("gnus-agent" :interactive t gnus-unplugged gnus-agentize gnus-agent-batch) ("gnus-vm" :interactive t gnus-summary-save-in-vm @@ -2938,8 +2965,8 @@ with some simple extensions. on level one %R \"A\" if this article has been replied to, \" \" otherwise (character) -%U Status of this article (character, \"R\", \"K\", - \"-\" or \" \") +%U \"Read\" status of this article. + See Info node `(gnus)Marking Articles' %[ Opening bracket (character, \"[\" or \"<\") %] Closing bracket (character, \"]\" or \">\") %> Spaces of length thread-level (string) @@ -3267,7 +3294,7 @@ g -- Group name." ((= c ?d) (point)) ((= c ?D) - (read-file-name prompt nil default-directory 'lambda)) + (read-directory-name prompt nil default-directory 'lambda)) ((= c ?f) (read-file-name prompt nil nil 'lambda)) ((= c ?F) @@ -3557,7 +3584,7 @@ that that variable is buffer-local to the summary buffers." (equal (nth 1 m1) (nth 1 m2))))))) (defsubst gnus-sloppily-equal-method-parameters (m1 m2) - ;; Check parameters for sloppy equalness. + ;; Check parameters for sloppy equality. (let ((p1 (copy-sequence (cddr m1))) (p2 (copy-sequence (cddr m2))) e1 e2) @@ -3584,6 +3611,13 @@ that that variable is buffer-local to the summary buffers." ;; If p2 now is empty, they were equal. (null p2)))) +(defun gnus-method-ephemeral-p (method) + (let ((equal nil)) + (dolist (ephemeral gnus-ephemeral-servers) + (when (gnus-sloppily-equal-method-parameters method ephemeral) + (setq equal t))) + equal)) + (defun gnus-methods-sloppily-equal (m1 m2) ;; Same method. (or @@ -3835,13 +3869,14 @@ The function `gnus-group-find-parameter' will do that for you." ;; The car is regexp matching for matching the group name. (when (string-match (car head) group) ;; The cdr is the parameters. - (setq result (gnus-group-parameter-value (cdr head) - symbol allow-list)) - (when result - ;; Expand if necessary. - (if (and (stringp result) (string-match "\\\\[0-9&]" result)) - (setq result (gnus-expand-group-parameter (car head) - result group)))))) + (let ((this-result + (gnus-group-parameter-value (cdr head) symbol allow-list t))) + (when this-result + (setq result (car this-result)) + ;; Expand if necessary. + (if (and (stringp result) (string-match "\\\\[0-9&]" result)) + (setq result (gnus-expand-group-parameter + (car head) result group))))))) ;; Done. result)))) @@ -3851,7 +3886,9 @@ If SYMBOL, return the value of that symbol in the group parameters. If you call this function inside a loop, consider using the faster `gnus-group-fast-parameter' instead." - (with-current-buffer gnus-group-buffer + (with-current-buffer (if (buffer-live-p (get-buffer gnus-group-buffer)) + gnus-group-buffer + (current-buffer)) (if symbol (gnus-group-fast-parameter group symbol allow-list) (nconc @@ -4088,12 +4125,17 @@ parameters." (if (or (not (inline (gnus-similar-server-opened method))) (not (cddr method))) method - (setq method - `(,(car method) ,(concat (cadr method) "+" group) - (,(intern (format "%s-address" (car method))) ,(cadr method)) - ,@(cddr method))) - (push method gnus-extended-servers) - method)) + (let ((address-slot + (intern (format "%s-address" (car method))))) + (setq method + (if (assq address-slot (cddr method)) + `(,(car method) ,(concat (cadr method) "+" group) + ,@(cddr method)) + `(,(car method) ,(concat (cadr method) "+" group) + (,address-slot ,(cadr method)) + ,@(cddr method)))) + (push method gnus-extended-servers) + method))) (defun gnus-server-status (method) "Return the status of METHOD." @@ -4333,11 +4375,11 @@ current display is used." (switch-to-buffer gnus-group-buffer) (funcall gnus-other-frame-function arg) (add-hook 'gnus-exit-gnus-hook - '(lambda nil - (when (and (frame-live-p gnus-other-frame-object) - (cdr (frame-list))) - (delete-frame gnus-other-frame-object)) - (setq gnus-other-frame-object nil))))))) + (lambda nil + (when (and (frame-live-p gnus-other-frame-object) + (cdr (frame-list))) + (delete-frame gnus-other-frame-object)) + (setq gnus-other-frame-object nil))))))) ;;;###autoload (defun gnus (&optional arg dont-connect slave) @@ -4357,6 +4399,12 @@ prompt the user for the name of an NNTP server to use." (gnus-1 arg dont-connect slave) (gnus-final-warning))) +(autoload 'debbugs-gnu "debbugs-gnu") +(defun gnus-list-debbugs () + "List all open Gnus bug reports." + (interactive) + (debbugs-gnu nil "gnus")) + ;; Allow redefinition of Gnus functions. (gnus-ems-redefine)