* gnus.el (gnus-message-archive-group): Quote value.
[gnus] / lisp / gnus.el
index 669ed1d..43af553 100644 (file)
@@ -29,7 +29,7 @@
 
 (eval '(run-hooks 'gnus-load-hook))
 
 
 (eval '(run-hooks 'gnus-load-hook))
 
-;; For Emacs < 22.2.
+;; For Emacs <22.2 and XEmacs.
 (eval-and-compile
   (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
 
 (eval-and-compile
   (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
 
@@ -307,11 +307,6 @@ be set in `.emacs' instead."
   :group 'gnus-start
   :type 'boolean)
 
   :group 'gnus-start
   :type 'boolean)
 
-(defcustom gnus-play-startup-jingle nil
-  "If non-nil, play the Gnus jingle at startup."
-  :group 'gnus-start
-  :type 'boolean)
-
 (unless (fboundp 'gnus-group-remove-excess-properties)
   (defalias 'gnus-group-remove-excess-properties 'ignore))
 
 (unless (fboundp 'gnus-group-remove-excess-properties)
   (defalias 'gnus-group-remove-excess-properties 'ignore))
 
@@ -959,8 +954,6 @@ be set in `.emacs' instead."
 
 (defvar gnus-group-buffer "*Group*")
 
 
 (defvar gnus-group-buffer "*Group*")
 
-(autoload 'gnus-play-jingle "gnus-audio")
-
 (defface gnus-splash
   '((((class color)
       (background dark))
 (defface gnus-splash
   '((((class color)
       (background dark))
@@ -983,9 +976,7 @@ be set in `.emacs' instead."
       (erase-buffer)
       (unless gnus-inhibit-startup-message
        (gnus-group-startup-message)
       (erase-buffer)
       (unless gnus-inhibit-startup-message
        (gnus-group-startup-message)
-       (sit-for 0)
-       (when gnus-play-startup-jingle
-         (gnus-play-jingle))))))
+       (sit-for 0)))))
 
 (defun gnus-indent-rigidly (start end arg)
   "Indent rigidly using only spaces and no tabs."
 
 (defun gnus-indent-rigidly (start end arg)
   "Indent rigidly using only spaces and no tabs."
@@ -1364,12 +1355,12 @@ updated if the value of this variable is nil, even if you change the
 value of `gnus-message-archive-method' afterward.  If you want the
 saved \"archive\" method to be updated whenever you change the value of
 `gnus-message-archive-method', set this variable to a non-nil value."
 value of `gnus-message-archive-method' afterward.  If you want the
 saved \"archive\" method to be updated whenever you change the value of
 `gnus-message-archive-method', set this variable to a non-nil value."
-  :version "23.1" ;; No Gnus
+  :version "24.1"
   :group 'gnus-server
   :group 'gnus-message
   :type 'boolean)
 
   :group 'gnus-server
   :group 'gnus-message
   :type 'boolean)
 
-(defcustom gnus-message-archive-group nil
+(defcustom gnus-message-archive-group '((format-time-string "sent.%Y-%m"))
   "*Name of the group in which to save the messages you've written.
 This can either be a string; a list of strings; or an alist
 of regexps/functions/forms to be evaluated to return a string (or a list
   "*Name of the group in which to save the messages you've written.
 This can either be a string; a list of strings; or an alist
 of regexps/functions/forms to be evaluated to return a string (or a list
@@ -1391,6 +1382,9 @@ that case, just return a fully prefixed name of the group --
 \"nnml+private:mail.misc\", for instance."
   :group 'gnus-message
   :type '(choice (const :tag "none" nil)
 \"nnml+private:mail.misc\", for instance."
   :group 'gnus-message
   :type '(choice (const :tag "none" nil)
+                (const :tag "Weekly" ((format-time-string "sent.%Yw%U")))
+                (const :tag "Monthly" ((format-time-string "sent.%Y-%m")))
+                (const :tag "Yearly" ((format-time-string "sent.%Y")))
                 function
                 sexp
                 string))
                 function
                 sexp
                 string))
@@ -1427,6 +1421,16 @@ you could set this variable:
   "Default default new newsgroups the first time Gnus is run.
 Should be set in paths.el, and shouldn't be touched by the user.")
 
   "Default default new newsgroups the first time Gnus is run.
 Should be set in paths.el, and shouldn't be touched by the user.")
 
+(defcustom gnus-local-domain nil
+  "Local domain name without a host name.
+The DOMAINNAME environment variable is used instead if it is defined.
+If the function `system-name' returns the full Internet name, there is
+no need to set this variable."
+  :group 'gnus-message
+  :type '(choice (const :tag "default" nil)
+                string))
+(make-obsolete-variable 'gnus-local-domain nil "Emacs 24.1")
+
 (defvar gnus-local-organization nil
   "String with a description of what organization (if any) the user belongs to.
 Obsolete variable; use `message-user-organization' instead.")
 (defvar gnus-local-organization nil
   "String with a description of what organization (if any) the user belongs to.
 Obsolete variable; use `message-user-organization' instead.")
@@ -1489,7 +1493,9 @@ newsgroups."
   "*The number of articles which indicates a large newsgroup.
 If the number of articles in a newsgroup is greater than this value,
 confirmation is required for selecting the newsgroup.
   "*The number of articles which indicates a large newsgroup.
 If the number of articles in a newsgroup is greater than this value,
 confirmation is required for selecting the newsgroup.
-If it is nil, no confirmation is required."
+If it is nil, no confirmation is required.
+
+Also see `gnus-large-ephemeral-newsgroup'."
   :group 'gnus-group-select
   :type '(choice (const :tag "No limit" nil)
                 integer))
   :group 'gnus-group-select
   :type '(choice (const :tag "No limit" nil)
                 integer))
@@ -1570,25 +1576,6 @@ articles.  This is not a good idea."
                 (sexp :format "all"
                       :value t)))
 
                 (sexp :format "all"
                       :value t)))
 
-(defcustom gnus-use-nocem nil
-  "*If non-nil, Gnus will read NoCeM cancel messages.
-You can also set this variable to a positive number as a group level.
-In that case, Gnus scans NoCeM messages when checking new news if this
-value is not exceeding a group level that you specify as the prefix
-argument to some commands, e.g. `gnus', `gnus-group-get-new-news', etc.
-Otherwise, Gnus does not scan NoCeM messages if you specify a group
-level to those commands."
-  :group 'gnus-meta
-  :type '(choice
-         (const :tag "off" nil)
-         (const :tag "on" t)
-         (list :convert-widget
-               (lambda (widget)
-                 (list 'integer :tag "group level"
-                       :value (if (boundp 'gnus-level-default-subscribed)
-                                  gnus-level-default-subscribed
-                                3))))))
-
 (defcustom gnus-suppress-duplicates nil
   "*If non-nil, Gnus will mark duplicate copies of the same article as read."
   :group 'gnus-meta
 (defcustom gnus-suppress-duplicates nil
   "*If non-nil, Gnus will mark duplicate copies of the same article as read."
   :group 'gnus-meta
@@ -1641,11 +1628,6 @@ slower."
                (function-item mail-extract-address-components)
                (function :tag "Other")))
 
                (function-item mail-extract-address-components)
                (function :tag "Other")))
 
-(defcustom gnus-carpal nil
-  "*If non-nil, display clickable icons."
-  :group 'gnus-meta
-  :type 'boolean)
-
 (defcustom gnus-shell-command-separator ";"
   "String used to separate shell commands."
   :group 'gnus-files
 (defcustom gnus-shell-command-separator ";"
   "String used to separate shell commands."
   :group 'gnus-files
@@ -2605,6 +2587,11 @@ a string, be sure to use a valid format, see RFC 2616."
 (defvar gnus-server-method-cache nil)
 (defvar gnus-extended-servers nil)
 
 (defvar gnus-server-method-cache nil)
 (defvar gnus-extended-servers nil)
 
+;; The carpal mode has been removed, but define the variable for
+;; backwards compatability.
+(defvar gnus-carpal nil)
+(make-obsolete-variable 'gnus-carpal nil "Emacs 24.1")
+
 (defvar gnus-agent-fetching nil
   "Whether Gnus agent is in fetching mode.")
 
 (defvar gnus-agent-fetching nil
   "Whether Gnus agent is in fetching mode.")
 
@@ -2620,9 +2607,6 @@ a string, be sure to use a valid format, see RFC 2616."
 (defvar gnus-tree-buffer "*Tree*"
   "Buffer where Gnus thread trees are displayed.")
 
 (defvar gnus-tree-buffer "*Tree*"
   "Buffer where Gnus thread trees are displayed.")
 
-;; Dummy variable.
-(defvar gnus-use-generic-from nil)
-
 ;; Variable holding the user answers to all method prompts.
 (defvar gnus-method-history nil)
 
 ;; Variable holding the user answers to all method prompts.
 (defvar gnus-method-history nil)
 
@@ -2650,8 +2634,6 @@ a string, be sure to use a valid format, see RFC 2616."
       ,(nnheader-concat gnus-cache-directory "active"))))
   "List of predefined (convenience) servers.")
 
       ,(nnheader-concat gnus-cache-directory "active"))))
   "List of predefined (convenience) servers.")
 
