X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fgnus.el;h=fe6072ef765c4a2af41e354d7e78f28da9bd3131;hb=refs%2Ftags%2Fgnus-6_8_0;hp=edf5db63ab906e9bca20b28e0d82c5d1880788b9;hpb=f393a881c3f473a341ac3c610cedd306e7cbbf16;p=elisp%2Fgnus.git- diff --git a/lisp/gnus.el b/lisp/gnus.el index edf5db6..fe6072e 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1987,88,89,90,93,94,95,96,97,98 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA -;; Lars Magne Ingebrigtsen +;; Lars Magne Ingebrigtsen ;; Keywords: news, mail ;; This file is part of GNU Emacs. @@ -41,6 +41,10 @@ :group 'news :group 'mail) +(defgroup gnus-cache nil + "Cache interface." + :group 'gnus) + (defgroup gnus-start nil "Starting your favorite newsreader." :group 'gnus) @@ -246,21 +250,23 @@ is restarted, and sometimes reloaded." :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) -(defconst gnus-version-number "0.29" - "Version number for this version of Gnus.") +(defconst gnus-version-number "6.8.0" + "Version number for this version of gnus.") -(defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number) - "Version string for this version of Gnus.") +(defconst gnus-version + (format "Chao-gnus %s (based on Gnus 5.6.22; for SEMI 1.8/FLIM 1.8)" + gnus-version-number) + "Version string for this version of gnus.") (defcustom gnus-inhibit-startup-message nil - "*If non-nil, the startup message will not be displayed. + "If non-nil, the startup message will not be displayed. This variable is used before `.gnus.el' is loaded, so it should be set in `.emacs' instead." :group 'gnus-start :type 'boolean) (defcustom gnus-play-startup-jingle nil - "*If non-nil, play the Gnus jingle at startup." + "If non-nil, play the Gnus jingle at startup." :group 'gnus-start :type 'boolean) @@ -695,14 +701,19 @@ be set in `.emacs' instead." (require 'nnheader) (defcustom gnus-home-directory "~/" - "*Directory variable that specifies the \"home\" directory. + "Directory variable that specifies the \"home\" directory. All other Gnus path variables are initialized from this variable." :group 'gnus-files :type 'directory) (defcustom gnus-directory (or (getenv "SAVEDIR") (nnheader-concat gnus-home-directory "News/")) - "*Directory variable from which all other Gnus file variables are derived." + "*Directory variable from which all other Gnus file variables are derived. + +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) @@ -732,7 +743,7 @@ used to 899, you would say something along these lines: (setq gnus-select-method '(nntp \"my.nntp.server\" (nntp-port-number 899)))") (defcustom gnus-nntpserver-file "/etc/nntpserver" - "*A file with only the name of the nntp server in it." + "A file with only the name of the nntp server in it." :group 'gnus-files :group 'gnus-server :type 'file) @@ -832,7 +843,7 @@ that case, just return a fully prefixed name of the group -- string)) (defcustom gnus-secondary-servers nil - "*List of NNTP servers that the user can choose between interactively. + "List of NNTP servers that the user can choose between interactively. To make Gnus query you for a server, you have to give `gnus' a non-numeric prefix - `C-u M-x gnus', in short." :group 'gnus-server @@ -847,7 +858,7 @@ variable instead." string)) (defcustom gnus-secondary-select-methods nil - "*A list of secondary methods that will be used for reading news. + "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 `gnus-select-method'). @@ -864,7 +875,7 @@ you could set this variable: 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. + "Local domain name without a host name. The DOMAINNAME environment variable is used instead if it is defined. If the `system-name' function returns the full Internet name, there is no need to set this variable." @@ -879,7 +890,7 @@ Obsolete variable; use `message-user-organization' instead.") ;; Customization variables (defcustom gnus-refer-article-method nil - "*Preferred method for fetching an article by Message-ID. + "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. @@ -1044,7 +1055,7 @@ articles. This is not a good idea." :type 'boolean) (defcustom gnus-use-demon nil - "*If non-nil, Gnus might use some demons." + "If non-nil, Gnus might use some demons." :group 'gnus-meta :type 'boolean) @@ -1098,6 +1109,7 @@ slower." :group 'gnus-summary-format :type '(radio (function-item gnus-extract-address-components) (function-item mail-extract-address-components) + (function-item std11-extract-address-components) (function :tag "Other"))) (defcustom gnus-carpal nil @@ -1106,7 +1118,7 @@ slower." :type 'boolean) (defcustom gnus-shell-command-separator ";" - "*String used to separate to shell commands." + "String used to separate to shell commands." :group 'gnus-files :type 'string) @@ -1125,8 +1137,9 @@ slower." ("nnsoup" post-mail address) ("nndraft" post-mail) ("nnfolder" mail respool address) - ("nngateway" none address prompt-address physical-address) + ("nngateway" post-mail address prompt-address physical-address) ("nnweb" none) + ("nnlistserv" none) ("nnagent" post-mail)) "*An alist of valid select methods. The first element of each list lists should be a string with the name @@ -1162,7 +1175,7 @@ this variable. I think." (sexp :tag "Value"))))) (defcustom gnus-updated-mode-lines '(group article summary tree) - "*List of buffers that should update their mode lines. + "List of buffers that should update their mode lines. The list may contain the symbols `group', `article', `tree' and `summary'. If the corresponding symbol is present, Gnus will keep that mode line updated with information that may be pertinent. @@ -1202,7 +1215,7 @@ course.)" regexp)) (defcustom gnus-group-uncollapsed-levels 1 - "*Number of group name elements to leave alone when making a short group name." + "Number of group name elements to leave alone when making a short group name." :group 'gnus-group-visual :type 'integer) @@ -1214,12 +1227,12 @@ course.)" ;; Hooks. (defcustom gnus-load-hook nil - "*A hook run while Gnus is loaded." + "A hook run while Gnus is loaded." :group 'gnus-start :type 'hook) (defcustom gnus-apply-kill-hook '(gnus-apply-kill-file) - "*A hook called to apply kill files to a group. + "A hook called to apply kill files to a group. This hook is intended to apply a kill file to the selected newsgroup. The function `gnus-apply-kill-file' is called by default. @@ -1240,7 +1253,7 @@ following hook: :type 'hook) (defcustom gnus-group-change-level-function nil - "*Function run when a group level is changed. + "Function run when a group level is changed. It is called with three parameters -- GROUP, LEVEL and OLDLEVEL." :group 'gnus-group-level :type 'function) @@ -1330,7 +1343,6 @@ want." gnus-article-emphasize gnus-article-fill-cited-article gnus-article-remove-cr - gnus-article-de-quoted-unreadable gnus-summary-stop-page-breaking ;; gnus-summary-caesar-message ;; gnus-summary-verbose-headers @@ -1391,7 +1403,6 @@ want." ;; Variable holding the user answers to all method prompts. (defvar gnus-method-history nil) -(defvar gnus-group-history nil) ;; Variable holding the user answers to all mail method prompts. (defvar gnus-mail-method-history nil) @@ -1402,12 +1413,19 @@ want." (defvar gnus-server-alist nil "List of available servers.") +(defcustom gnus-cache-directory + (nnheader-concat gnus-directory "cache/") + "*The directory where cached articles will be stored." + :group 'gnus-cache + :type 'directory) + (defvar gnus-predefined-server-alist `(("cache" (nnspool "cache" - (nnspool-spool-directory "~/News/cache/") - (nnspool-nov-directory "~/News/cache/") - (nnspool-active-file "~/News/cache/active")))) + (nnspool-spool-directory gnus-cache-directory) + (nnspool-nov-directory gnus-cache-directory) + (nnspool-active-file + (nnheader-concat gnus-cache-directory "active"))))) "List of predefined (convenience) servers.") (defvar gnus-topic-indentation "") ;; Obsolete variable. @@ -1525,8 +1543,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") (if (eq (nth 1 package) ':interactive) (cdddr package) (cdr package))))) - '(("metamail" metamail-buffer) - ("info" Info-goto-node) + '(("info" Info-goto-node) ("hexl" hexl-hex-string-to-integer) ("pp" pp pp-to-string pp-eval-expression) ("ps-print" ps-print-preprint) @@ -1629,12 +1646,16 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") ("gnus-sum" gnus-summary-insert-line gnus-summary-read-group gnus-list-of-unread-articles gnus-list-of-read-articles gnus-offer-save-summaries gnus-make-thread-indent-array - gnus-summary-exit gnus-update-read-articles) + gnus-summary-exit gnus-update-read-articles gnus-summary-last-subject + gnus-summary-skip-intangible gnus-summary-article-number + gnus-data-header gnus-data-find) ("gnus-group" gnus-group-insert-group-line gnus-group-quit gnus-group-list-groups gnus-group-first-unread-group gnus-group-set-mode-line gnus-group-set-info gnus-group-save-newsrc gnus-group-setup-buffer gnus-group-get-new-news - gnus-group-make-help-group gnus-group-update-group) + gnus-group-make-help-group gnus-group-update-group + gnus-clear-inboxes-moved gnus-group-iterate + gnus-group-group-name) ("gnus-bcklg" gnus-backlog-request-article gnus-backlog-enter-article gnus-backlog-remove-article) ("gnus-art" gnus-article-read-summary-keys gnus-article-save @@ -1647,7 +1668,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") gnus-article-hide-headers gnus-article-hide-boring-headers gnus-article-treat-overstrike gnus-article-word-wrap gnus-article-remove-cr gnus-article-remove-trailing-blank-lines - gnus-article-display-x-face gnus-article-de-quoted-unreadable + gnus-article-display-x-face gnus-article-mime-decode-quoted-printable gnus-article-hide-pgp gnus-article-hide-pem gnus-article-hide-signature gnus-article-strip-leading-blank-lines gnus-article-date-local @@ -1672,7 +1693,8 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") gnus-async-halt-prefetch) ("gnus-agent" gnus-open-agent gnus-agent-get-function gnus-agent-save-groups gnus-agent-save-active gnus-agent-method-p - gnus-agent-get-undownloaded-list gnus-agent-fetch-session) + gnus-agent-get-undownloaded-list gnus-agent-fetch-session + gnus-summary-set-agent-mark gnus-agent-save-group-info) ("gnus-agent" :interactive t gnus-unplugged gnus-agentize gnus-agent-batch) ("gnus-vm" :interactive t gnus-summary-save-in-vm @@ -1682,7 +1704,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") ;;; gnus-sum.el thingies -(defcustom gnus-summary-line-format "%U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n" +(defcustom gnus-summary-line-format "%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n" "*The format specification of the lines in the summary buffer. It works along the same lines as a normal formatting string, @@ -1805,14 +1827,6 @@ This restriction may disappear in later versions of Gnus." "Set GROUP's active info." `(gnus-sethash ,group ,active gnus-active-hashtb)) -(defun gnus-alive-p () - "Say whether Gnus is running or not." - (and gnus-group-buffer - (get-buffer gnus-group-buffer) - (save-excursion - (set-buffer gnus-group-buffer) - (eq major-mode 'gnus-group-mode)))) - ;; Info access macros. (defmacro gnus-info-group (info) @@ -2076,11 +2090,13 @@ g -- Group name." ((= c ?g) (gnus-group-group-name)) ((= c ?A) - (gnus-summary-article-number)) + (gnus-summary-skip-intangible) + (or (get-text-property (point) 'gnus-number) + (gnus-summary-last-subject))) ((= c ?H) - (gnus-summary-article-header)) + (gnus-data-header (gnus-data-find (gnus-summary-article-number)))) (t - (error "Not implemented spec"))) + (error "Non-implemented spec"))) out) (cond ((= c ?r) @@ -2189,11 +2205,11 @@ that that variable is buffer-local to the summary buffers." (defun gnus-ephemeral-group-p (group) "Say whether GROUP is ephemeral or not." - (gnus-group-get-parameter group 'quit-config)) + (gnus-group-get-parameter group 'quit-config t)) (defun gnus-group-quit-config (group) "Return the quit-config of GROUP." - (gnus-group-get-parameter group 'quit-config)) + (gnus-group-get-parameter group 'quit-config t)) (defun gnus-kill-ephemeral-group (group) "Remove ephemeral GROUP from relevant structures." @@ -2379,30 +2395,41 @@ You should probably use `gnus-find-method-for-group' instead." "Say whether the group is secondary or not." (gnus-secondary-method-p (gnus-find-method-for-group group))) -(defun gnus-group-find-parameter (group &optional symbol) +(defun gnus-group-find-parameter (group &optional symbol allow-list) "Return the group parameters for GROUP. If SYMBOL, return the value of that symbol in the group parameters." (save-excursion (set-buffer gnus-group-buffer) (let ((parameters (funcall gnus-group-get-parameter-function group))) (if symbol - (gnus-group-parameter-value parameters symbol) + (gnus-group-parameter-value parameters symbol allow-list) parameters)))) -(defun gnus-group-get-parameter (group &optional symbol) +(defun gnus-group-get-parameter (group &optional symbol allow-list) "Return the group parameters for GROUP. If SYMBOL, return the value of that symbol in the group parameters. Most functions should use `gnus-group-find-parameter', which also examines the topic parameters." (let ((params (gnus-info-params (gnus-get-info group)))) (if symbol - (gnus-group-parameter-value params symbol) + (gnus-group-parameter-value params symbol allow-list) params))) -(defun gnus-group-parameter-value (params symbol) +(defun gnus-group-parameter-value (params symbol &optional allow-list) "Return the value of SYMBOL in group PARAMS." - (or (car (memq symbol params)) ; It's either a simple symbol - (cdr (assq symbol params)))) ; or a cons. + ;; We only wish to return group parameters (dotted lists) and + ;; not local variables, which may have the same names. + ;; But first we handle single elements... + (or (car (memq symbol params)) + ;; Handle alist. + (let (elem) + (catch 'found + (while (setq elem (pop params)) + (when (and (consp elem) + (eq (car elem) symbol) + (or allow-list + (atom (cdr elem)))) + (throw 'found (cdr elem)))))))) (defun gnus-group-add-parameter (group param) "Add parameter PARAM to GROUP." @@ -2435,7 +2462,7 @@ also examines the topic parameters." (when params (setq params (delq name params)) (while (assq name params) - (setq params (delq (assq name params) params))) + (gnus-pull name params)) (gnus-info-set-params info params)))))) (defun gnus-group-add-score (group &optional score) @@ -2450,7 +2477,10 @@ If SCORE is nil, add 1 to the score of GROUP." "Collapse GROUP name LEVELS. Select methods are stripped and any remote host name is stripped down to just the host name." - (let* ((name "") (foreign "") (depth -1) (skip 1) + (let* ((name "") + (foreign "") + (depth 0) + (skip 1) (levels (or levels (progn (while (string-match "\\." group skip) @@ -2519,7 +2549,7 @@ Returns the number of articles marked as read." (kill-buffer (current-buffer)))))) (defcustom gnus-kill-file-name "KILL" - "*Suffix of the kill files." + "Suffix of the kill files." :group 'gnus-score-kill :group 'gnus-score-files :type 'string) @@ -2670,7 +2700,7 @@ Allow completion over sensible values." ;;;###autoload (defun gnus-slave-no-server (&optional arg) - "Read network news as a slave, without connecting to local server" + "Read network news as a slave, without connecting to local server." (interactive "P") (gnus-no-server arg t))