1 ;;; gnus-srvr.el --- virtual server support for Gnus
3 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
4 ;; 2004, 2005, 2006 Free Software Foundation, Inc.
6 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
9 ;; This file is part of GNU Emacs.
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
12 ;; it under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation; either version 2, or (at your option)
16 ;; GNU Emacs is distributed in the hope that it will be useful,
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 ;; GNU General Public License for more details.
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24 ;; Boston, MA 02110-1301, USA.
30 (eval-when-compile (require 'cl))
38 (defcustom gnus-server-mode-hook nil
39 "Hook run in `gnus-server-mode' buffers."
43 (defcustom gnus-server-exit-hook nil
44 "Hook run when exiting the server buffer."
48 (defcustom gnus-server-line-format " {%(%h:%w%)} %s%a\n"
49 "Format of server lines.
50 It works along the same lines as a normal formatting string,
51 with some simple extensions.
53 The following specs are understood:
61 General format specifiers can also be used.
62 See Info node `(gnus)Formatting Variables'."
63 :link '(custom-manual "(gnus)Formatting Variables")
64 :group 'gnus-server-visual
67 (defcustom gnus-server-mode-line-format "Gnus: %%b"
68 "The format specification for the server mode line."
69 :group 'gnus-server-visual
72 (defcustom gnus-server-browse-in-group-buffer nil
73 "Whether server browsing should take place in the group buffer.
74 If nil, a faster, but more primitive, buffer is used instead."
76 :group 'gnus-server-visual
79 ;;; Internal variables.
81 (defvar gnus-inserted-opened-servers nil)
83 (defvar gnus-server-line-format-alist
84 `((?h gnus-tmp-how ?s)
86 (?w gnus-tmp-where ?s)
87 (?s gnus-tmp-status ?s)
88 (?a gnus-tmp-agent ?s)))
90 (defvar gnus-server-mode-line-format-alist
91 `((?S gnus-tmp-news-server ?s)
92 (?M gnus-tmp-news-method ?s)
93 (?u gnus-tmp-user-defined ?s)))
95 (defvar gnus-server-line-format-spec nil)
96 (defvar gnus-server-mode-line-format-spec nil)
97 (defvar gnus-server-killed-servers nil)
99 (defvar gnus-server-mode-map)
101 (defvar gnus-server-menu-hook nil
102 "*Hook run after the creation of the server mode menu.")
104 (defun gnus-server-make-menu-bar ()
105 (gnus-turn-off-edit-menu 'server)
106 (unless (boundp 'gnus-server-server-menu)
108 gnus-server-server-menu gnus-server-mode-map ""
110 ["Add..." gnus-server-add-server t]
111 ["Browse" gnus-server-read-server t]
112 ["Scan" gnus-server-scan-server t]
113 ["List" gnus-server-list-servers t]
114 ["Kill" gnus-server-kill-server t]
115 ["Yank" gnus-server-yank-server t]
116 ["Copy" gnus-server-copy-server t]
117 ["Edit" gnus-server-edit-server t]
118 ["Regenerate" gnus-server-regenerate-server t]
119 ["Compact" gnus-server-compact-server t]
120 ["Exit" gnus-server-exit t]))
123 gnus-server-connections-menu gnus-server-mode-map ""
125 ["Open" gnus-server-open-server t]
126 ["Close" gnus-server-close-server t]
127 ["Offline" gnus-server-offline-server t]
128 ["Deny" gnus-server-deny-server t]
130 ["Open All" gnus-server-open-all-servers t]
131 ["Close All" gnus-server-close-all-servers t]
132 ["Reset All" gnus-server-remove-denials t]))
134 (gnus-run-hooks 'gnus-server-menu-hook)))
136 (defvar gnus-server-mode-map nil)
137 (put 'gnus-server-mode 'mode-class 'special)
139 (unless gnus-server-mode-map
140 (setq gnus-server-mode-map (make-sparse-keymap))
141 (suppress-keymap gnus-server-mode-map)
143 (gnus-define-keys gnus-server-mode-map
144 " " gnus-server-read-server-in-server-buffer
145 "\r" gnus-server-read-server
146 gnus-mouse-2 gnus-server-pick-server
148 "l" gnus-server-list-servers
149 "k" gnus-server-kill-server
150 "y" gnus-server-yank-server
151 "c" gnus-server-copy-server
152 "a" gnus-server-add-server
153 "e" gnus-server-edit-server
154 "s" gnus-server-scan-server
156 "O" gnus-server-open-server
157 "\M-o" gnus-server-open-all-servers
158 "C" gnus-server-close-server