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