-(defvar gnus-topic-indentation "") ;; Obsolete variable.
-
 (defconst gnus-article-mark-lists
   '((marked . tick) (replied . reply)
     (expirable . expire) (killed . killed)
 (defconst gnus-article-mark-lists
   '((marked . tick) (replied . reply)
     (expirable . expire) (killed . killed)
@@ -2808,13 +2790,12 @@ gnus-registry.el will populate this if it's loaded.")
       rmail-summary-exists rmail-select-summary)
      ;; Only used in gnus-util, which has an autoload.
      ("rmailsum" rmail-update-summary)
       rmail-summary-exists rmail-select-summary)
      ;; Only used in gnus-util, which has an autoload.
      ("rmailsum" rmail-update-summary)
-     ("gnus-audio" :interactive t gnus-audio-play)
      ("gnus-xmas" gnus-xmas-splash)
      ("score-mode" :interactive t gnus-score-mode)
      ("gnus-mh" gnus-summary-save-article-folder
       gnus-Folder-save-name gnus-folder-save-name)
      ("gnus-mh" :interactive t gnus-summary-save-in-folder)
      ("gnus-xmas" gnus-xmas-splash)
      ("score-mode" :interactive t gnus-score-mode)
      ("gnus-mh" gnus-summary-save-article-folder
       gnus-Folder-save-name gnus-folder-save-name)
      ("gnus-mh" :interactive t gnus-summary-save-in-folder)
