Added to riece-modules.
[riece] / lisp / riece-options.el
1 ;;; riece-options.el --- customization
2 ;; Copyright (C) 1998-2003 Daiki Ueno
3
4 ;; Author: Daiki Ueno <ueno@unixuser.org>
5 ;; Created: 1998-09-28
6 ;; Keywords: IRC, riece
7
8 ;; This file is part of Riece.
9
10 ;; This program is free software; you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
13 ;; any later version.
14
15 ;; This program is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 ;; GNU General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
24
25 ;;; Code:
26
27 (require 'riece-globals)
28
29 ;; User modifiable variables.
30 (defgroup riece nil
31   "Riece specific customize group")
32
33 (defgroup riece-options nil
34   "Riece user customizable variables"
35   :prefix "riece-"
36   :group 'riece)
37
38 (defcustom riece-saved-forms
39   '(riece-server-alist
40     riece-channel-buffer-mode
41     riece-user-list-buffer-mode)
42   "Variables saved after each session is completed."
43   :type 'string
44   :group 'riece-options)
45
46 (defcustom riece-debug nil
47   "If non-nil, random debug spews."
48   :type 'boolean
49   :group 'riece-options)
50
51 (defgroup riece-looks nil
52   "Related to look and feel"
53   :prefix "riece-"
54   :group 'riece)
55
56 (defcustom riece-truncate-partial-width-windows nil
57   "If non-nil, truncate lines in splitting windows such as others buffer."
58   :type 'boolean
59   :group 'riece-looks)
60
61 (defcustom riece-use-full-window t
62   "If non-nil, whole Emacs window is used to display dialogue."
63   :type 'boolean
64   :group 'riece-looks)
65
66 (defcustom riece-tab-stop-list '(2 4 6 8 10 12 14 16)
67   "To override `tab-stop-list'."
68   :type '(repeat integer)
69   :group 'riece-looks)
70
71 (defcustom riece-inhibit-startup-message nil
72   "If non-nil, the startup message will not be displayed."
73   :group 'riece-looks
74   :type 'boolean)
75
76 (defcustom riece-directory "~/.riece"
77   "Where to look for data files."
78   :type 'directory
79   :group 'riece-options)
80
81 (defcustom riece-addon-directory
82   (expand-file-name "addons" riece-directory)
83   "Where to look for add-on files."
84   :type 'directory
85   :group 'riece-options)
86   
87 (defcustom riece-variables-file
88   (expand-file-name "init" riece-directory)
89   "Where to look for variables."
90   :type 'file
91   :group 'riece-options)
92
93 (defcustom riece-saved-variables-file
94   (expand-file-name "save" riece-directory)
95   "Where to look for variables.
96 This file was saved the last session."
97   :type 'file
98   :group 'riece-options)
99
100 (defcustom riece-variables-files
101   (list riece-saved-variables-file riece-variables-file)
102   "Where to look for variables.  Helps to remove clutter from your .emacs.
103 This feature is most likely to dissappear in near future.  The preferred
104 way is to put Riece variables on .emacs or file loaded from there."
105   :type '(repeat (file :tag "Initialization File"))
106   :group 'riece-options)
107
108 (defcustom riece-addons '(riece-highlight riece-ctcp)
109   "Add-ons insinuated into Riece."
110   :type '(repeat symbol)
111   :group 'riece-options)
112
113 (defgroup riece-server nil
114   "Server settings"
115   :prefix "riece-"
116   :group 'riece)
117
118 (defgroup riece-channel nil
119   "Channel settings"
120   :prefix "riece-"
121   :group 'riece)
122
123 (define-widget 'riece-service-spec 'radio
124   "Edit service spec entries"
125   :convert-widget 'riece-service-spec-convert)
126
127 (defun riece-service-spec-convert (widget)
128   (widget-put widget :args '((integer :tag "Port Number")
129                              (string :tag "Name")))
130   widget)
131
132 (define-widget 'riece-server-spec 'repeat
133   "Edit server spec entries"
134   :match (lambda (widget value)
135            (eval `(and ,@(mapcar
136                           (lambda (entry)
137                             (or (stringp (cdr entry))
138                                 (listp (cdr entry))))
139                           value))))
140   :convert-widget 'riece-server-spec-convert)
141
142 (defun riece-server-spec-convert (widget)
143   (let* ((host '(const :format "" :value :host))
144          (service '(const :format "" :value :service))
145          (host
146           `(group :inline t ,host (string :tag "Host")))
147          (service
148           `(group :inline t ,service riece-service-spec))
149          (spec
150           `(cons (string :tag "Name")
151                  (radio (string :tag "Host")
152                         (list ,host ,service))))
153          (args (list spec)))
154     (widget-put widget :args args)
155     widget))
156   
157 (defcustom riece-server-alist nil
158   "An alist mapping server names to plist."
159   :type 'riece-server-spec
160   :group 'riece-server)
161
162 (defcustom riece-server (getenv "IRCSERVER")
163   "IRC server host we are connecting to."
164   :type 'string
165   :group 'riece-server)
166
167 (defcustom riece-default-password (getenv "IRCPASSWORD")
168   "Your password."
169   :type '(radio (string :tag "Password")
170                 (const :tag "No" nil))
171   :group 'riece-server)
172
173 (defcustom riece-username (or (getenv "IRCNAME")
174                               (user-real-login-name))
175   "Your user name."
176   :type 'string
177   :group 'riece-server)
178
179 (defcustom riece-nickname (or (getenv "IRCNICK")
180                               (user-real-login-name))
181   "Your nickname."
182   :type 'string
183   :group 'riece-server)
184
185 (defcustom riece-startup-channel-list nil
186   "A list of channels to join automatically at startup."
187   :type '(repeat (string :tag "Startup Channel"))
188   :group 'riece-channel)
189
190 (defcustom riece-retry-with-new-nickname nil
191   "When nickname has already been in use, grow-tail automatically."
192   :type 'boolean
193   :group 'riece-server)
194
195 (defcustom riece-channel-buffer-mode t
196   "When non-nil, Riece will display a channel buffer."
197   :type 'boolean
198   :group 'riece-looks)
199
200 (defcustom riece-user-list-buffer-mode t
201   "When non-nil, Riece will display a nick list buffer."
202   :type 'boolean
203   :group 'riece-looks)
204
205 (defcustom riece-channel-list-buffer-mode t
206   "When non-nil, Riece will display a channel list buffer."
207   :type 'boolean
208   :group 'riece-looks)
209
210 (defcustom riece-default-freeze nil
211   "If non nil, channel buffer local freeze flag is on at starting."
212   :type 'boolean
213   :group 'riece-looks)
214
215 (defcustom riece-default-own-freeze nil
216   "If non nil, channel buffer local own freeze flag is on at starting."
217   :type 'boolean
218   :group 'riece-looks)
219
220 (defcustom riece-default-channel-binding nil
221   "The channel list to bind the channel number when joining."
222   :type '(repeat (radio (string :tag "Bound Channel")
223                         (const nil)))
224   :group 'riece-channel)
225
226 (defcustom riece-blink-parens nil
227   "Should we blink matching parenthesis in the command buffer?"
228   :type 'boolean
229   :group 'riece-options)
230
231 (defcustom riece-quit-message nil
232   "Default signoff message."
233   :type '(radio (string :tag "Signoff message"))
234   :group 'riece-options)
235
236 (defcustom riece-gather-channel-modes t
237   "If non-nil, gather channel modes when we join a channel."
238   :type 'boolean
239   :group 'riece-options)
240
241 (defcustom riece-connection-timeout 60
242   "Default timeout interval."
243   :type 'integer
244   :group 'riece-server)
245   
246 (defcustom riece-buffer-dispose-function #'bury-buffer
247   "Function called after the buffer was disposed."
248   :type 'function
249   :group 'riece-options)
250
251 (defcustom riece-format-time-function #'current-time-string
252   "Function to convert the specified time to the human readable form."
253   :type 'function
254   :group 'riece-options)
255
256 (provide 'riece-options)
257
258 ;;; riece-options.el ends here