+(defvar gnus-summary-mode-hook nil
+ "*A hook for Gnus summary mode.")
+
+(defvar gnus-article-mode-hook nil
+ "*A hook for Gnus article mode.")
+
+(defvar gnus-open-server-hook nil
+ "*A hook called just before opening connection to the news server.")
+
+(defvar gnus-startup-hook nil
+ "*A hook called at startup.
+This hook is called after Gnus is connected to the NNTP server.")
+
+(defvar gnus-get-new-news-hook nil
+ "*A hook run just before Gnus checks for new news.")
+
+(defvar gnus-group-prepare-function 'gnus-group-prepare-flat
+ "*A function that is called to generate the group buffer.
+The function is called with three arguments: The first is a number;
+all group with a level less or equal to that number should be listed,
+if the second is non-nil, empty groups should also be displayed. If
+the third is non-nil, it is a number. No groups with a level lower
+than this number should be displayed.
+
+The only current function implemented is `gnus-group-prepare-flat'.")
+
+(defvar gnus-group-prepare-hook nil
+ "*A hook called after the group buffer has been generated.
+If you want to modify the group buffer, you can use this hook.")
+
+(defvar gnus-summary-prepare-hook nil
+ "*A hook called after the summary buffer has been generated.
+If you want to modify the summary buffer, you can use this hook.")
+
+(defvar gnus-article-prepare-hook nil
+ "*A hook called after an article has been prepared in the article buffer.
+If you want to run a special decoding program like nkf, use this hook.")
+
+(defvar gnus-article-display-hook nil
+ "*A hook called after the article is displayed in the article buffer.
+The hook is designed to change the contents of the article
+buffer. Typical functions that this hook may contain are
+`gnus-article-hide-headers' (hide selected headers),
+`gnus-article-maybe-highlight' (perform fancy article highlighting),
+`gnus-article-hide-signature' (hide signature) and
+`gnus-article-treat-overstrike' (turn \"^H_\" into bold characters).")
+(add-hook 'gnus-article-display-hook 'gnus-article-hide-headers-if-wanted)
+(add-hook 'gnus-article-display-hook 'gnus-article-treat-overstrike)
+
+(defvar gnus-article-x-face-command
+ "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | xv -quit -"
+ "String or function to be executed to display an X-Face header.
+If it is a string, the command will be executed in a sub-shell
+asynchronously. The compressed face will be piped to this command.")
+
+(defvar gnus-article-x-face-too-ugly nil
+ "Regexp matching posters whose face shouldn't be shown automatically.")
+
+(defvar gnus-select-group-hook nil
+ "*A hook called when a newsgroup is selected.
+
+If you'd like to simplify subjects like the
+`gnus-summary-next-same-subject' command does, you can use the
+following hook:
+
+ (setq gnus-select-group-hook
+ (list
+ (lambda ()
+ (mapcar (lambda (header)
+ (header-set-subject
+ header
+ (gnus-simplify-subject
+ (header-subject header) 're-only)))
+ gnus-newsgroup-headers))))")
+
+(defvar gnus-select-article-hook
+ '(gnus-summary-show-thread)
+ "*A hook called when an article is selected.
+The default hook shows conversation thread subtrees of the selected
+article automatically using `gnus-summary-show-thread'.")
+
+(defvar gnus-apply-kill-hook '(gnus-apply-kill-file)
+ "*A hook called to apply kill files to a group.
+This hook is intended to apply a kill file to the selected newsgroup.
+The function `gnus-apply-kill-file' is called by default.
+
+Since a general kill file is too heavy to use only for a few
+newsgroups, I recommend you to use a lighter hook function. For
+example, if you'd like to apply a kill file to articles which contains
+a string `rmgroup' in subject in newsgroup `control', you can use the
+following hook:
+
+\(setq gnus-apply-kill-hook
+ (list
+ (lambda ()
+ (cond ((string-match \"control\" gnus-newsgroup-name)
+ (gnus-kill \"Subject\" \"rmgroup\")
+ (gnus-expunge \"X\"))))))")
+
+(defvar gnus-visual-mark-article-hook
+ (list 'gnus-highlight-selected-summary)
+ "*Hook run after selecting an article in the summary buffer.
+It is meant to be used for highlighting the article in some way. It
+is not run if `gnus-visual' is nil.")
+
+(defvar gnus-prepare-article-hook (list 'gnus-inews-insert-signature)
+ "*A hook called after preparing body, but before preparing header headers.
+The default hook (`gnus-inews-insert-signature') inserts a signature
+file specified by the variable `gnus-signature-file'.")
+
+(defvar gnus-exit-group-hook nil
+ "*A hook called when exiting (not quitting) summary mode.")
+
+(defvar gnus-suspend-gnus-hook nil
+ "*A hook called when suspending (not exiting) Gnus.")
+
+(defvar gnus-exit-gnus-hook nil
+ "*A hook called when exiting Gnus.")
+
+(defvar gnus-save-newsrc-hook nil
+ "*A hook called when saving the newsrc file.")
+
+(defvar gnus-summary-update-hook
+ (list 'gnus-summary-highlight-line)
+ "*A hook called when a summary line is changed.
+The hook will not be called if `gnus-visual' is nil.
+
+The default function `gnus-summary-highlight-line' will
+highlight the line according to the `gnus-summary-highlight'
+variable.")
+
+(defvar gnus-mark-article-hook (list 'gnus-summary-mark-unread-as-read)
+ "*A hook called when an article is selected for the first time.
+The hook is intended to mark an article as read (or unread)
+automatically when it is selected.")
+
+\f
+;; Internal variables
+
+;; Avoid highlighting in kill files.
+(defvar gnus-summary-inhibit-highlight nil)
+(defvar gnus-newsgroup-selected-overlay nil)
+
+(defvar gnus-article-mode-map nil)
+(defvar caesar-translate-table nil)
+(defvar gnus-dribble-buffer nil)
+(defvar gnus-headers-retrieved-by nil)
+(defvar gnus-article-reply nil)
+(defvar gnus-override-method nil)
+(defvar gnus-article-check-size nil)
+
+(defvar gnus-current-move-group nil)
+
+(defvar gnus-newsgroup-dependencies nil)
+(defvar gnus-newsgroup-threads nil)
+(defvar gnus-newsgroup-async nil)
+(defconst gnus-group-edit-buffer "*Gnus edit newsgroup*")
+
+(defvar gnus-newsgroup-adaptive nil)
+
+(defconst gnus-group-line-format-alist
+ (list (list ?M 'marked ?c)
+ (list ?S 'subscribed ?c)
+ (list ?L 'level ?d)
+ (list ?N 'number ?s)
+ (list ?I 'number-of-dormant ?d)
+ (list ?T 'number-of-ticked ?d)
+ (list ?R 'number-of-read ?s)
+ (list ?t 'number-total ?d)
+ (list ?y 'number-of-unread-unticked ?s)
+ (list ?i 'number-of-ticked-and-dormant ?d)
+ (list ?g 'group ?s)
+ (list ?G 'qualified-group ?s)
+ (list ?D 'newsgroup-description ?s)
+ (list ?o 'moderated ?c)
+ (list ?O 'moderated-string ?s)
+ (list ?s 'news-server ?s)
+ (list ?n 'news-method ?s)
+ (list ?z 'news-method-string ?s)
+ (list ?u 'user-defined ?s)))
+
+(defconst gnus-summary-line-format-alist
+ (list (list ?N 'number ?d)
+ (list ?S 'subject ?s)
+ (list ?s 'subject-or-nil ?s)
+ (list ?n 'name ?s)
+ (list ?A 'address ?s)
+ (list ?F 'from ?s)
+ (list ?x (macroexpand '(header-xref header)) ?s)
+ (list ?D (macroexpand '(header-date header)) ?s)
+ (list ?d '(gnus-dd-mmm (header-date header)) ?s)
+ (list ?M (macroexpand '(header-id header)) ?s)
+ (list ?r (macroexpand '(header-references header)) ?s)
+ (list ?c '(or (header-chars header) 0) ?d)
+ (list ?L 'lines ?d)
+ (list ?I 'indentation ?s)
+ (list ?T '(if (= level 0) "" (make-string (frame-width) ? )) ?s)
+ (list ?R 'replied ?c)
+ (list ?\[ 'opening-bracket ?c)
+ (list ?\] 'closing-bracket ?c)
+ (list ?\> '(make-string level ? ) ?s)
+ (list ?\< '(make-string (max 0 (- 20 level)) ? ) ?s)
+ (list ?i 'score ?d)
+ (list ?z 'score-char ?c)
+ (list ?U 'unread ?c)
+ (list ?t '(gnus-summary-number-of-articles-in-thread
+ (or gnus-tmp-adopt-thread
+ (if (boundp 'thread) (symbol-value 'thread)
+ thread nil)))
+ ?d)
+ (list ?e '(gnus-summary-number-of-articles-in-thread
+ (or gnus-tmp-adopt-thread
+ (if (boundp 'thread) (symbol-value 'thread)
+ thread nil)) t)
+ ?d)
+ (list ?u 'user-defined ?s))
+ "An alist of format specifications that can appear in summary lines,
+and what variables they correspond with, along with the type of the
+variable (string, integer, character, etc).")