-     ("gnus-demon" gnus-demon-add-nocem gnus-demon-add-scanmail
+     ("gnus-demon" gnus-demon-add-scanmail
       gnus-demon-add-rescan gnus-demon-add-scan-timestamps
       gnus-demon-add-disconnection gnus-demon-add-handler
       gnus-demon-remove-handler)
       gnus-demon-add-rescan gnus-demon-add-scan-timestamps
       gnus-demon-add-disconnection gnus-demon-add-handler
       gnus-demon-remove-handler)
@@ -2824,9 +2805,7 @@ gnus-registry.el will populate this if it's loaded.")
       gnus-convert-image-to-gray-x-face gnus-convert-face-to-png
       gnus-face-from-file)
      ("gnus-salt" gnus-highlight-selected-tree gnus-possibly-generate-tree
       gnus-convert-image-to-gray-x-face gnus-convert-face-to-png
       gnus-face-from-file)
      ("gnus-salt" gnus-highlight-selected-tree gnus-possibly-generate-tree
-      gnus-tree-open gnus-tree-close gnus-carpal-setup-buffer)
-     ("gnus-nocem" gnus-nocem-scan-groups gnus-nocem-close
-      gnus-nocem-unwanted-article-p)
+      gnus-tree-open gnus-tree-close)
      ("gnus-srvr" gnus-enter-server-buffer gnus-server-set-info
       gnus-server-server-name)
      ("gnus-srvr" gnus-browse-foreign-server)
      ("gnus-srvr" gnus-enter-server-buffer gnus-server-set-info
       gnus-server-server-name)
      ("gnus-srvr" gnus-browse-foreign-server)
@@ -2934,6 +2913,7 @@ gnus-registry.el will populate this if it's loaded.")
       gnus-start-date-timer gnus-stop-date-timer
       gnus-mime-view-all-parts)
      ("gnus-int" gnus-request-type)
       gnus-start-date-timer gnus-stop-date-timer
       gnus-mime-view-all-parts)
      ("gnus-int" gnus-request-type)
