1;; erc-menu.el -- Menu-bar definitions for ERC
2
3;; Copyright (C) 2001, 2002, 2004, 2005, 2006,
4;;   2007 Free Software Foundation, Inc.
5
6;; Author: Mario Lang <mlang@delysid.org>
7;; Keywords: comm, processes, menu
8
9;; This file is part of GNU Emacs.
10
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)
14;; any later version.
15
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.
20
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.
25
26;;; Commentary:
27
28;; Loading this file defines a menu for ERC.
29
30;;; Code:
31
32(require 'erc)
33(require 'easymenu)
34
35(defvar erc-menu-definition
36  (list "ERC"
37	["Connect to server..." erc t]
38	["Disconnect from server..." erc-quit-server erc-server-connected]
39	"-"
40	["List channels..." erc-list-channels
41	 (and erc-server-connected (fboundp 'erc-list-channels))]
42	["Join channel..." erc-join-channel erc-server-connected]
43	["Start a query..." erc-cmd-QUERY erc-server-connected]
44	["Input action..." erc-input-action (erc-default-target)]
45	"-"
46	(list
47	 "Current channel"
48	 ["List users in channel" erc-channel-names erc-channel-users]
49	 ["List channel operators" erc-cmd-OPS erc-channel-users]
50	 ["Set topic..." erc-set-topic
51	  (and (and (erc-default-target) (not (erc-query-buffer-p)))
52	       (or (not (member "t" erc-channel-modes))
53		   (erc-channel-user-op-p (erc-current-nick))))]
54	 (list "Channel modes"
55	       ["Change mode..." erc-insert-mode-command
56		(erc-channel-user-op-p (erc-current-nick))]
57	       ["No external send" (erc-toggle-channel-mode "n")
58		:active (erc-channel-user-op-p (erc-current-nick))
59		:style toggle :selected (member "n" erc-channel-modes)]
60	       ["Topic set by channel operator" (erc-toggle-channel-mode "t")
61		:style toggle :selected (member "t" erc-channel-modes)
62		:active (erc-channel-user-op-p (erc-current-nick))]
63	       ["Invite only" (erc-toggle-channel-mode "i")
64		:style toggle :selected (member "i" erc-channel-modes)
65		:active (erc-channel-user-op-p (erc-current-nick))]
66	       ["Private" (erc-toggle-channel-mode "p")
67		:style toggle :selected (member "p" erc-channel-modes)
68		:active (erc-channel-user-op-p (erc-current-nick))]
69	       ["Secret" (erc-toggle-channel-mode "s")
70		:style toggle :selected (member "s" erc-channel-modes)
71		:active (erc-channel-user-op-p (erc-current-nick))]
72	       ["Moderated" (erc-toggle-channel-mode "m")
73		:style toggle :selected (member "m" erc-channel-modes)
74		:active (erc-channel-user-op-p (erc-current-nick))]
75	       ["Set a limit..." erc-set-channel-limit
76		(erc-channel-user-op-p (erc-current-nick))]
77	       ["Set a key..." erc-set-channel-key
78		(erc-channel-user-op-p (erc-current-nick))])
79	 ["Leave this channel..." erc-part-from-channel erc-channel-users])
80	"-"
81	(list "Pals, fools and other keywords"
82	      ["Add pal..." erc-add-pal]
83	      ["Delete pal..." erc-delete-pal]
84	      ["Add fool..." erc-add-fool]
85	      ["Delete fool..." erc-delete-fool]
86	      ["Add keyword..." erc-add-keyword]
87	      ["Delete keyword..." erc-delete-keyword]
88	      ["Add dangerous host..." erc-add-dangerous-host]
89	      ["Delete dangerous host..." erc-delete-dangerous-host])
90	"-"
91	(list "IRC services"
92	      ["Identify to NickServ..." erc-nickserv-identify
93	       (and erc-server-connected (functionp 'erc-nickserv-identify))])
94	"-"
95	["Save buffer in log" erc-save-buffer-in-logs
96	 (fboundp 'erc-save-buffer-in-logs)]
97	["Truncate buffer" erc-truncate-buffer (fboundp 'erc-truncate-buffer)]
98	"-"
99	["Customize ERC" (customize-group 'erc) t]
100	["Enable/Disable ERC Modules" (customize-variable 'erc-modules) t]
101	["Show ERC version" erc-version t])
102  "ERC menu definition.")
103
104(defvar erc-menu-defined nil
105  "Internal variable used to keep track of whether we've defined the
106ERC menu yet.")
107
108;;;###autoload (autoload 'erc-menu-mode "erc-menu" nil t)
109(define-erc-module menu nil
110  "Enable a menu in ERC buffers."
111  ((unless erc-menu-defined
112     ;; make sure the menu only gets defined once, since Emacs 22
113     ;; activates it immediately
114     (easy-menu-define erc-menu erc-mode-map "ERC menu" erc-menu-definition)
115     (setq erc-menu-defined t))
116   (if (featurep 'xemacs)
117       (progn
118	 ;; the menu isn't automatically added to the menu bar in
119	 ;; XEmacs
120	 (add-hook 'erc-mode-hook 'erc-menu-add)
121	 (dolist (buffer (erc-buffer-list))
122	   (with-current-buffer buffer (erc-menu-add))))
123     (erc-menu-add)))
124  ((if (featurep 'xemacs)
125       (progn
126	 (remove-hook 'erc-mode-hook 'erc-menu-add)
127	 (dolist (buffer (erc-buffer-list))
128	   (with-current-buffer buffer (erc-menu-remove))))
129     (erc-menu-remove)
130     ;; `easy-menu-remove' is a no-op in Emacs 22
131     (message "You might have to restart Emacs to remove the ERC menu"))))
132
133;; silence byte-compiler warning
134(eval-when-compile
135  (defvar erc-menu nil))
136
137(defun erc-menu-add ()
138  "Add the ERC menu to the current buffer."
139  (easy-menu-add erc-menu erc-mode-map))
140
141(defun erc-menu-remove ()
142  "Remove the ERC menu from the current buffer."
143  (easy-menu-remove erc-menu))
144
145(provide 'erc-menu)
146
147;;; erc-menu.el ends here
148;;
149;; Local Variables:
150;; indent-tabs-mode: t
151;; tab-width: 8
152;; End:
153
154;; arch-tag: 671219f2-b082-4753-a185-1d0c7e0c05bd
155