X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fgnus.el;h=725275924f50e4860813aaf083dc5492db9caecb;hb=bb8ce369c5c62221c2e12b3d78687d4f1b3f7e14;hp=b2aec693dadf5e93c6054a06c3fdada9c5a916bd;hpb=dabf5ed5557c0bf42276ff915166084e44334662;p=gnus diff --git a/lisp/gnus.el b/lisp/gnus.el index b2aec693d..725275924 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -39,11 +39,166 @@ "Starting your favorite newsreader." :group 'gnus) +;; These belong to gnus-group.el. +(defgroup gnus-group nil + "Group buffers." + :link '(custom-manual "(gnus)The Group Buffer") + :group 'gnus) + +(defgroup gnus-group-foreign nil + "Foreign groups." + :link '(custom-manual "(gnus)Foreign Groups") + :group 'gnus-group) + +(defgroup gnus-group-levels nil + "Group levels." + :link '(custom-manual "(gnus)Group Levels") + :group 'gnus-group) + +(defgroup gnus-group-select nil + "Selecting a Group." + :link '(custom-manual "(gnus)Selecting a Group") + :group 'gnus-group) + +(defgroup gnus-group-listing nil + "Showing slices of the group list." + :link '(custom-manual "(gnus)Listing Groups") + :group 'gnus-group) + +(defgroup gnus-group-visual nil + "Sorting the group buffer." + :link '(custom-manual "(gnus)Group Buffer Format") + :group 'gnus-group + :group 'gnus-visual) + +(defgroup gnus-group-various nil + "Various group options." + :link '(custom-manual "(gnus)Scanning New Messages") + :group 'gnus-group) + +;; These belong to gnus-sum.el. +(defgroup gnus-summary nil + "Summary buffers." + :link '(custom-manual "(gnus)The Summary Buffer") + :group 'gnus) + +(defgroup gnus-summary-exit nil + "Leaving summary buffers." + :link '(custom-manual "(gnus)Exiting the Summary Buffer") + :group 'gnus-summary) + +(defgroup gnus-summary-marks nil + "Marks used in summary buffers." + :link '(custom-manual "(gnus)Marking Articles") + :group 'gnus-summary) + +(defgroup gnus-thread nil + "Ordering articles according to replies." + :link '(custom-manual "(gnus)Threading") + :group 'gnus-summary) + +(defgroup gnus-summary-format nil + "Formatting of the summary buffer." + :link '(custom-manual "(gnus)Summary Buffer Format") + :group 'gnus-summary) + +(defgroup gnus-summary-choose nil + "Choosing Articles." + :link '(custom-manual "(gnus)Choosing Articles") + :group 'gnus-summary) + +(defgroup gnus-summary-maneuvering nil + "Summary movement commands." + :link '(custom-manual "(gnus)Summary Maneuvering") + :group 'gnus-summary) + +(defgroup gnus-summary-mail nil + "Mail group commands." + :link '(custom-manual "(gnus)Mail Group Commands") + :group 'gnus-summary) + +(defgroup gnus-summary-sort nil + "Sorting the summary buffer." + :link '(custom-manual "(gnus)Sorting") + :group 'gnus-summary) + +(defgroup gnus-summary-visual nil + "Highlighting and menus in the summary buffer." + :link '(custom-manual "(gnus)Summary Highlighting") + :group 'gnus-visual + :group 'gnus-summary) + +(defgroup gnus-summary-various nil + "Various summary buffer options." + :link '(custom-manual "(gnus)Various Summary Stuff") + :group 'gnus-summary) + +;; Belongs to gnus-uu.el +(defgroup gnus-extract-view nil + "Viewing extracted files." + :link '(custom-manual "(gnus)Viewing Files") + :group 'gnus-extract) + +;; Belongs to gnus-score.el (defgroup gnus-score nil "Score and kill file handling." - :group 'gnus ) + :group 'gnus) + +(defgroup gnus-score-kill nil + "Kill files." + :group 'gnus-score) + +(defgroup gnus-score-adapt nil + "Adaptive score files." + :group 'gnus-score) + +(defgroup gnus-score-files nil + "Score and kill file names." + :group 'gnus-score + :group 'gnus-files) + +(defgroup gnus-score-various nil + "Various scoring and killing options." + :group 'gnus-score) + +;; Other +(defgroup gnus-visual nil + "Options controling the visual fluff." + :group 'gnus) + +(defgroup gnus-mail-expire nil + "Expiring articles in mail backends." + :group 'gnus-mail) + +(defgroup gnus-files nil + "Files used by Gnus." + :group 'gnus) + +(defgroup gnus-server nil + "Options related to newsservers and other servers used by Gnus." + :group 'gnus) + +(defgroup gnus-message '((message custom-group)) + "Composing replies and followups in Gnus." + :group 'gnus) + +(defgroup gnus-meta nil + "Meta variables controling major portions of Gnus. +In general, modifying these variables does not take affect until Gnus +is restarted, and sometimes reloaded." + :group 'gnus) + +(defgroup gnus-various nil + "Other Gnus options." + :link '(custom-manual "(gnus)Various Various") + :group 'gnus) -(defconst gnus-version-number "5.4.1" +(defgroup gnus-exit nil + "Exiting gnus." + :link '(custom-manual "(gnus)Exiting Gnus") + :group 'gnus) + +(defconst gnus-version-number "5.4.10" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number) @@ -513,7 +668,7 @@ be set in `.emacs' instead." ;; Fontify some. (put-text-property (point-min) (point-max) 'face 'gnus-splash-face) (goto-char (point-min)) - (setq mode-line-buffer-identification gnus-version) + (setq mode-line-buffer-identification (concat " " gnus-version)) (setq gnus-simple-splash t) (set-buffer-modified-p t)) @@ -529,20 +684,14 @@ be set in `.emacs' instead." (require 'gnus-util) (require 'nnheader) -(defgroup gnus-meta nil - "Meta variables controling major portions of Gnus. -In general, modifying these variables does not take affect until Gnus -is restarted, and sometimes reloaded." - :group 'gnus) - (defcustom gnus-directory (or (getenv "SAVEDIR") "~/News/") "Directory variable from which all other Gnus file variables are derived." - :group 'gnus-meta + :group 'gnus-files :type 'directory) (defcustom gnus-default-directory nil "*Default directory for all Gnus buffers." - :group 'gnus-start + :group 'gnus-files :type '(choice (const :tag "current" nil) directory)) @@ -567,7 +716,8 @@ used to 899, you would say something along these lines: (defcustom gnus-nntpserver-file "/etc/nntpserver" "A file with only the name of the nntp server in it." - :group 'gnus-start + :group 'gnus-files + :group 'gnus-server :type 'file) ;; This function is used to check both the environment variable @@ -617,7 +767,7 @@ If you use this variable, you must set `gnus-nntp-server' to nil. There is a lot more to know about select methods and virtual servers - see the manual for details." - :group 'gnus-start + :group 'gnus-server :type 'gnus-select-method) (defcustom gnus-message-archive-method @@ -634,13 +784,10 @@ This should be a mail method. It's probably not a very effective to change this variable once you've run Gnus once. After doing that, you must edit this server from the server buffer." - :group 'gnus-start + :group 'gnus-server + :group 'gnus-message :type 'gnus-select-method) -(defgroup gnus-message '((message custom-group)) - "Interface from gnus to message mode." - :group 'gnus) - (defcustom gnus-message-archive-group nil "*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 @@ -669,14 +816,14 @@ that case, just return a fully prefixed name of the group -- "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-start + :group 'gnus-server :type '(repeat string)) (defcustom gnus-nntp-server nil "*The name of the host running the NNTP server. This variable is semi-obsolete. Use the `gnus-select-method' variable instead." - :group 'gnus-start + :group 'gnus-server :type '(choice (const :tag "disable" nil) string)) @@ -689,7 +836,7 @@ If, for instance, you want to read your mail with the nnml backend, you could set this variable: \(setq gnus-secondary-select-methods '((nnml \"\")))" -:group 'gnus-start +:group 'gnus-server :type '(repeat gnus-select-method)) (defvar gnus-backup-default-subscribed-newsgroups @@ -702,7 +849,7 @@ Should be set in paths.el, and shouldn't be touched by the user.") 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." - :group 'gnus-start + :group 'gnus-message :type '(choice (const :tag "default" nil) string)) @@ -716,7 +863,7 @@ return a string. In any case, if the string (either in the variable, in the environment variable, or returned by the function) is a file name, the contents of this file will be used as the organization." - :group 'gnus-start + :group 'gnus-message :type '(choice (const :tag "default" nil) string)) @@ -730,7 +877,7 @@ 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'." - :group 'gnus-start + :group 'gnus-server :type '(choice (const :tag "default" nil) gnus-select-method)) @@ -770,7 +917,7 @@ If the default site is too slow, try one of these: Asia: nctuccca.edu.tw /USENET/FAQ hwarang.postech.ac.kr /pub/usenet ftp.hk.super.net /mirror/faqs" - :group 'gnus-group + :group 'gnus-group-various :type '(choice directory (repeat directory))) @@ -779,7 +926,7 @@ If the default site is too slow, try one of these: If nil, ignore cross references. If t, mark articles as read in subscribed newsgroups. If neither t nor nil, mark as read in all newsgroups." - :group 'gnus-start + :group 'gnus-server :type '(choice (const :tag "off" nil) (const :tag "subscribed" t) (sexp :format "all" @@ -787,19 +934,20 @@ newsgroups." (defcustom gnus-process-mark ?# "*Process mark." - :group 'gnus-start + :group 'gnus-group-visual + :group 'gnus-summary-marks :type 'character) (defcustom gnus-asynchronous nil "*If non-nil, Gnus will supply backends with data needed for async article fetching." - :group 'gnus-start + :group 'gnus-asynchronous :type 'boolean) (defcustom gnus-large-newsgroup 200 "*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." - :group 'gnus-group + :group 'gnus-group-select :type 'integer) (defcustom gnus-use-long-file-name (not (memq system-type '(usg-unix-v xenix))) @@ -820,12 +968,13 @@ to nil while on all other systems it defaults to t." (defcustom gnus-kill-files-directory gnus-directory "*Name of the directory where kill files will be stored (default \"~/News\")." - :group 'gnus-score + :group 'gnus-score-files + :group 'gnus-score-kill :type 'directory) (defcustom gnus-save-score nil "*If non-nil, save group scoring info." - :group 'gnus-score + :group 'gnus-score-various :group 'gnus-start :type 'boolean) @@ -840,6 +989,7 @@ If a list, then the values `word' and `line' are meaningful. The former will perform adaption on individual words in the subject header while `line' will perform adaption on several headers." :group 'gnus-meta + :group 'gnus-score-adapt :type '(set (const word) (const line))) (defcustom gnus-use-cache 'passive @@ -903,7 +1053,7 @@ articles. This is not a good idea." '(gnus-summary-expire-articles) "A hook called when preparing to exit from the summary buffer. It calls `gnus-summary-expire-articles' by default." - :group 'gnus-summary + :group 'gnus-summary-exit :type 'hook) (defcustom gnus-novice-user t @@ -921,12 +1071,12 @@ And that means *anything*." (defcustom gnus-interactive-catchup t "*If non-nil, require your confirmation when catching up a group." - :group 'gnus-group + :group 'gnus-group-select :type 'boolean) (defcustom gnus-interactive-exit t "*If non-nil, require your confirmation when exiting Gnus." - :group 'gnus-group + :group 'gnus-exit :type 'boolean) (defcustom gnus-extract-address-components 'gnus-extract-address-components @@ -935,7 +1085,7 @@ Two pre-defined function exist: `gnus-extract-address-components', which is the default, quite fast, and too simplistic solution, and `mail-extract-address-components', which works much better, but is slower." - :group 'gnus-start + :group 'gnus-summary-format :type '(radio (function-item gnus-extract-address-components) (function-item mail-extract-address-components) (function :tag "Other"))) @@ -947,7 +1097,7 @@ slower." (defcustom gnus-shell-command-separator ";" "String used to separate to shell commands." - :group 'gnus-start + :group 'gnus-files :type 'string) (defcustom gnus-valid-select-methods @@ -974,7 +1124,7 @@ this method (i. e., `post', `mail', `none' or whatever) or other properties that this method has (like being respoolable). If you implement a new select method, all you should have to change is this variable. I think." - :group 'gnus-start + :group 'gnus-server :type '(repeat (group (string :tag "Name") (radio-button-choice (const :format "%v " post) (const :format "%v " mail) @@ -1005,7 +1155,7 @@ 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. If this variable is nil, screen refresh may be quicker." - :group 'gnus-start + :group 'gnus-various :type '(set (const group) (const article) (const summary) @@ -1015,8 +1165,9 @@ If this variable is nil, screen refresh may be quicker." (defcustom gnus-mode-non-string-length nil "*Max length of mode-line non-string contents. If this is nil, Gnus will take space as is needed, leaving the rest -of the modeline intact." - :group 'gnus-start +of the modeline intact. Note that the default of nil is unlikely +to be desirable; see the manual for further details." + :group 'gnus-various :type '(choice (const nil) integer)) @@ -1024,7 +1175,7 @@ of the modeline intact." "*Groups in which to automatically mark read articles as expirable. If non-nil, this should be a regexp that should match all groups in which to perform auto-expiry. This only makes sense for mail groups." - :group 'gnus-group + :group 'gnus-mail-expire :type '(choice (const nil) regexp)) @@ -1034,18 +1185,18 @@ Use with extreme caution. All groups that match this regexp will be expiring - which means that all read articles will be deleted after \(say) one week. (This only goes for mail groups and the like, of course.)" - :group 'gnus-group + :group 'gnus-mail-expire :type '(choice (const nil) regexp)) (defcustom gnus-group-uncollapsed-levels 1 "Number of group name elements to leave alone when making a short group name." - :group 'gnus-group + :group 'gnus-group-visual :type 'integer) (defcustom gnus-group-use-permanent-levels nil "*If non-nil, once you set a level, Gnus will use this level." - :group 'gnus-group + :group 'gnus-group-levels :type 'boolean) ;; Hooks. @@ -1072,22 +1223,18 @@ following hook: (cond ((string-match \"control\" gnus-newsgroup-name) (gnus-kill \"Subject\" \"rmgroup\") (gnus-expunge \"X\"))))))" - :group 'gnus-score + :group 'gnus-score-kill :options '(gnus-apply-kill-file) :type 'hook) (defcustom gnus-group-change-level-function nil "Function run when a group level is changed. It is called with three parameters -- GROUP, LEVEL and OLDLEVEL." - :group 'gnus-start + :group 'gnus-group-level :type 'function) ;;; Face thingies. -(defgroup gnus-visual nil - "Options controling the visual fluff." - :group 'gnus) - (defcustom gnus-visual '(summary-highlight group-highlight article-highlight mouse-face @@ -1099,7 +1246,18 @@ It is called with three parameters -- GROUP, LEVEL and OLDLEVEL." "Enable visual features. If `visual' is disabled, there will be no menus and few faces. Most of the visual customization options below will be ignored. Gnus will use -less space and be faster as a result." +less space and be faster as a result. + +This variable can also be a list of visual elements to switch on. For +instance, to switch off all visual things except menus, you can say: + + (setq gnus-visual '(menu)) + +Valid elements include `summary-highlight', `group-highlight', +`article-highlight', `mouse-face', `summary-menu', `group-menu', +`article-menu', `tree-highlight', `menu', `highlight', `browse-menu', +`server-menu', `page-marker', `tree-menu', `binary-menu', `pick-menu', +and `grouplens-menu'." :group 'gnus-meta :group 'gnus-visual :type '(set (const summary-highlight) @@ -1406,7 +1564,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") gnus-score-find-trace gnus-score-file-name) ("gnus-cus" :interactive t gnus-group-customize gnus-score-customize) ("gnus-topic" :interactive t gnus-topic-mode) - ("gnus-topic" gnus-topic-remove-group) + ("gnus-topic" gnus-topic-remove-group gnus-topic-set-parameters) ("gnus-salt" :interactive t gnus-pick-mode gnus-binary-mode) ("gnus-uu" (gnus-uu-extract-map keymap) (gnus-uu-mark-map keymap)) ("gnus-uu" :interactive t @@ -1437,7 +1595,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") ("gnus-gl" bbb-login bbb-logout bbb-grouplens-group-p gnus-grouplens-mode) ("smiley" :interactive t gnus-smiley-display) - ("gnus-win" gnus-configure-windows) + ("gnus-win" gnus-configure-windows gnus-add-configuration) ("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 @@ -1545,7 +1703,7 @@ possible. This restriction may disappear in later versions of Gnus." :type 'string - :group 'gnus-summary) + :group 'gnus-summary-format) ;;; ;;; Skeleton keymaps @@ -1557,12 +1715,18 @@ This restriction may disappear in later versions of Gnus." (while keys (define-key keymap (pop keys) 'undefined)))) -(defvar gnus-article-mode-map (make-keymap)) -(gnus-suppress-keymap gnus-article-mode-map) -(defvar gnus-summary-mode-map (make-keymap)) -(gnus-suppress-keymap gnus-summary-mode-map) -(defvar gnus-group-mode-map (make-keymap)) -(gnus-suppress-keymap gnus-group-mode-map) +(defvar gnus-article-mode-map + (let ((keymap (make-keymap))) + (gnus-suppress-keymap keymap) + keymap)) +(defvar gnus-summary-mode-map + (let ((keymap (make-keymap))) + (gnus-suppress-keymap keymap) + keymap)) +(defvar gnus-group-mode-map + (let ((keymap (make-keymap))) + (gnus-suppress-keymap keymap) + keymap)) @@ -2144,7 +2308,8 @@ Returns the number of articles marked as read." (defcustom gnus-kill-file-name "KILL" "Suffix of the kill files." - :group 'gnus-score + :group 'gnus-score-kill + :group 'gnus-score-files :type 'string) (defun gnus-newsgroup-kill-file (newsgroup) @@ -2187,14 +2352,21 @@ If NEWSGROUP is nil, return the global kill file name instead." ;; "hello", and the select method is ("hello" (my-var "something")) ;; in the group "alt.alt", this will result in a new virtual server ;; called "hello+alt.alt". - (let ((entry - (gnus-copy-sequence - (if (gnus-server-equal method gnus-select-method) gnus-select-method - (cdr (assoc (car method) gnus-server-alist)))))) - (if (not entry) - method - (setcar (cdr entry) (concat (nth 1 entry) "+" group)) - (nconc entry (cdr method))))) + (if (or (not (gnus-similar-server-opened method)) + (not (cddr method))) + method + `(,(car method) ,(concat (cadr method) "+" group) + (,(intern (format "%s-address" (car method))) ,(cadr method)) + ,@(cddr method)))) + +(defun gnus-similar-server-opened (method) + (let ((opened gnus-opened-servers)) + (while (and method opened) + (when (and (equal (cadr method) (cadaar opened)) + (not (equal method (caar opened)))) + (setq method nil)) + (pop opened)) + (not method))) (defun gnus-server-status (method) "Return the status of METHOD." @@ -2224,7 +2396,7 @@ If NEWSGROUP is nil, return the global kill file name instead." (setq method (cond ((stringp method) (gnus-server-to-method method)) - ((stringp (car method)) + ((stringp (cadr method)) (gnus-server-extend-method group method)) (t method))) @@ -2256,7 +2428,7 @@ GROUP can either be a string (a group name) or a select method." (setq valids (cdr valids))) outs)) -(defun gnus-read-group (prompt) +(defun gnus-read-group (prompt &optional default) "Prompt the user for a group name. Disallow illegal group names." (let ((prefix "") @@ -2265,7 +2437,8 @@ Disallow illegal group names." (when (string-match "[: `'\"/]\\|^$" (setq group (read-string (concat prefix prompt) - "" 'gnus-group-history))) + (cons (or default "") 0) + 'gnus-group-history))) (setq prefix (format "Illegal group name: \"%s\". " group) group nil))) group))