+     ("gnus-html" gnus-html-show-images)
      ("gnus-start" gnus-newsrc-parse-options gnus-1 gnus-no-server-1
       gnus-dribble-enter gnus-read-init-file gnus-dribble-touch
       gnus-check-reasonable-setup)
      ("gnus-start" gnus-newsrc-parse-options gnus-1 gnus-no-server-1
       gnus-dribble-enter gnus-read-init-file gnus-dribble-touch
       gnus-check-reasonable-setup)
@@ -3231,7 +3211,6 @@ If ARG, insert string at point."
 
 (defun gnus-continuum-version (&optional version)
   "Return VERSION as a floating point number."
 
 (defun gnus-continuum-version (&optional version)
   "Return VERSION as a floating point number."
-  (interactive)
   (unless version
     (setq version gnus-version))
   (when (or (string-match "^\\([^ ]+\\)? ?Gnus v?\\([0-9.]+\\)$" version)
   (unless version
     (setq version gnus-version))
   (when (or (string-match "^\\([^ ]+\\)? ?Gnus v?\\([0-9.]+\\)$" version)
@@ -3415,14 +3394,14 @@ that that variable is buffer-local to the summary buffers."
 (defun gnus-news-group-p (group &optional article)
   "Return non-nil if GROUP (and ARTICLE) come from a news server."
   (cond ((gnus-member-of-valid 'post group) ;Ordinary news group
 (defun gnus-news-group-p (group &optional article)
   "Return non-nil if GROUP (and ARTICLE) come from a news server."
   (cond ((gnus-member-of-valid 'post group) ;Ordinary news group
-        t)                             ;is news of course.
+        t)                                 ;is news of course.
        ((not (gnus-member-of-valid 'post-mail group)) ;Non-combined.
         nil)                           ;must be mail then.
        ((vectorp article)              ;Has header info.
         (eq (gnus-request-type group (mail-header-id article)) 'news))
        ((not (gnus-member-of-valid 'post-mail group)) ;Non-combined.
         nil)                           ;must be mail then.
        ((vectorp article)              ;Has header info.
         (eq (gnus-request-type group (mail-header-id article)) 'news))
-       ((null article)                 ;Hasn't header info
+       ((null article)                        ;Hasn't header info
         (eq (gnus-request-type group) 'news)) ;(unknown ==> mail)
         (eq (gnus-request-type group) 'news)) ;(unknown ==> mail)
-       ((< article 0)                  ;Virtual message
+       ((< article 0)                         ;Virtual message
         nil)                           ;we don't know, guess mail.
        (t                              ;Has positive number
         (eq (gnus-request-type group article) 'news)))) ;use it.
         nil)                           ;we don't know, guess mail.
        (t                              ;Has positive number
         (eq (gnus-request-type group article) 'news)))) ;use it.
@@ -3839,12 +3818,13 @@ You should probably use `gnus-find-method-for-group' instead."
 
 (defun gnus-expand-group-parameter (match value group)
   "Use MATCH to expand VALUE in GROUP."
 
 (defun gnus-expand-group-parameter (match value group)
   "Use MATCH to expand VALUE in GROUP."
-  (with-temp-buffer
-    (insert group)
-    (goto-char (point-min))
-    (while (re-search-forward match nil t)
-      (replace-match value))
-    (buffer-string)))
+  (let ((start (string-match match group)))
+    (if start
+        (let ((matched-string (substring group start (match-end 0))))
+          ;; Build match groups
+          (string-match match matched-string)
+          (replace-match value nil nil matched-string))
+      group)))
 
 (defun gnus-expand-group-parameters (match parameters group)
   "Go through PARAMETERS and expand them according to the match data."
 
 (defun gnus-expand-group-parameters (match parameters group)
   "Go through PARAMETERS and expand them according to the match data."
@@ -3888,9 +3868,7 @@ The function `gnus-group-find-parameter' will do that for you."
              ;; Expand if necessary.
              (if (and (stringp result) (string-match "\\\\[0-9&]" result))
                  (setq result (gnus-expand-group-parameter (car head)
              ;; Expand if necessary.
              (if (and (stringp result) (string-match "\\\\[0-9&]" result))
                  (setq result (gnus-expand-group-parameter (car head)
-                                                           result group)))
-             ;; Exit the loop early.
-             (setq tail nil))))
+                                                           result group))))))
        ;; Done.
        result))))
 
        ;; Done.
        result))))
 
@@ -3948,8 +3926,11 @@ If ALLOW-LIST, also allow list as a result."
                           group 'params))))
 
 (defun gnus-group-set-parameter (group name value)
                           group 'params))))
 
 (defun gnus-group-set-parameter (group name value)
-  "Set parameter NAME to VALUE in GROUP."
-  (let ((info (gnus-get-info group)))
+  "Set parameter NAME to VALUE in GROUP.
+GROUP can also be an INFO structure."
+  (let ((info (if (listp group)
+                 group
+               (gnus-get-info group))))
     (when info
       (gnus-group-remove-parameter group name)
       (let ((old-params (gnus-info-params info))
     (when info
       (gnus-group-remove-parameter group name)
       (let ((old-params (gnus-info-params info))
@@ -3959,17 +3940,22 @@ If ALLOW-LIST, also allow list as a result."
                    (not (eq (caar old-params) name)))
            (setq new-params (append new-params (list (car old-params)))))
          (setq old-params (cdr old-params)))
                    (not (eq (caar old-params) name)))
            (setq new-params (append new-params (list (car old-params)))))
          (setq old-params (cdr old-params)))
-       (gnus-group-set-info new-params group 'params)))))
+       (if (listp group)
+           (gnus-info-set-params info new-params t)
+         (gnus-group-set-info new-params (gnus-info-group info) 'params))))))
 
 (defun gnus-group-remove-parameter (group name)
 
 (defun gnus-group-remove-parameter (group name)
-  "Remove parameter NAME from GROUP."
-  (let ((info (gnus-get-info group)))
+  "Remove parameter NAME from GROUP.
+GROUP can also be an INFO structure."
+  (let ((info (if (listp group)
+                 group
+               (gnus-get-info group))))
     (when info
       (let ((params (gnus-info-params info)))
        (when params
          (setq params (delq name params))
          (while (assq name params)
     (when info
       (let ((params (gnus-info-params info)))
        (when params
          (setq params (delq name params))
          (while (assq name params)
-           (gnus-pull name params))
+           (gnus-alist-pull name params))
          (gnus-info-set-params info params))))))
 
 (defun gnus-group-add-score (group &optional score)
          (gnus-info-set-params info params))))))
 
 (defun gnus-group-add-score (group &optional score)
@@ -4269,9 +4255,9 @@ Allow completion over sensible values."
                  gnus-predefined-server-alist
                  gnus-server-alist))
         (method
                  gnus-predefined-server-alist
                  gnus-server-alist))
         (method
-         (completing-read
-          prompt servers
-          nil t nil 'gnus-method-history)))
+         (gnus-completing-read
+          prompt (mapcar 'car servers)
+          t nil 'gnus-method-history)))
     (cond
      ((equal method "")
       (setq method gnus-select-method))
     (cond
      ((equal method "")
       (setq method gnus-select-method))
@@ -4390,11 +4376,13 @@ prompt the user for the name of an NNTP server to use."
   ;; When using the development version of Gnus, load the gnus-load
   ;; file.
   (unless (string-match "^Gnus" gnus-version)
   ;; When using the development version of Gnus, load the gnus-load
   ;; file.
   (unless (string-match "^Gnus" gnus-version)
-    (load "gnus-load"))
+    (load "gnus-load" nil t))
   (unless (byte-code-function-p (symbol-function 'gnus))
     (message "You should byte-compile Gnus")
     (sit-for 2))
   (unless (byte-code-function-p (symbol-function 'gnus))
     (message "You should byte-compile Gnus")
     (sit-for 2))
-  (gnus-1 arg dont-connect slave))
+  (let ((gnus-action-message-log (list nil)))
+    (gnus-1 arg dont-connect slave)
+    (gnus-final-warning)))
 
 ;; Allow redefinition of Gnus functions.
 
 
 ;; Allow redefinition of Gnus functions.