(mm-preferred-alternative-precedence): Discourage showing empty parts.
[gnus] / lisp / gnus.el
1 ;;; gnus.el --- a newsreader for GNU Emacs
2
3 ;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997,
4 ;;   1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
5 ;;   2010  Free Software Foundation, Inc.
6
7 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
8 ;;      Lars Magne Ingebrigtsen <larsi@gnus.org>
9 ;; Keywords: news, mail
10
11 ;; This file is part of GNU Emacs.
12
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
14 ;; it under the terms of the GNU General Public License as published by
15 ;; the Free Software Foundation, either version 3 of the License, or
16 ;; (at your option) any later version.
17
18 ;; GNU Emacs is distributed in the hope that it will be useful,
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 ;; GNU General Public License for more details.
22
23 ;; You should have received a copy of the GNU General Public License
24 ;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
25
26 ;;; Commentary:
27
28 ;;; Code:
29
30 (eval '(run-hooks 'gnus-load-hook))
31
32 ;; For Emacs <22.2 and XEmacs.
33 (eval-and-compile
34   (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
35
36 (eval-when-compile (require 'cl))
37 (require 'wid-edit)
38 (require 'mm-util)
39 (require 'nnheader)
40
41 ;; These are defined afterwards with gnus-define-group-parameter
42 (defvar gnus-ham-process-destinations)
43 (defvar gnus-parameter-ham-marks-alist)
44 (defvar gnus-parameter-spam-marks-alist)
45 (defvar gnus-spam-autodetect)
46 (defvar gnus-spam-autodetect-methods)
47 (defvar gnus-spam-newsgroup-contents)
48 (defvar gnus-spam-process-destinations)
49 (defvar gnus-spam-resend-to)
50 (defvar gnus-ham-resend-to)
51 (defvar gnus-spam-process-newsgroups)
52
53
54 (defgroup gnus nil
55   "The coffee-brewing, all singing, all dancing, kitchen sink newsreader."
56   :group 'news
57   :group 'mail)
58
59 (defgroup gnus-start nil
60   "Starting your favorite newsreader."
61   :group 'gnus)
62
63 (defgroup gnus-format nil
64   "Dealing with formatting issues."
65   :group 'gnus)
66
67 (defgroup gnus-charset nil
68   "Group character set issues."
69   :link '(custom-manual "(gnus)Charsets")
70   :version "21.1"
71   :group 'gnus)
72
73 (defgroup gnus-cache nil
74   "Cache interface."
75   :link '(custom-manual "(gnus)Article Caching")
76   :group 'gnus)
77
78 (defgroup gnus-registry nil
79   "Article Registry."
80   :group 'gnus)
81
82 (defgroup gnus-start-server nil
83   "Server options at startup."
84   :group 'gnus-start)
85
86 ;; These belong to gnus-group.el.
87 (defgroup gnus-group nil
88   "Group buffers."
89   :link '(custom-manual "(gnus)Group Buffer")
90   :group 'gnus)
91
92 (defgroup gnus-group-foreign nil
93   "Foreign groups."
94   :link '(custom-manual "(gnus)Foreign Groups")
95   :group 'gnus-group)
96
97 (defgroup gnus-group-new nil
98   "Automatic subscription of new groups."
99   :group 'gnus-group)
100
101 (defgroup gnus-group-levels nil
102   "Group levels."
103   :link '(custom-manual "(gnus)Group Levels")
104   :group 'gnus-group)
105
106 (defgroup gnus-group-select nil
107   "Selecting a Group."
108   :link '(custom-manual "(gnus)Selecting a Group")
109   :group 'gnus-group)
110
111 (defgroup gnus-group-listing nil
112   "Showing slices of the group list."
113   :link '(custom-manual "(gnus)Listing Groups")
114   :group 'gnus-group)
115
116 (defgroup gnus-group-visual nil
117   "Sorting the group buffer."
118   :link '(custom-manual "(gnus)Group Buffer Format")
119   :group 'gnus-group
120   :group 'gnus-visual)
121
122 (defgroup gnus-group-various nil
123   "Various group options."
124   :link '(custom-manual "(gnus)Scanning New Messages")
125   :group 'gnus-group)
126
127 ;; These belong to gnus-sum.el.
128 (defgroup gnus-summary nil
129   "Summary buffers."
130   :link '(custom-manual "(gnus)Summary Buffer")
131   :group 'gnus)
132
133 (defgroup gnus-summary-exit nil
134   "Leaving summary buffers."
135   :link '(custom-manual "(gnus)Exiting the Summary Buffer")
136   :group 'gnus-summary)
137
138 (defgroup gnus-summary-marks nil
139   "Marks used in summary buffers."
140   :link '(custom-manual "(gnus)Marking Articles")
141   :group 'gnus-summary)
142
143 (defgroup gnus-thread nil
144   "Ordering articles according to replies."
145   :link '(custom-manual "(gnus)Threading")
146   :group 'gnus-summary)
147
148 (defgroup gnus-summary-format nil
149   "Formatting of the summary buffer."
150   :link '(custom-manual "(gnus)Summary Buffer Format")
151   :group 'gnus-summary)
152
153 (defgroup gnus-summary-choose nil
154   "Choosing Articles."
155   :link '(custom-manual "(gnus)Choosing Articles")
156   :group 'gnus-summary)
157
158 (defgroup gnus-summary-maneuvering nil
159   "Summary movement commands."
160   :link '(custom-manual "(gnus)Summary Maneuvering")
161   :group 'gnus-summary)
162
163 (defgroup gnus-picon nil
164   "Show pictures of people, domains, and newsgroups."
165   :group 'gnus-visual)
166
167 (defgroup gnus-summary-mail nil
168   "Mail group commands."
169   :link '(custom-manual "(gnus)Mail Group Commands")
170   :group 'gnus-summary)
171
172 (defgroup gnus-summary-sort nil
173   "Sorting the summary buffer."
174   :link '(custom-manual "(gnus)Sorting the Summary Buffer")
175   :group 'gnus-summary)
176
177 (defgroup gnus-summary-visual nil
178   "Highlighting and menus in the summary buffer."
179   :link '(custom-manual "(gnus)Summary Highlighting")
180   :group 'gnus-visual
181   :group 'gnus-summary)
182
183 (defgroup gnus-summary-various nil
184   "Various summary buffer options."
185   :link '(custom-manual "(gnus)Various Summary Stuff")
186   :group 'gnus-summary)
187
188 (defgroup gnus-summary-pick nil
189   "Pick mode in the summary buffer."
190   :link '(custom-manual "(gnus)Pick and Read")
191   :prefix "gnus-pick-"
192   :group 'gnus-summary)
193
194 (defgroup gnus-summary-tree nil
195   "Tree display of threads in the summary buffer."
196   :link '(custom-manual "(gnus)Tree Display")
197   :prefix "gnus-tree-"
198   :group 'gnus-summary)
199
200 ;; Belongs to gnus-uu.el
201 (defgroup gnus-extract-view nil
202   "Viewing extracted files."
203   :link '(custom-manual "(gnus)Viewing Files")
204   :group 'gnus-extract)
205
206 ;; Belongs to gnus-score.el
207 (defgroup gnus-score nil
208   "Score and kill file handling."
209   :group 'gnus)
210
211 (defgroup gnus-score-kill nil
212   "Kill files."
213   :group 'gnus-score)
214
215 (defgroup gnus-score-adapt nil
216   "Adaptive score files."
217   :group 'gnus-score)
218
219 (defgroup gnus-score-default nil
220   "Default values for score files."
221   :group 'gnus-score)
222
223 (defgroup gnus-score-expire nil
224   "Expiring score rules."
225   :group 'gnus-score)
226
227 (defgroup gnus-score-decay nil
228   "Decaying score rules."
229   :group 'gnus-score)
230
231 (defgroup gnus-score-files nil
232   "Score and kill file names."
233   :group 'gnus-score
234   :group 'gnus-files)
235
236 (defgroup gnus-score-various nil
237   "Various scoring and killing options."
238   :group 'gnus-score)
239
240 ;; Other
241 (defgroup gnus-visual nil
242   "Options controlling the visual fluff."
243   :group 'gnus
244   :group 'faces)
245
246 (defgroup gnus-agent nil
247   "Offline support for Gnus."
248   :group 'gnus)
249
250 (defgroup gnus-files nil
251   "Files used by Gnus."
252   :group 'gnus)
253
254 (defgroup gnus-dribble-file nil
255   "Auto save file."
256   :link '(custom-manual "(gnus)Auto Save")
257   :group 'gnus-files)
258
259 (defgroup gnus-newsrc nil
260   "Storing Gnus state."
261   :group 'gnus-files)
262
263 (defgroup gnus-server nil
264   "Options related to newsservers and other servers used by Gnus."
265   :group 'gnus)
266
267 (defgroup gnus-server-visual nil
268   "Highlighting and menus in the server buffer."
269   :group 'gnus-visual
270   :group 'gnus-server)
271
272 (defgroup gnus-message '((message custom-group))
273   "Composing replies and followups in Gnus."
274   :group 'gnus)
275
276 (defgroup gnus-meta nil
277   "Meta variables controlling major portions of Gnus.
278 In general, modifying these variables does not take affect until Gnus
279 is restarted, and sometimes reloaded."
280   :group 'gnus)
281
282 (defgroup gnus-various nil
283   "Other Gnus options."
284   :link '(custom-manual "(gnus)Various Various")
285   :group 'gnus)
286
287 (defgroup gnus-exit nil
288   "Exiting Gnus."
289   :link '(custom-manual "(gnus)Exiting Gnus")
290   :group 'gnus)
291
292 (defgroup gnus-fun nil
293   "Frivolous Gnus extensions."
294   :link '(custom-manual "(gnus)Exiting Gnus")
295   :group 'gnus)
296
297 (defconst gnus-version-number "0.11"
298   "Version number for this version of Gnus.")
299
300 (defconst gnus-version (format "No Gnus v%s" gnus-version-number)
301   "Version string for this version of Gnus.")
302
303 (defcustom gnus-inhibit-startup-message nil
304   "If non-nil, the startup message will not be displayed.
305 This variable is used before `.gnus.el' is loaded, so it should
306 be set in `.emacs' instead."
307   :group 'gnus-start
308   :type 'boolean)
309
310 (unless (featurep 'gnus-xmas)
311   (defalias 'gnus-make-overlay 'make-overlay)
312   (defalias 'gnus-delete-overlay 'delete-overlay)
313   (defalias 'gnus-overlay-get 'overlay-get)
314   (defalias 'gnus-overlay-put 'overlay-put)
315   (defalias 'gnus-move-overlay 'move-overlay)
316   (defalias 'gnus-overlay-buffer 'overlay-buffer)
317   (defalias 'gnus-overlay-start 'overlay-start)
318   (defalias 'gnus-overlay-end 'overlay-end)
319   (defalias 'gnus-overlays-in 'overlays-in)
320   (defalias 'gnus-extent-detached-p 'ignore)
321   (defalias 'gnus-extent-start-open 'ignore)
322   (defalias 'gnus-mail-strip-quoted-names 'mail-strip-quoted-names)
323   (defalias 'gnus-character-to-event 'identity)
324   (defalias 'gnus-assq-delete-all 'assq-delete-all)
325   (defalias 'gnus-add-text-properties 'add-text-properties)
326   (defalias 'gnus-put-text-property 'put-text-property)
327   (defvar gnus-mode-line-image-cache t)
328   (if (fboundp 'find-image)
329       (defun gnus-mode-line-buffer-identification (line)
330         (let ((str (car-safe line))
331               (load-path (mm-image-load-path)))
332           (if (and (stringp str)
333                    (string-match "^Gnus:" str))
334               (progn (add-text-properties
335                       0 5
336                       (list 'display
337                             (if (eq t gnus-mode-line-image-cache)
338                                 (setq gnus-mode-line-image-cache
339                                       (find-image
340                                        '((:type xpm :file "gnus-pointer.xpm"
341                                                 :ascent center)
342                                          (:type xbm :file "gnus-pointer.xbm"
343                                                 :ascent center))))
344                               gnus-mode-line-image-cache)
345                             'help-echo (format
346                                         "This is %s, %s."
347                                         gnus-version (gnus-emacs-version)))
348                       str)
349                      (list str))
350             line)))
351     (defalias 'gnus-mode-line-buffer-identification 'identity))
352   (defalias 'gnus-deactivate-mark 'deactivate-mark)
353   (defalias 'gnus-window-edges 'window-edges)
354   (defalias 'gnus-key-press-event-p 'numberp)
355   ;;(defalias 'gnus-decode-rfc1522 'ignore)
356   )
357
358 ;; We define these group faces here to avoid the display
359 ;; update forced when creating new faces.
360
361 (defface gnus-group-news-1
362   '((((class color)
363       (background dark))
364      (:foreground "PaleTurquoise" :bold t))
365     (((class color)
366       (background light))
367      (:foreground "ForestGreen" :bold t))
368     (t
369      ()))
370   "Level 1 newsgroup face."
371   :group 'gnus-group)
372 ;; backward-compatibility alias
373 (put 'gnus-group-news-1-face 'face-alias 'gnus-group-news-1)
374 (put 'gnus-group-news-1-face 'obsolete-face "22.1")
375
376 (defface gnus-group-news-1-empty
377   '((((class color)
378       (background dark))
379      (:foreground "PaleTurquoise"))
380     (((class color)
381       (background light))
382      (:foreground "ForestGreen"))
383     (t
384      ()))
385   "Level 1 empty newsgroup face."
386   :group 'gnus-group)
387 ;; backward-compatibility alias
388 (put 'gnus-group-news-1-empty-face 'face-alias 'gnus-group-news-1-empty)
389 (put 'gnus-group-news-1-empty-face 'obsolete-face "22.1")
390
391 (defface gnus-group-news-2
392   '((((class color)
393       (background dark))
394      (:foreground "turquoise" :bold t))
395     (((class color)
396       (background light))
397      (:foreground "CadetBlue4" :bold t))
398     (t
399      ()))
400   "Level 2 newsgroup face."
401   :group 'gnus-group)
402 ;; backward-compatibility alias
403 (put 'gnus-group-news-2-face 'face-alias 'gnus-group-news-2)
404 (put 'gnus-group-news-2-face 'obsolete-face "22.1")
405
406 (defface gnus-group-news-2-empty
407   '((((class color)
408       (background dark))
409      (:foreground "turquoise"))
410     (((class color)
411       (background light))
412      (:foreground "CadetBlue4"))
413     (t
414      ()))
415   "Level 2 empty newsgroup face."
416   :group 'gnus-group)
417 ;; backward-compatibility alias
418 (put 'gnus-group-news-2-empty-face 'face-alias 'gnus-group-news-2-empty)
419 (put 'gnus-group-news-2-empty-face 'obsolete-face "22.1")
420
421 (defface gnus-group-news-3
422   '((((class color)
423       (background dark))
424      (:bold t))
425     (((class color)
426       (background light))
427      (:bold t))
428     (t
429      ()))
430   "Level 3 newsgroup face."
431   :group 'gnus-group)
432 ;; backward-compatibility alias
433 (put 'gnus-group-news-3-face 'face-alias 'gnus-group-news-3)
434 (put 'gnus-group-news-3-face 'obsolete-face "22.1")
435
436 (defface gnus-group-news-3-empty
437   '((((class color)
438       (background dark))
439      ())
440     (((class color)
441       (background light))
442      ())
443     (t
444      ()))
445   "Level 3 empty newsgroup face."
446   :group 'gnus-group)
447 ;; backward-compatibility alias
448 (put 'gnus-group-news-3-empty-face 'face-alias 'gnus-group-news-3-empty)
449 (put 'gnus-group-news-3-empty-face 'obsolete-face "22.1")
450
451 (defface gnus-group-news-4
452   '((((class color)
453       (background dark))
454      (:bold t))
455     (((class color)
456       (background light))
457      (:bold t))
458     (t
459      ()))
460   "Level 4 newsgroup face."
461   :group 'gnus-group)
462 ;; backward-compatibility alias
463 (put 'gnus-group-news-4-face 'face-alias 'gnus-group-news-4)
464 (put 'gnus-group-news-4-face 'obsolete-face "22.1")
465
466 (defface gnus-group-news-4-empty
467   '((((class color)
468       (background dark))
469      ())
470     (((class color)
471       (background light))
472      ())
473     (t
474      ()))
475   "Level 4 empty newsgroup face."
476   :group 'gnus-group)
477 ;; backward-compatibility alias
478 (put 'gnus-group-news-4-empty-face 'face-alias 'gnus-group-news-4-empty)
479 (put 'gnus-group-news-4-empty-face 'obsolete-face "22.1")
480
481 (defface gnus-group-news-5
482   '((((class color)
483       (background dark))
484      (:bold t))
485     (((class color)
486       (background light))
487      (:bold t))
488     (t
489      ()))
490   "Level 5 newsgroup face."
491   :group 'gnus-group)
492 ;; backward-compatibility alias
493 (put 'gnus-group-news-5-face 'face-alias 'gnus-group-news-5)
494 (put 'gnus-group-news-5-face 'obsolete-face "22.1")
495
496 (defface gnus-group-news-5-empty
497   '((((class color)
498       (background dark))
499      ())
500     (((class color)
501       (background light))
502      ())
503     (t
504      ()))
505   "Level 5 empty newsgroup face."
506   :group 'gnus-group)
507 ;; backward-compatibility alias
508 (put 'gnus-group-news-5-empty-face 'face-alias 'gnus-group-news-5-empty)
509 (put 'gnus-group-news-5-empty-face 'obsolete-face "22.1")
510
511 (defface gnus-group-news-6
512   '((((class color)
513       (background dark))
514      (:bold t))
515     (((class color)
516       (background light))
517      (:bold t))
518     (t
519      ()))
520   "Level 6 newsgroup face."
521   :group 'gnus-group)
522 ;; backward-compatibility alias
523 (put 'gnus-group-news-6-face 'face-alias 'gnus-group-news-6)
524 (put 'gnus-group-news-6-face 'obsolete-face "22.1")
525
526 (defface gnus-group-news-6-empty
527   '((((class color)
528       (background dark))
529      ())
530     (((class color)
531       (background light))
532      ())
533     (t
534      ()))
535   "Level 6 empty newsgroup face."
536   :group 'gnus-group)
537 ;; backward-compatibility alias
538 (put 'gnus-group-news-6-empty-face 'face-alias 'gnus-group-news-6-empty)
539 (put 'gnus-group-news-6-empty-face 'obsolete-face "22.1")
540
541 (defface gnus-group-news-low
542   '((((class color)
543       (background dark))
544      (:foreground "DarkTurquoise" :bold t))
545     (((class color)
546       (background light))
547      (:foreground "DarkGreen" :bold t))
548     (t
549      ()))
550   "Low level newsgroup face."
551   :group 'gnus-group)
552 ;; backward-compatibility alias
553 (put 'gnus-group-news-low-face 'face-alias 'gnus-group-news-low)
554 (put 'gnus-group-news-low-face 'obsolete-face "22.1")
555
556 (defface gnus-group-news-low-empty
557   '((((class color)
558       (background dark))
559      (:foreground "DarkTurquoise"))
560     (((class color)
561       (background light))
562      (:foreground "DarkGreen"))
563     (t
564      ()))
565   "Low level empty newsgroup face."
566   :group 'gnus-group)
567 ;; backward-compatibility alias
568 (put 'gnus-group-news-low-empty-face 'face-alias 'gnus-group-news-low-empty)
569 (put 'gnus-group-news-low-empty-face 'obsolete-face "22.1")
570
571 (defface gnus-group-mail-1
572   '((((class color)
573       (background dark))
574      (:foreground "#e1ffe1" :bold t))
575     (((class color)
576       (background light))
577      (:foreground "DeepPink3" :bold t))
578     (t
579      (:bold t)))
580   "Level 1 mailgroup face."
581   :group 'gnus-group)
582 ;; backward-compatibility alias
583 (put 'gnus-group-mail-1-face 'face-alias 'gnus-group-mail-1)
584 (put 'gnus-group-mail-1-face 'obsolete-face "22.1")
585
586 (defface gnus-group-mail-1-empty
587   '((((class color)
588       (background dark))
589      (:foreground "#e1ffe1"))
590     (((class color)
591       (background light))
592      (:foreground "DeepPink3"))
593     (t
594      (:italic t :bold t)))
595   "Level 1 empty mailgroup face."
596   :group 'gnus-group)
597 ;; backward-compatibility alias
598 (put 'gnus-group-mail-1-empty-face 'face-alias 'gnus-group-mail-1-empty)
599 (put 'gnus-group-mail-1-empty-face 'obsolete-face "22.1")
600
601 (defface gnus-group-mail-2
602   '((((class color)
603       (background dark))
604      (:foreground "DarkSeaGreen1" :bold t))
605     (((class color)
606       (background light))
607      (:foreground "HotPink3" :bold t))
608     (t
609      (:bold t)))
610   "Level 2 mailgroup face."
611   :group 'gnus-group)
612 ;; backward-compatibility alias
613 (put 'gnus-group-mail-2-face 'face-alias 'gnus-group-mail-2)
614 (put 'gnus-group-mail-2-face 'obsolete-face "22.1")
615
616 (defface gnus-group-mail-2-empty
617   '((((class color)
618       (background dark))
619      (:foreground "DarkSeaGreen1"))
620     (((class color)
621       (background light))
622      (:foreground "HotPink3"))
623     (t
624      (:bold t)))
625   "Level 2 empty mailgroup face."
626   :group 'gnus-group)
627 ;; backward-compatibility alias
628 (put 'gnus-group-mail-2-empty-face 'face-alias 'gnus-group-mail-2-empty)
629 (put 'gnus-group-mail-2-empty-face 'obsolete-face "22.1")
630
631 (defface gnus-group-mail-3
632   '((((class color)
633       (background dark))
634      (:foreground "aquamarine1" :bold t))
635     (((class color)
636       (background light))
637      (:foreground "magenta4" :bold t))
638     (t
639      (:bold t)))
640   "Level 3 mailgroup face."
641   :group 'gnus-group)
642 ;; backward-compatibility alias
643 (put 'gnus-group-mail-3-face 'face-alias 'gnus-group-mail-3)
644 (put 'gnus-group-mail-3-face 'obsolete-face "22.1")
645
646 (defface gnus-group-mail-3-empty
647   '((((class color)
648       (background dark))
649      (:foreground "aquamarine1"))
650     (((class color)
651       (background light))
652      (:foreground "magenta4"))
653     (t
654      ()))
655   "Level 3 empty mailgroup face."
656   :group 'gnus-group)
657 ;; backward-compatibility alias
658 (put 'gnus-group-mail-3-empty-face 'face-alias 'gnus-group-mail-3-empty)
659 (put 'gnus-group-mail-3-empty-face 'obsolete-face "22.1")
660
661 (defface gnus-group-mail-low
662   '((((class color)
663       (background dark))
664      (:foreground "aquamarine2" :bold t))
665     (((class color)
666       (background light))
667      (:foreground "DeepPink4" :bold t))
668     (t
669      (:bold t)))
670   "Low level mailgroup face."
671   :group 'gnus-group)
672 ;; backward-compatibility alias
673 (put 'gnus-group-mail-low-face 'face-alias 'gnus-group-mail-low)
674 (put 'gnus-group-mail-low-face 'obsolete-face "22.1")
675
676 (defface gnus-group-mail-low-empty
677   '((((class color)
678       (background dark))
679      (:foreground "aquamarine2"))
680     (((class color)
681       (background light))
682      (:foreground "DeepPink4"))
683     (t
684      (:bold t)))
685   "Low level empty mailgroup face."
686   :group 'gnus-group)
687 ;; backward-compatibility alias
688 (put 'gnus-group-mail-low-empty-face 'face-alias 'gnus-group-mail-low-empty)
689 (put 'gnus-group-mail-low-empty-face 'obsolete-face "22.1")
690
691 ;; Summary mode faces.
692
693 (defface gnus-summary-selected '((t (:underline t)))
694   "Face used for selected articles."
695   :group 'gnus-summary)
696 ;; backward-compatibility alias
697 (put 'gnus-summary-selected-face 'face-alias 'gnus-summary-selected)
698 (put 'gnus-summary-selected-face 'obsolete-face "22.1")
699
700 (defface gnus-summary-cancelled
701   '((((class color))
702      (:foreground "yellow" :background "black")))
703   "Face used for cancelled articles."
704   :group 'gnus-summary)
705 ;; backward-compatibility alias
706 (put 'gnus-summary-cancelled-face 'face-alias 'gnus-summary-cancelled)
707 (put 'gnus-summary-cancelled-face 'obsolete-face "22.1")
708
709 (defface gnus-summary-high-ticked
710   '((((class color)
711       (background dark))
712      (:foreground "pink" :bold t))
713     (((class color)
714       (background light))
715      (:foreground "firebrick" :bold t))
716     (t
717      (:bold t)))
718   "Face used for high interest ticked articles."
719   :group 'gnus-summary)
720 ;; backward-compatibility alias
721 (put 'gnus-summary-high-ticked-face 'face-alias 'gnus-summary-high-ticked)
722 (put 'gnus-summary-high-ticked-face 'obsolete-face "22.1")
723
724 (defface gnus-summary-low-ticked
725   '((((class color)
726       (background dark))
727      (:foreground "pink" :italic t))
728     (((class color)
729       (background light))
730      (:foreground "firebrick" :italic t))
731     (t
732      (:italic t)))
733   "Face used for low interest ticked articles."
734   :group 'gnus-summary)
735 ;; backward-compatibility alias
736 (put 'gnus-summary-low-ticked-face 'face-alias 'gnus-summary-low-ticked)
737 (put 'gnus-summary-low-ticked-face 'obsolete-face "22.1")
738
739 (defface gnus-summary-normal-ticked
740   '((((class color)
741       (background dark))
742      (:foreground "pink"))
743     (((class color)
744       (background light))
745      (:foreground "firebrick"))
746     (t
747      ()))
748   "Face used for normal interest ticked articles."
749   :group 'gnus-summary)
750 ;; backward-compatibility alias
751 (put 'gnus-summary-normal-ticked-face 'face-alias 'gnus-summary-normal-ticked)
752 (put 'gnus-summary-normal-ticked-face 'obsolete-face "22.1")
753
754 (defface gnus-summary-high-ancient
755   '((((class color)
756       (background dark))
757      (:foreground "SkyBlue" :bold t))
758     (((class color)
759       (background light))
760      (:foreground "RoyalBlue" :bold t))
761     (t
762      (:bold t)))
763   "Face used for high interest ancient articles."
764   :group 'gnus-summary)
765 ;; backward-compatibility alias
766 (put 'gnus-summary-high-ancient-face 'face-alias 'gnus-summary-high-ancient)
767 (put 'gnus-summary-high-ancient-face 'obsolete-face "22.1")
768
769 (defface gnus-summary-low-ancient
770   '((((class color)
771       (background dark))
772      (:foreground "SkyBlue" :italic t))
773     (((class color)
774       (background light))
775      (:foreground "RoyalBlue" :italic t))
776     (t
777      (:italic t)))
778   "Face used for low interest ancient articles."
779   :group 'gnus-summary)
780 ;; backward-compatibility alias
781 (put 'gnus-summary-low-ancient-face 'face-alias 'gnus-summary-low-ancient)
782 (put 'gnus-summary-low-ancient-face 'obsolete-face "22.1")
783
784 (defface gnus-summary-normal-ancient
785   '((((class color)
786       (background dark))
787      (:foreground "SkyBlue"))
788     (((class color)
789       (background light))
790      (:foreground "RoyalBlue"))
791     (t
792      ()))
793   "Face used for normal interest ancient articles."
794   :group 'gnus-summary)
795 ;; backward-compatibility alias
796 (put 'gnus-summary-normal-ancient-face 'face-alias 'gnus-summary-normal-ancient)
797 (put 'gnus-summary-normal-ancient-face 'obsolete-face "22.1")
798
799 (defface gnus-summary-high-undownloaded
800    '((((class color)
801        (background light))
802       (:bold t :foreground "cyan4"))
803      (((class color) (background dark))
804       (:bold t :foreground "LightGray"))
805      (t (:inverse-video t :bold t)))
806   "Face used for high interest uncached articles."
807   :group 'gnus-summary)
808 ;; backward-compatibility alias
809 (put 'gnus-summary-high-undownloaded-face 'face-alias 'gnus-summary-high-undownloaded)
810 (put 'gnus-summary-high-undownloaded-face 'obsolete-face "22.1")
811
812 (defface gnus-summary-low-undownloaded
813    '((((class color)
814        (background light))
815       (:italic t :foreground "cyan4" :bold nil))
816      (((class color) (background dark))
817       (:italic t :foreground "LightGray" :bold nil))
818      (t (:inverse-video t :italic t)))
819   "Face used for low interest uncached articles."
820   :group 'gnus-summary)
821 ;; backward-compatibility alias
822 (put 'gnus-summary-low-undownloaded-face 'face-alias 'gnus-summary-low-undownloaded)
823 (put 'gnus-summary-low-undownloaded-face 'obsolete-face "22.1")
824
825 (defface gnus-summary-normal-undownloaded
826    '((((class color)
827        (background light))
828       (:foreground "cyan4" :bold nil))
829      (((class color) (background dark))
830       (:foreground "LightGray" :bold nil))
831      (t (:inverse-video t)))
832   "Face used for normal interest uncached articles."
833   :group 'gnus-summary)
834 ;; backward-compatibility alias
835 (put 'gnus-summary-normal-undownloaded-face 'face-alias 'gnus-summary-normal-undownloaded)
836 (put 'gnus-summary-normal-undownloaded-face 'obsolete-face "22.1")
837
838 (defface gnus-summary-high-unread
839   '((t
840      (:bold t)))
841   "Face used for high interest unread articles."
842   :group 'gnus-summary)
843 ;; backward-compatibility alias
844 (put 'gnus-summary-high-unread-face 'face-alias 'gnus-summary-high-unread)
845 (put 'gnus-summary-high-unread-face 'obsolete-face "22.1")
846
847 (defface gnus-summary-low-unread
848   '((t
849      (:italic t)))
850   "Face used for low interest unread articles."
851   :group 'gnus-summary)
852 ;; backward-compatibility alias
853 (put 'gnus-summary-low-unread-face 'face-alias 'gnus-summary-low-unread)
854 (put 'gnus-summary-low-unread-face 'obsolete-face "22.1")
855
856 (defface gnus-summary-normal-unread
857   '((t
858      ()))
859   "Face used for normal interest unread articles."
860   :group 'gnus-summary)
861 ;; backward-compatibility alias
862 (put 'gnus-summary-normal-unread-face 'face-alias 'gnus-summary-normal-unread)
863 (put 'gnus-summary-normal-unread-face 'obsolete-face "22.1")
864
865 (defface gnus-summary-high-read
866   '((((class color)
867       (background dark))
868      (:foreground "PaleGreen"
869                   :bold t))
870     (((class color)
871       (background light))
872      (:foreground "DarkGreen"
873                   :bold t))
874     (t
875      (:bold t)))
876   "Face used for high interest read articles."
877   :group 'gnus-summary)
878 ;; backward-compatibility alias
879 (put 'gnus-summary-high-read-face 'face-alias 'gnus-summary-high-read)
880 (put 'gnus-summary-high-read-face 'obsolete-face "22.1")
881
882 (defface gnus-summary-low-read
883   '((((class color)
884       (background dark))
885      (:foreground "PaleGreen"
886                   :italic t))
887     (((class color)
888       (background light))
889      (:foreground "DarkGreen"
890                   :italic t))
891     (t
892      (:italic t)))
893   "Face used for low interest read articles."
894   :group 'gnus-summary)
895 ;; backward-compatibility alias
896 (put 'gnus-summary-low-read-face 'face-alias 'gnus-summary-low-read)
897 (put 'gnus-summary-low-read-face 'obsolete-face "22.1")
898
899 (defface gnus-summary-normal-read
900   '((((class color)
901       (background dark))
902      (:foreground "PaleGreen"))
903     (((class color)
904       (background light))
905      (:foreground "DarkGreen"))
906     (t
907      ()))
908   "Face used for normal interest read articles."
909   :group 'gnus-summary)
910 ;; backward-compatibility alias
911 (put 'gnus-summary-normal-read-face 'face-alias 'gnus-summary-normal-read)
912 (put 'gnus-summary-normal-read-face 'obsolete-face "22.1")
913
914
915 ;;;
916 ;;; Gnus buffers
917 ;;;
918
919 (defvar gnus-buffers nil
920   "List of buffers handled by Gnus.")
921
922 (defun gnus-get-buffer-create (name)
923   "Do the same as `get-buffer-create', but store the created buffer."
924   (or (get-buffer name)
925       (car (push (get-buffer-create name) gnus-buffers))))
926
927 (defun gnus-add-buffer ()
928   "Add the current buffer to the list of Gnus buffers."
929   (push (current-buffer) gnus-buffers))
930
931 (defmacro gnus-kill-buffer (buffer)
932   "Kill BUFFER and remove from the list of Gnus buffers."
933   `(let ((buf ,buffer))
934      (when (gnus-buffer-exists-p buf)
935        (setq gnus-buffers (delete (get-buffer buf) gnus-buffers))
936        (kill-buffer buf))))
937
938 (defun gnus-buffers ()
939   "Return a list of live Gnus buffers."
940   (while (and gnus-buffers
941               (not (buffer-name (car gnus-buffers))))
942     (pop gnus-buffers))
943   (let ((buffers gnus-buffers))
944     (while (cdr buffers)
945       (if (buffer-name (cadr buffers))
946           (pop buffers)
947         (setcdr buffers (cddr buffers)))))
948   gnus-buffers)
949
950 ;;; Splash screen.
951
952 (defvar gnus-group-buffer "*Group*"
953   "Name of the Gnus group buffer.")
954
955 (defface gnus-splash
956   '((((class color)
957       (background dark))
958      (:foreground "#cccccc"))
959     (((class color)
960       (background light))
961      (:foreground "#888888"))
962     (t
963      ()))
964   "Face for the splash screen."
965   :group 'gnus-start)
966 ;; backward-compatibility alias
967 (put 'gnus-splash-face 'face-alias 'gnus-splash)
968 (put 'gnus-splash-face 'obsolete-face "22.1")
969
970 (defun gnus-splash ()
971   (save-excursion
972     (switch-to-buffer (gnus-get-buffer-create gnus-group-buffer))
973     (let ((buffer-read-only nil))
974       (erase-buffer)
975       (unless gnus-inhibit-startup-message
976         (gnus-group-startup-message)
977         (sit-for 0)))))
978
979 (defun gnus-indent-rigidly (start end arg)
980   "Indent rigidly using only spaces and no tabs."
981   (save-excursion
982     (save-restriction
983       (narrow-to-region start end)
984       (let ((tab-width 8))
985         (indent-rigidly start end arg)
986         ;; We translate tabs into spaces -- not everybody uses
987         ;; an 8-character tab.
988         (goto-char (point-min))
989         (while (search-forward "\t" nil t)
990           (replace-match "        " t t))))))
991
992 ;;(format "%02x%02x%02x" 114 66 20) "724214"
993
994 (defvar gnus-logo-color-alist
995   '((flame "#cc3300" "#ff2200")
996     (pine "#c0cc93" "#f8ffb8")
997     (moss "#a1cc93" "#d2ffb8")
998     (irish "#04cc90" "#05ff97")
999     (sky "#049acc" "#05deff")
1000     (tin "#6886cc" "#82b6ff")
1001     (velvet "#7c68cc" "#8c82ff")
1002     (grape "#b264cc" "#cf7df")
1003     (labia "#cc64c2" "#fd7dff")
1004     (berry "#cc6485" "#ff7db5")
1005     (dino "#724214" "#1e3f03")
1006     (oort "#cccccc" "#888888")
1007     (storm "#666699" "#99ccff")
1008     (pdino "#9999cc" "#99ccff")
1009     (purp "#9999cc" "#666699")
1010     (no "#ff0000" "#ffff00")
1011     (neutral "#b4b4b4" "#878787")
1012     (september "#bf9900" "#ffcc00"))
1013   "Color alist used for the Gnus logo.")
1014
1015 (defcustom gnus-logo-color-style 'no
1016   "*Color styles used for the Gnus logo."
1017   :type `(choice ,@(mapcar (lambda (elem) (list 'const (car elem)))
1018                            gnus-logo-color-alist))
1019   :group 'gnus-xmas)
1020
1021 (defvar gnus-logo-colors
1022   (cdr (assq gnus-logo-color-style gnus-logo-color-alist))
1023   "Colors used for the Gnus logo.")
1024
1025 (declare-function image-size "image.c" (spec &optional pixels frame))