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