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