*** empty log message ***
[gnus] / lisp / gnus-load.el
1 ;;; gnus-load.el --- various Gnus variables
2 ;; Copyright (C) 1996 Free Software Foundation, Inc.
3
4 ;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
5 ;; Keywords: news
6
7 ;; This file is part of GNU Emacs.
8
9 ;; GNU Emacs is free software; you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation; either version 2, or (at your option)
12 ;; any later version.
13
14 ;; GNU Emacs is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 ;; GNU General Public License for more details.
18
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
21 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
22 ;; Boston, MA 02111-1307, USA.
23
24 ;;; Commentary:
25
26 ;;; Code:
27
28 (require 'custom)
29 (require 'gnus-util)
30 (require 'nnheader)
31
32 (defcustom gnus-directory (or (getenv "SAVEDIR") "~/News/")
33   "*Directory variable from which all other Gnus file variables are derived."
34   :group 'gnus-start
35   :type 'directory)
36
37 (defcustom gnus-default-directory nil
38   "*Default directory for all Gnus buffers."
39   :group 'gnus-start
40   :type 'directory)
41
42 ;; Site dependent variables.  These variables should be defined in
43 ;; paths.el.
44
45 (defvar gnus-default-nntp-server nil
46   "Specify a default NNTP server.
47 This variable should be defined in paths.el, and should never be set
48 by the user.
49 If you want to change servers, you should use `gnus-select-method'.
50 See the documentation to that variable.")
51
52 ;; Don't touch this variable.
53 (defvar gnus-nntp-service "nntp"
54   "*NNTP service name (\"nntp\" or 119).
55 This is an obsolete variable, which is scarcely used.  If you use an
56 nntp server for your newsgroup and want to change the port number
57 used to 899, you would say something along these lines:
58
59  (setq gnus-select-method '(nntp \"my.nntp.server\" (nntp-port-number 899)))")
60
61 (defvar gnus-nntpserver-file "/etc/nntpserver"
62   "*A file with only the name of the nntp server in it.")
63
64 ;; This function is used to check both the environment variable
65 ;; NNTPSERVER and the /etc/nntpserver file to see whether one can find
66 ;; an nntp server name default.
67 (defun gnus-getenv-nntpserver ()
68   (or (getenv "NNTPSERVER")
69       (and (file-readable-p gnus-nntpserver-file)
70            (save-excursion
71              (set-buffer (get-buffer-create " *gnus nntp*"))
72              (buffer-disable-undo (current-buffer))
73              (insert-file-contents gnus-nntpserver-file)
74              (let ((name (buffer-string)))
75                (prog1
76                    (if (string-match "^[ \t\n]*$" name)
77                        nil
78                      name)
79                  (kill-buffer (current-buffer))))))))
80
81 (defcustom gnus-select-method
82   (nconc
83    (list 'nntp (or (condition-case ()
84                        (gnus-getenv-nntpserver)
85                      (error nil))
86                    (if (and gnus-default-nntp-server
87                             (not (string= gnus-default-nntp-server "")))
88                        gnus-default-nntp-server)
89                    (system-name)))
90    (if (or (null gnus-nntp-service)
91            (equal gnus-nntp-service "nntp"))
92        nil
93      (list gnus-nntp-service)))
94   "*Default method for selecting a newsgroup.
95 This variable should be a list, where the first element is how the
96 news is to be fetched, the second is the address.
97
98 For instance, if you want to get your news via NNTP from
99 \"flab.flab.edu\", you could say:
100
101 (setq gnus-select-method '(nntp \"flab.flab.edu\"))
102
103 If you want to use your local spool, say:
104
105 (setq gnus-select-method (list 'nnspool (system-name)))
106
107 If you use this variable, you must set `gnus-nntp-server' to nil.
108
109 There is a lot more to know about select methods and virtual servers -
110 see the manual for details.")
111
112 (defvar gnus-message-archive-method 
113   `(nnfolder
114     "archive"
115     (nnfolder-directory ,(nnheader-concat message-directory "archive"))
116     (nnfolder-active-file 
117      ,(nnheader-concat message-directory "archive/active"))
118     (nnfolder-get-new-mail nil)
119     (nnfolder-inhibit-expiry t))
120   "*Method used for archiving messages you've sent.
121 This should be a mail method.
122
123 It's probably not a very effective to change this variable once you've
124 run Gnus once.  After doing that, you must edit this server from the
125 server buffer.")
126
127 (defvar gnus-message-archive-group nil
128   "*Name of the group in which to save the messages you've written.
129 This can either be a string, a list of strings; or an alist
130 of regexps/functions/forms to be evaluated to return a string (or a list
131 of strings).  The functions are called with the name of the current
132 group (or nil) as a parameter.
133
134 If you want to save your mail in one group and the news articles you
135 write in another group, you could say something like:
136
137  \(setq gnus-message-archive-group 
138         '((if (message-news-p)
139               \"misc-news\" 
140             \"misc-mail\")))
141
142 Normally the group names returned by this variable should be
143 unprefixed -- which implicitly means \"store on the archive server\".
144 However, you may wish to store the message on some other server.  In
145 that case, just return a fully prefixed name of the group --
146 \"nnml+private:mail.misc\", for instance.")
147
148 (defvar gnus-secondary-servers nil
149   "*List of NNTP servers that the user can choose between interactively.
150 To make Gnus query you for a server, you have to give `gnus' a
151 non-numeric prefix - `C-u M-x gnus', in short.")
152
153 (defvar gnus-nntp-server nil
154   "*The name of the host running the NNTP server.
155 This variable is semi-obsolete.  Use the `gnus-select-method'
156 variable instead.")
157
158 (defvar gnus-secondary-select-methods nil
159   "*A list of secondary methods that will be used for reading news.
160 This is a list where each element is a complete select method (see
161 `gnus-select-method').
162
163 If, for instance, you want to read your mail with the nnml backend,
164 you could set this variable:
165
166 (setq gnus-secondary-select-methods '((nnml \"\")))")
167
168 (defvar gnus-backup-default-subscribed-newsgroups
169   '("news.announce.newusers" "news.groups.questions" "gnu.emacs.gnus")
170   "Default default new newsgroups the first time Gnus is run.
171 Should be set in paths.el, and shouldn't be touched by the user.")
172
173 (defvar gnus-local-domain nil
174   "Local domain name without a host name.
175 The DOMAINNAME environment variable is used instead if it is defined.
176 If the `system-name' function returns the full Internet name, there is
177 no need to set this variable.")
178
179 (defvar gnus-local-organization nil
180   "String with a description of what organization (if any) the user belongs to.
181 The ORGANIZATION environment variable is used instead if it is defined.
182 If this variable contains a function, this function will be called
183 with the current newsgroup name as the argument.  The function should
184 return a string.
185
186 In any case, if the string (either in the variable, in the environment
187 variable, or returned by the function) is a file name, the contents of
188 this file will be used as the organization.")
189
190 ;; Customization variables
191
192 (defvar gnus-refer-article-method nil
193   "*Preferred method for fetching an article by Message-ID.
194 If you are reading news from the local spool (with nnspool), fetching
195 articles by Message-ID is painfully slow.  By setting this method to an
196 nntp method, you might get acceptable results.
197
198 The value of this variable must be a valid select method as discussed
199 in the documentation of `gnus-select-method'.")
200
201 (defvar gnus-group-faq-directory
202   '("/ftp@mirrors.aol.com:/pub/rtfm/usenet/"
203     "/ftp@sunsite.auc.dk:/pub/usenet/"
204     "/ftp@sunsite.doc.ic.ac.uk:/pub/usenet/news-faqs/"
205     "/ftp@src.doc.ic.ac.uk:/usenet/news-FAQS/"
206     "/ftp@ftp.seas.gwu.edu:/pub/rtfm/"
207     "/ftp@rtfm.mit.edu:/pub/usenet/"
208     "/ftp@ftp.uni-paderborn.de:/pub/FAQ/"
209     "/ftp@ftp.sunet.se:/pub/usenet/"
210     "/ftp@nctuccca.edu.tw:/USENET/FAQ/"
211     "/ftp@hwarang.postech.ac.kr:/pub/usenet/"
212     "/ftp@ftp.hk.super.net:/mirror/faqs/")
213   "*Directory where the group FAQs are stored.
214 This will most commonly be on a remote machine, and the file will be
215 fetched by ange-ftp.
216
217 This variable can also be a list of directories.  In that case, the
218 first element in the list will be used by default.  The others can
219 be used when being prompted for a site.
220
221 Note that Gnus uses an aol machine as the default directory.  If this
222 feels fundamentally unclean, just think of it as a way to finally get
223 something of value back from them.
224
225 If the default site is too slow, try one of these:
226
227    North America: mirrors.aol.com                /pub/rtfm/usenet
228                   ftp.seas.gwu.edu               /pub/rtfm
229                   rtfm.mit.edu                   /pub/usenet
230    Europe:        ftp.uni-paderborn.de           /pub/FAQ
231                   src.doc.ic.ac.uk               /usenet/news-FAQS
232                   ftp.sunet.se                   /pub/usenet
233                   sunsite.auc.dk                 /pub/usenet
234    Asia:          nctuccca.edu.tw                /USENET/FAQ
235                   hwarang.postech.ac.kr          /pub/usenet
236                   ftp.hk.super.net               /mirror/faqs")
237
238 (defvar gnus-use-cross-reference t
239   "*Non-nil means that cross referenced articles will be marked as read.
240 If nil, ignore cross references.  If t, mark articles as read in
241 subscribed newsgroups.  If neither t nor nil, mark as read in all
242 newsgroups.")
243
244 (defvar gnus-process-mark ?#
245   "*Process mark.")
246
247 (defvar gnus-asynchronous nil
248   "*If non-nil, Gnus will supply backends with data needed for async article fetching.")
249
250 (defvar gnus-large-newsgroup 200
251   "*The number of articles which indicates a large newsgroup.
252 If the number of articles in a newsgroup is greater than this value,
253 confirmation is required for selecting the newsgroup.")
254
255 (defvar gnus-use-long-file-name (not (memq system-type '(usg-unix-v xenix)))
256   "*Non-nil means that the default name of a file to save articles in is the group name.
257 If it's nil, the directory form of the group name is used instead.
258
259 If this variable is a list, and the list contains the element
260 `not-score', long file names will not be used for score files; if it
261 contains the element `not-save', long file names will not be used for
262 saving; and if it contains the element `not-kill', long file names
263 will not be used for kill files.
264
265 Note that the default for this variable varies according to what system
266 type you're using.  On `usg-unix-v' and `xenix' this variable defaults
267 to nil while on all other systems it defaults to t.")
268
269 (defvar gnus-kill-files-directory gnus-directory
270   "*Name of the directory where kill files will be stored (default \"~/News\").")
271
272 (defvar gnus-save-score nil
273   "*If non-nil, save group scoring info.")
274
275 (defvar gnus-use-undo t
276   "*If non-nil, allow undoing in Gnus group mode buffers.")
277
278 (defvar gnus-use-adaptive-scoring nil
279   "*If non-nil, use some adaptive scoring scheme.
280 If a list, then the values `word' and `line' are meaningful.  The
281 former will perform adaption on individual words in the subject
282 header while `line' will perform adaption on several headers.")
283
284 (defvar gnus-use-cache 'passive
285   "*If nil, Gnus will ignore the article cache.
286 If `passive', it will allow entering (and reading) articles
287 explicitly entered into the cache.  If anything else, use the
288 cache to the full extent of the law.")
289
290 (defvar gnus-use-trees nil
291   "*If non-nil, display a thread tree buffer.")
292
293 (defvar gnus-use-grouplens nil
294   "*If non-nil, use GroupLens ratings.")
295
296 (defvar gnus-keep-backlog nil
297   "*If non-nil, Gnus will keep read articles for later re-retrieval.
298 If it is a number N, then Gnus will only keep the last N articles
299 read.  If it is neither nil nor a number, Gnus will keep all read
300 articles.  This is not a good idea.")
301
302 (defvar gnus-use-nocem nil
303   "*If non-nil, Gnus will read NoCeM cancel messages.")
304
305 (defvar gnus-suppress-duplicates nil
306   "*If non-nil, Gnus will mark duplicate copies of the same article as read.")
307
308 (defvar gnus-use-demon nil
309   "If non-nil, Gnus might use some demons.")
310
311 (defvar gnus-use-scoring t
312   "*If non-nil, enable scoring.")
313
314 (defvar gnus-use-picons nil
315   "*If non-nil, display picons.")
316
317 (defvar gnus-summary-prepare-exit-hook nil
318   "*A hook called when preparing to exit from the summary buffer.
319 It calls `gnus-summary-expire-articles' by default.")
320 (add-hook 'gnus-summary-prepare-exit-hook 'gnus-summary-expire-articles)
321
322 (defvar gnus-novice-user t
323   "*Non-nil means that you are a usenet novice.
324 If non-nil, verbose messages may be displayed and confirmations may be
325 required.")
326
327 (defvar gnus-expert-user nil
328   "*Non-nil means that you will never be asked for confirmation about anything.
329 And that means *anything*.")
330
331 (defvar gnus-interactive-catchup t
332   "*If non-nil, require your confirmation when catching up a group.")
333
334 (defvar gnus-interactive-exit t
335   "*If non-nil, require your confirmation when exiting Gnus.")
336
337 (defvar gnus-extract-address-components 'gnus-extract-address-components
338   "*Function for extracting address components from a From header.
339 Two pre-defined function exist: `gnus-extract-address-components',
340 which is the default, quite fast, and too simplistic solution, and
341 `mail-extract-address-components', which works much better, but is
342 slower.")
343
344 (defvar gnus-carpal nil
345   "*If non-nil, display clickable icons.")
346
347 (defvar gnus-shell-command-separator ";"
348   "String used to separate to shell commands.")
349
350 (defvar gnus-valid-select-methods
351   '(("nntp" post address prompt-address)
352     ("nnspool" post address)
353     ("nnvirtual" post-mail virtual prompt-address)
354     ("nnmbox" mail respool address)
355     ("nnml" mail respool address)
356     ("nnmh" mail respool address)
357     ("nndir" post-mail prompt-address)
358     ("nneething" none address prompt-address)
359     ("nndoc" none address prompt-address)
360     ("nnbabyl" mail address respool)
361     ("nnkiboze" post virtual)
362     ("nnsoup" post-mail address)
363     ("nndraft" post-mail)
364     ("nnfolder" mail respool address)
365     ("nngateway" none address prompt-address)
366     ("nnweb" none))
367   "An alist of valid select methods.
368 The first element of each list lists should be a string with the name
369 of the select method.  The other elements may be the category of
370 this method (i. e., `post', `mail', `none' or whatever) or other
371 properties that this method has (like being respoolable).
372 If you implement a new select method, all you should have to change is
373 this variable.  I think.")
374
375 (defvar gnus-updated-mode-lines '(group article summary tree)
376   "*List of buffers that should update their mode lines.
377 The list may contain the symbols `group', `article' and `summary'.  If
378 the corresponding symbol is present, Gnus will keep that mode line
379 updated with information that may be pertinent.
380 If this variable is nil, screen refresh may be quicker.")
381
382 ;; Added by Keinonen Kari <kk85613@cs.tut.fi>.
383 (defvar gnus-mode-non-string-length nil
384   "*Max length of mode-line non-string contents.
385 If this is nil, Gnus will take space as is needed, leaving the rest
386 of the modeline intact.")
387
388 (defvar gnus-auto-expirable-newsgroups nil
389   "*Groups in which to automatically mark read articles as expirable.
390 If non-nil, this should be a regexp that should match all groups in
391 which to perform auto-expiry.  This only makes sense for mail groups.")
392
393 (defvar gnus-total-expirable-newsgroups nil
394   "*Groups in which to perform expiry of all read articles.
395 Use with extreme caution.  All groups that match this regexp will be
396 expiring - which means that all read articles will be deleted after
397 (say) one week.  (This only goes for mail groups and the like, of
398 course.)")
399
400 (defvar gnus-group-uncollapsed-levels 1
401   "Number of group name elements to leave alone when making a short group name.")
402
403 (defvar gnus-group-use-permanent-levels nil
404   "*If non-nil, once you set a level, Gnus will use this level.")
405
406 ;; Hooks.
407
408 (defvar gnus-load-hook nil
409   "*A hook run while Gnus is loaded.")
410
411 (defvar gnus-apply-kill-hook '(gnus-apply-kill-file)
412   "*A hook called to apply kill files to a group.
413 This hook is intended to apply a kill file to the selected newsgroup.
414 The function `gnus-apply-kill-file' is called by default.
415
416 Since a general kill file is too heavy to use only for a few
417 newsgroups, I recommend you to use a lighter hook function.  For
418 example, if you'd like to apply a kill file to articles which contains
419 a string `rmgroup' in subject in newsgroup `control', you can use the
420 following hook:
421
422  (setq gnus-apply-kill-hook
423       (list
424         (lambda ()
425           (cond ((string-match \"control\" gnus-newsgroup-name)
426                  (gnus-kill \"Subject\" \"rmgroup\")
427                  (gnus-expunge \"X\"))))))")
428
429 (defvar gnus-group-change-level-function nil
430   "Function run when a group level is changed.
431 It is called with three parameters -- GROUP, LEVEL and OLDLEVEL.")
432
433 ;;; Face thingies.
434
435 ;; The following is just helper functions and data, not meant to be set
436 ;; by the user.
437 (defun gnus-make-face (color)
438   ;; Create entry for face with COLOR.
439   (custom-face-lookup color nil nil nil nil nil))
440
441 (defvar gnus-face-light-name-list
442   '("light blue" "light cyan" "light yellow" "light pink"
443     "pale green" "beige" "orange" "magenta" "violet" "medium purple"
444     "turquoise"))
445
446 (defvar gnus-face-dark-name-list
447   '("MidnightBlue" "firebrick" "dark green" "OrangeRed" 
448     "dark khaki" "dark violet" "SteelBlue4"))
449 ; CornflowerBlue SeaGreen OrangeRed SteelBlue4 DeepPink3
450 ; DarkOlviveGreen4 
451
452 (defvar gnus-visual 
453   '(summary-highlight group-highlight article-highlight 
454                       mouse-face
455                       summary-menu group-menu article-menu
456                       tree-highlight menu highlight
457                       browse-menu server-menu
458                       page-marker tree-menu binary-menu pick-menu
459                       grouplens-menu)
460   "Enable visual features.
461 If `visual' is disabled, there will be no menus and few faces.  Most of
462 the visual customization options below will be ignored.  Gnus will use
463 less space and be faster as a result.")
464
465 (defvar gnus-mouse-face
466   (condition-case ()
467       (if (gnus-visual-p 'mouse-face 'highlight)
468           (if (boundp 'gnus-mouse-face)
469               (or gnus-mouse-face 'highlight)
470             'highlight)
471         'default)
472     (error 'highlight))
473   "Face used for group or summary buffer mouse highlighting.
474 The line beneath the mouse pointer will be highlighted with this
475 face.")
476
477 (defvar gnus-article-display-hook
478   (if (and (string-match "XEmacs" emacs-version)
479            (featurep 'xface))
480       '(gnus-article-hide-headers-if-wanted
481         gnus-article-hide-boring-headers
482         gnus-article-treat-overstrike
483         gnus-article-maybe-highlight
484         gnus-article-display-x-face)
485     '(gnus-article-hide-headers-if-wanted
486       gnus-article-hide-boring-headers
487       gnus-article-treat-overstrike
488       gnus-article-maybe-highlight))
489   "Controls how the article buffer will look.
490
491 If you leave the list empty, the article will appear exactly as it is
492 stored on the disk.  The list entries will hide or highlight various
493 parts of the article, making it easier to find the information you
494 want.")
495
496
497
498 \f
499 ;;; Internal variables
500
501 (defvar gnus-group-get-parameter-function 'gnus-group-get-parameter)
502 (defvar gnus-original-article-buffer " *Original Article*")
503 (defvar gnus-newsgroup-name nil)
504
505 (defvar gnus-current-select-method nil
506   "The current method for selecting a newsgroup.")
507
508 (defvar gnus-tree-buffer "*Tree*"
509   "Buffer where Gnus thread trees are displayed.")
510
511 ;; Dummy variable.
512 (defvar gnus-use-generic-from nil)
513
514 ;; Variable holding the user answers to all method prompts.
515 (defvar gnus-method-history nil)
516
517 ;; Variable holding the user answers to all group prompts.
518 (defvar gnus-group-history nil)
519
520 (defvar gnus-server-alist nil
521   "List of available servers.")
522
523 (defvar gnus-predefined-server-alist
524   `(("cache"
525      (nnspool "cache"
526               (nnspool-spool-directory "~/News/cache/")
527               (nnspool-nov-directory "~/News/cache/")
528               (nnspool-active-file "~/News/cache/active"))))
529   "List of predefined (convenience) servers.")
530
531 (defvar gnus-topic-indentation "") ;; Obsolete variable.
532
533 (defconst gnus-article-mark-lists
534   '((marked . tick) (replied . reply)
535     (expirable . expire) (killed . killed)
536     (bookmarks . bookmark) (dormant . dormant)
537     (scored . score) (saved . save)
538     (cached . cache)))
539
540 (defvar gnus-headers-retrieved-by nil)
541 (defvar gnus-article-reply nil)
542 (defvar gnus-override-method nil)
543 (defvar gnus-article-check-size nil)
544 (defvar gnus-opened-servers nil)
545
546 (defvar gnus-current-kill-article nil)
547
548 (defvar gnus-have-read-active-file nil)
549
550 (defconst gnus-maintainer
551   "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
552   "The mail address of the Gnus maintainers.")
553
554 (defvar gnus-info-nodes
555   '((gnus-group-mode "(gnus)The Group Buffer")
556     (gnus-summary-mode "(gnus)The Summary Buffer")
557     (gnus-article-mode "(gnus)The Article Buffer")
558     (mime/viewer-mode "(gnus)The Article Buffer")
559     (gnus-server-mode "(gnus)The Server Buffer")
560     (gnus-browse-mode "(gnus)Browse Foreign Server")
561     (gnus-tree-mode "(gnus)Tree Display"))
562   "Alist of major modes and related Info nodes.")
563
564 (defvar gnus-group-buffer "*Group*")
565 (defvar gnus-summary-buffer "*Summary*")
566 (defvar gnus-article-buffer "*Article*")
567 (defvar gnus-server-buffer "*Server*")
568
569 (defvar gnus-buffer-list nil
570   "Gnus buffers that should be killed on exit.")
571
572 (defvar gnus-slave nil
573   "Whether this Gnus is a slave or not.")
574
575 (defvar gnus-variable-list
576   '(gnus-newsrc-options gnus-newsrc-options-n
577     gnus-newsrc-last-checked-date
578     gnus-newsrc-alist gnus-server-alist
579     gnus-killed-list gnus-zombie-list
580     gnus-topic-topology gnus-topic-alist
581     gnus-format-specs)
582   "Gnus variables saved in the quick startup file.")
583
584 (defvar gnus-newsrc-alist nil
585   "Assoc list of read articles.
586 gnus-newsrc-hashtb should be kept so that both hold the same information.")
587
588 (defvar gnus-newsrc-hashtb nil
589   "Hashtable of gnus-newsrc-alist.")
590
591 (defvar gnus-killed-list nil
592   "List of killed newsgroups.")
593
594 (defvar gnus-killed-hashtb nil
595   "Hash table equivalent of gnus-killed-list.")
596
597 (defvar gnus-zombie-list nil
598   "List of almost dead newsgroups.")
599
600 (defvar gnus-description-hashtb nil
601   "Descriptions of newsgroups.")
602
603 (defvar gnus-list-of-killed-groups nil
604   "List of newsgroups that have recently been killed by the user.")
605
606 (defvar gnus-active-hashtb nil
607   "Hashtable of active articles.")
608
609 (defvar gnus-moderated-list nil
610   "List of moderated newsgroups.")
611
612 ;; Save window configuration.
613 (defvar gnus-prev-winconf nil)
614
615 (defvar gnus-reffed-article-number nil)
616
617 ;;; Let the byte-compiler know that we know about this variable.
618 (defvar rmail-default-rmail-file)
619
620 (defvar gnus-dead-summary nil)
621
622 ;;; End of variables.
623
624 ;; Define some autoload functions Gnus might use.
625 (eval-and-compile
626
627   ;; This little mapcar goes through the list below and marks the
628   ;; symbols in question as autoloaded functions.
629   (mapcar
630    (lambda (package)
631      (let ((interactive (nth 1 (memq ':interactive package))))
632        (mapcar
633         (lambda (function)
634           (let (keymap)
635             (when (consp function)
636               (setq keymap (car (memq 'keymap function)))
637               (setq function (car function)))
638             (autoload function (car package) nil interactive keymap)))
639         (if (eq (nth 1 package) ':interactive)
640             (cdddr package)
641           (cdr package)))))
642    '(("metamail" metamail-buffer)
643      ("info" Info-goto-node)
644      ("hexl" hexl-hex-string-to-integer)
645      ("pp" pp pp-to-string pp-eval-expression)
646      ("mail-extr" mail-extract-address-components)
647      ("nnmail" nnmail-split-fancy nnmail-article-group nnmail-date-to-time)
648      ("nnvirtual" nnvirtual-catchup-group nnvirtual-convert-headers)
649      ("timezone" timezone-make-date-arpa-standard timezone-fix-time
650       timezone-make-sortable-date timezone-make-time-string)
651      ("rmailout" rmail-output)
652      ("rmail" rmail-insert-rmail-file-header rmail-count-new-messages
653       rmail-show-message)
654      ("gnus-soup" :interactive t
655       gnus-group-brew-soup gnus-brew-soup gnus-soup-add-article
656       gnus-soup-send-replies gnus-soup-save-areas gnus-soup-pack-packet)
657      ("nnsoup" nnsoup-pack-replies)
658      ("score-mode" :interactive t gnus-score-mode)
659      ("gnus-mh" gnus-mh-mail-setup gnus-summary-save-article-folder
660       gnus-Folder-save-name gnus-folder-save-name)
661      ("gnus-mh" :interactive t gnus-summary-save-in-folder)
662      ("gnus-demon" gnus-demon-add-nocem gnus-demon-add-scanmail
663       gnus-demon-add-disconnection gnus-demon-add-handler
664       gnus-demon-remove-handler)
665      ("gnus-demon" :interactive t
666       gnus-demon-init gnus-demon-cancel)
667      ("gnus-salt" gnus-highlight-selected-tree gnus-possibly-generate-tree
668       gnus-tree-open gnus-tree-close gnus-carpal-setup-buffer)
669      ("gnus-nocem" gnus-nocem-scan-groups gnus-nocem-close
670       gnus-nocem-unwanted-article-p)
671      ("gnus-srvr" gnus-enter-server-buffer gnus-server-set-info)
672      ("gnus-srvr" gnus-browse-foreign-server)
673      ("gnus-cite" :interactive t
674       gnus-article-highlight-citation gnus-article-hide-citation-maybe
675       gnus-article-hide-citation gnus-article-fill-cited-article
676       gnus-article-hide-citation-in-followups)
677      ("gnus-kill" gnus-kill gnus-apply-kill-file-internal
678       gnus-kill-file-edit-file gnus-kill-file-raise-followups-to-author
679       gnus-execute gnus-expunge)
680      ("gnus-cache" gnus-cache-possibly-enter-article gnus-cache-save-buffers
681       gnus-cache-possibly-remove-articles gnus-cache-request-article
682       gnus-cache-retrieve-headers gnus-cache-possibly-alter-active
683       gnus-cache-enter-remove-article gnus-cached-article-p
684       gnus-cache-open gnus-cache-close gnus-cache-update-article)
685      ("gnus-cache" :interactive t gnus-jog-cache gnus-cache-enter-article
686       gnus-cache-remove-article gnus-summary-insert-cached-articles)
687      ("gnus-score" :interactive t
688       gnus-summary-increase-score gnus-summary-lower-score
689       gnus-score-flush-cache gnus-score-close
690       gnus-score-raise-same-subject-and-select
691       gnus-score-raise-same-subject gnus-score-default
692       gnus-score-raise-thread gnus-score-lower-same-subject-and-select
693       gnus-score-lower-same-subject gnus-score-lower-thread
694       gnus-possibly-score-headers gnus-summary-raise-score 
695       gnus-summary-set-score gnus-summary-current-score
696       gnus-score-followup-article)
697      ("gnus-score"
698       (gnus-summary-score-map keymap) gnus-score-save gnus-score-headers
699       gnus-current-score-file-nondirectory gnus-score-adaptive
700       gnus-score-find-trace gnus-score-file-name)
701      ("gnus-topic" :interactive t gnus-topic-mode)
702      ("gnus-topic" gnus-topic-remove-group)
703      ("gnus-salt" :interactive t gnus-pick-mode gnus-binary-mode)
704      ("gnus-uu" (gnus-uu-extract-map keymap) (gnus-uu-mark-map keymap))
705      ("gnus-uu" :interactive t
706       gnus-uu-digest-mail-forward gnus-uu-digest-post-forward
707       gnus-uu-mark-series gnus-uu-mark-region gnus-uu-mark-buffer
708       gnus-uu-mark-by-regexp gnus-uu-mark-all
709       gnus-uu-mark-sparse gnus-uu-mark-thread gnus-uu-decode-uu
710       gnus-uu-decode-uu-and-save gnus-uu-decode-unshar
711       gnus-uu-decode-unshar-and-save gnus-uu-decode-save
712       gnus-uu-decode-binhex gnus-uu-decode-uu-view
713       gnus-uu-decode-uu-and-save-view gnus-uu-decode-unshar-view
714       gnus-uu-decode-unshar-and-save-view gnus-uu-decode-save-view
715       gnus-uu-decode-binhex-view)
716      ("gnus-msg" (gnus-summary-send-map keymap)
717       gnus-mail-yank-original gnus-mail-send-and-exit
718       gnus-article-mail gnus-new-mail gnus-mail-reply
719       gnus-copy-article-buffer gnus-extended-version)
720      ("gnus-msg" :interactive t
721       gnus-group-post-news gnus-group-mail gnus-summary-post-news
722       gnus-summary-followup gnus-summary-followup-with-original
723       gnus-summary-cancel-article gnus-summary-supersede-article
724       gnus-post-news gnus-inews-news 
725       gnus-summary-reply gnus-summary-reply-with-original
726       gnus-summary-mail-forward gnus-summary-mail-other-window
727       gnus-bug)
728      ("gnus-picon" :interactive t gnus-article-display-picons
729       gnus-group-display-picons gnus-picons-article-display-x-face
730       gnus-picons-display-x-face)
731      ("gnus-gl" bbb-login bbb-logout bbb-grouplens-group-p 
732       gnus-grouplens-mode)
733      ("smiley" :interactive t gnus-smiley-display)
734      ("gnus" gnus-add-current-to-buffer-list gnus-add-shutdown)
735      ("gnus-win" gnus-configure-windows)
736      ("gnus-sum" gnus-summary-insert-line gnus-summary-read-group
737       gnus-list-of-unread-articles gnus-list-of-read-articles
738       gnus-offer-save-summaries gnus-make-thread-indent-array
739       gnus-summary-exit gnus-update-read-articles)
740      ("gnus-group" gnus-group-insert-group-line gnus-group-quit
741       gnus-group-list-groups gnus-group-first-unread-group
742       gnus-group-set-mode-line gnus-group-set-info gnus-group-save-newsrc
743       gnus-group-setup-buffer gnus-group-get-new-news
744       gnus-group-make-help-group gnus-group-update-group)
745      ("gnus-bcklg" gnus-backlog-request-article gnus-backlog-enter-article
746       gnus-backlog-remove-article) 
747      ("gnus-art" gnus-article-read-summary-keys gnus-article-save
748       gnus-article-prepare gnus-article-set-window-start
749       gnus-article-show-all-headers gnus-article-next-page
750       gnus-article-prev-page gnus-request-article-this-buffer
751       gnus-article-mode gnus-article-setup-buffer gnus-narrow-to-page)
752      ("gnus-art" :interactive t
753       gnus-article-hide-headers gnus-article-hide-boring-headers
754       gnus-article-treat-overstrike gnus-article-word-wrap
755       gnus-article-remove-cr gnus-article-remove-trailing-blank-lines
756       gnus-article-display-x-face gnus-article-de-quoted-unreadable
757       gnus-article-mime-decode-quoted-printable gnus-article-hide-pgp
758       gnus-article-hide-pem gnus-article-hide-signature
759       gnus-article-strip-leading-blank-lines gnus-article-date-local
760       gnus-article-date-original gnus-article-date-lapsed
761       gnus-decode-rfc1522 gnus-article-show-all-headers
762       gnus-article-edit-mode gnus-article-edit-article
763       gnus-article-edit-done)
764      ("gnus-int" gnus-request-type)
765      ("gnus-start" gnus-newsrc-parse-options gnus-1 gnus-no-server-1
766       gnus-dribble-enter)
767      ("gnus-dup" gnus-dup-suppress-articles gnus-dup-enter-articles)
768      ("gnus-range" gnus-copy-sequence)
769      ("gnus-vm" gnus-vm-mail-setup)
770      ("gnus-eform" gnus-edit-form)
771      ("gnus-move" :interactive t
772       gnus-group-move-group-to-server gnus-change-server)
773      ("gnus-logic" gnus-score-advanced)
774      ("gnus-undo" gnus-undo-mode gnus-undo-register 
775       gnus-dup-unsuppress-article)
776      ("gnus-async" gnus-async-request-fetched-article gnus-async-prefetch-next
777       gnus-async-prefetch-article gnus-async-prefetch-remove-group)
778      ("article" article-decode-rfc1522)
779      ("gnus-vm" :interactive t gnus-summary-save-in-vm
780       gnus-summary-save-article-vm))))
781
782 ;;; gnus-sum.el thingies
783
784
785 (defvar gnus-summary-line-format "%U\%R\%z\%I\%(%[%4L: %-20,20n%]%) %s\n"
786   "*The format specification of the lines in the summary buffer.
787
788 It works along the same lines as a normal formatting string,
789 with some simple extensions.
790
791 %N   Article number, left padded with spaces (string)
792 %S   Subject (string)
793 %s   Subject if it is at the root of a thread, and \"\" otherwise (string)
794 %n   Name of the poster (string)
795 %a   Extracted name of the poster (string)
796 %A   Extracted address of the poster (string)
797 %F   Contents of the From: header (string)
798 %x   Contents of the Xref: header (string)
799 %D   Date of the article (string)
800 %d   Date of the article (string) in DD-MMM format
801 %M   Message-id of the article (string)
802 %r   References of the article (string)
803 %c   Number of characters in the article (integer)
804 %L   Number of lines in the article (integer)
805 %I   Indentation based on thread level (a string of spaces)
806 %T   A string with two possible values: 80 spaces if the article
807      is on thread level two or larger and 0 spaces on level one
808 %R   \"A\" if this article has been replied to, \" \" otherwise (character)
809 %U   Status of this article (character, \"R\", \"K\", \"-\" or \" \")
810 %[   Opening bracket (character, \"[\" or \"<\")
811 %]   Closing bracket (character, \"]\" or \">\")
812 %>   Spaces of length thread-level (string)
813 %<   Spaces of length (- 20 thread-level) (string)
814 %i   Article score (number)
815 %z   Article zcore (character)
816 %t   Number of articles under the current thread (number).
817 %e   Whether the thread is empty or not (character).
818 %l   GroupLens score (string).
819 %P   The line number (number).
820 %u   User defined specifier.  The next character in the format string should
821      be a letter.  Gnus will call the function gnus-user-format-function-X,
822      where X is the letter following %u.  The function will be passed the
823      current header as argument.  The function should return a string, which
824      will be inserted into the summary just like information from any other
825      summary specifier.
826
827 Text between %( and %) will be highlighted with `gnus-mouse-face'
828 when the mouse point is placed inside the area.  There can only be one
829 such area.
830
831 The %U (status), %R (replied) and %z (zcore) specs have to be handled
832 with care.  For reasons of efficiency, Gnus will compute what column
833 these characters will end up in, and \"hard-code\" that.  This means that
834 it is illegal to have these specs after a variable-length spec.  Well,
835 you might not be arrested, but your summary buffer will look strange,
836 which is bad enough.
837
838 The smart choice is to have these specs as for to the left as
839 possible.
840
841 This restriction may disappear in later versions of Gnus.")
842
843 ;;;
844 ;;; Skeleton keymaps
845 ;;;
846
847 (defun gnus-suppress-keymap (keymap)
848   (suppress-keymap keymap)
849   (let ((keys `([delete] "\177" "\M-u"))) ;gnus-mouse-2 
850     (while keys
851       (define-key keymap (pop keys) 'undefined))))
852
853 (defvar gnus-article-mode-map (make-keymap))
854 (gnus-suppress-keymap gnus-article-mode-map)
855 (defvar gnus-summary-mode-map (make-keymap))
856 (gnus-suppress-keymap gnus-summary-mode-map)
857 (defvar gnus-group-mode-map (make-keymap))
858 (gnus-suppress-keymap gnus-group-mode-map)
859
860 ;;; Function aliases later to be redefined for XEmacs usage.
861
862 (defalias 'gnus-make-overlay 'make-overlay)
863 (defalias 'gnus-overlay-put 'overlay-put)
864 (defalias 'gnus-move-overlay 'move-overlay)
865 (defalias 'gnus-overlay-end 'overlay-end)
866 (defalias 'gnus-extent-detached-p 'ignore)
867 (defalias 'gnus-extent-start-open 'ignore)
868 (defalias 'gnus-set-text-properties 'set-text-properties)
869 (defalias 'gnus-group-remove-excess-properties 'ignore)
870 (defalias 'gnus-topic-remove-excess-properties 'ignore)
871 (defalias 'gnus-appt-select-lowest-window 'appt-select-lowest-window)
872 (defalias 'gnus-mail-strip-quoted-names 'mail-strip-quoted-names)
873 (defalias 'gnus-make-local-hook 'make-local-hook)
874 (defalias 'gnus-add-hook 'add-hook)
875 (defalias 'gnus-character-to-event 'identity)
876 (defalias 'gnus-add-text-properties 'add-text-properties)
877 (defalias 'gnus-put-text-property 'put-text-property)
878 (defalias 'gnus-mode-line-buffer-identification 'identity)
879
880 (provide 'gnus-load)
881
882 ;;; gnus-load.el ends here