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