summaryrefslogtreecommitdiff
path: root/lisp/erc/erc-menu.el
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>2007-01-17 18:17:25 +0000
committerMiles Bader <miles@gnu.org>2007-01-17 18:17:25 +0000
commit6904f7fe8ed11bf4c94c009b4ef300f4ccdfa2e6 (patch)
tree5d3f9cf0ca50143225d6e0622620942f90d90d78 /lisp/erc/erc-menu.el
parentc5f847b6b3c1733731e079c3adaca0c30ed69522 (diff)
downloademacs-6904f7fe8ed11bf4c94c009b4ef300f4ccdfa2e6.tar.gz
Merge from erc--main--0
Highlights: - Display messages starting with "/" but are not commands correctly. - Add erc-capab.el file, with capab-identify module. - Fix various ERC menu bugs and add "Current channel" submenu. - Make header-line display look nicer. - Fix warning when auto-authenticating to bitlbee. - New option erc-system-name allows the hostname next to your nick to be customized. Revision: emacs@sv.gnu.org/emacs--devo--0--patch-599 Creator: Michael Olson <mwolson@gnu.org>
Diffstat (limited to 'lisp/erc/erc-menu.el')
-rw-r--r--lisp/erc/erc-menu.el118
1 files changed, 75 insertions, 43 deletions
diff --git a/lisp/erc/erc-menu.el b/lisp/erc/erc-menu.el
index a2dc7a1b2f2..bc6afc9c766 100644
--- a/lisp/erc/erc-menu.el
+++ b/lisp/erc/erc-menu.el
@@ -28,7 +28,7 @@
;;; Code:
-;(require 'erc)
+(require 'erc)
(require 'easymenu)
(defvar erc-menu-definition
@@ -40,41 +40,43 @@
(and erc-server-connected (fboundp 'erc-list-channels))]
["Join channel..." erc-join-channel erc-server-connected]
["Start a query..." erc-cmd-QUERY erc-server-connected]
- "-"
- ["List users in channel" erc-channel-names erc-channel-users]
- ["List channel operators" erc-cmd-OPS erc-channel-users]
["Input action..." erc-input-action (erc-default-target)]
- ["Set topic..." erc-set-topic
- (and (and (erc-default-target) (not (erc-query-buffer-p)))
- (or (not (member "t" erc-channel-modes))
- (erc-channel-user-op-p (erc-current-nick))))]
- (list "Channel modes"
- ["Change mode..." erc-insert-mode-command
- (erc-channel-user-op-p (erc-current-nick))]
- ["No external send" (erc-toggle-channel-mode "n")
- :active (erc-channel-user-op-p (erc-current-nick))
- :style toggle :selected (member "n" erc-channel-modes)]
- ["Topic set by channel operator" (erc-toggle-channel-mode "t")
- :style toggle :selected (member "t" erc-channel-modes)
- :active (erc-channel-user-op-p (erc-current-nick))]
- ["Invite only" (erc-toggle-channel-mode "i")
- :style toggle :selected (member "i" erc-channel-modes)
- :active (erc-channel-user-op-p (erc-current-nick))]
- ["Private" (erc-toggle-channel-mode "p")
- :style toggle :selected (member "p" erc-channel-modes)
- :active (erc-channel-user-op-p (erc-current-nick))]
- ["Secret" (erc-toggle-channel-mode "s")
- :style toggle :selected (member "s" erc-channel-modes)
- :active (erc-channel-user-op-p (erc-current-nick))]
- ["Moderated" (erc-toggle-channel-mode "m")
- :style toggle :selected (member "m" erc-channel-modes)
- :active (erc-channel-user-op-p (erc-current-nick))]
- ["Set a limit..." erc-set-channel-limit
- (erc-channel-user-op-p (erc-current-nick))]
- ["Set a key..." erc-set-channel-key
- (erc-channel-user-op-p (erc-current-nick))])
- ["Leave this channel..." erc-part-from-channel erc-channel-users]
"-"
+ (list
+ "Current channel"
+ ["List users in channel" erc-channel-names erc-channel-users]
+ ["List channel operators" erc-cmd-OPS erc-channel-users]
+ ["Set topic..." erc-set-topic
+ (and (and (erc-default-target) (not (erc-query-buffer-p)))
+ (or (not (member "t" erc-channel-modes))
+ (erc-channel-user-op-p (erc-current-nick))))]
+ (list "Channel modes"
+ ["Change mode..." erc-insert-mode-command
+ (erc-channel-user-op-p (erc-current-nick))]
+ ["No external send" (erc-toggle-channel-mode "n")
+ :active (erc-channel-user-op-p (erc-current-nick))
+ :style toggle :selected (member "n" erc-channel-modes)]
+ ["Topic set by channel operator" (erc-toggle-channel-mode "t")
+ :style toggle :selected (member "t" erc-channel-modes)
+ :active (erc-channel-user-op-p (erc-current-nick))]
+ ["Invite only" (erc-toggle-channel-mode "i")
+ :style toggle :selected (member "i" erc-channel-modes)
+ :active (erc-channel-user-op-p (erc-current-nick))]
+ ["Private" (erc-toggle-channel-mode "p")
+ :style toggle :selected (member "p" erc-channel-modes)
+ :active (erc-channel-user-op-p (erc-current-nick))]
+ ["Secret" (erc-toggle-channel-mode "s")
+ :style toggle :selected (member "s" erc-channel-modes)
+ :active (erc-channel-user-op-p (erc-current-nick))]
+ ["Moderated" (erc-toggle-channel-mode "m")
+ :style toggle :selected (member "m" erc-channel-modes)
+ :active (erc-channel-user-op-p (erc-current-nick))]
+ ["Set a limit..." erc-set-channel-limit
+ (erc-channel-user-op-p (erc-current-nick))]
+ ["Set a key..." erc-set-channel-key
+ (erc-channel-user-op-p (erc-current-nick))])
+ ["Leave this channel..." erc-part-from-channel erc-channel-users]
+ "-")
(list "Pals, fools and other keywords"
["Add pal..." erc-add-pal]
["Delete pal..." erc-delete-pal]
@@ -98,16 +100,46 @@
["Show ERC version" erc-version t])
"ERC menu definition.")
-;; `erc-mode-map' must be defined before doing this
-(eval-after-load "erc"
- '(progn
- (easy-menu-define erc-menu erc-mode-map "ERC menu" erc-menu-definition)
- (easy-menu-add erc-menu erc-mode-map)
+(defvar erc-menu-defined nil
+ "Internal variable used to keep track of whether we've defined the
+ERC menu yet.")
- ;; for some reason the menu isn't automatically added to the menu bar
- (when (featurep 'xemacs)
- (add-hook 'erc-mode-hook
- (lambda () (easy-menu-add erc-menu erc-mode-map))))))
+;;;###autoload (autoload 'erc-menu-mode "erc-menu" nil t)
+(define-erc-module menu nil
+ "Enable a menu in ERC buffers."
+ ((unless erc-menu-defined
+ ;; make sure the menu only gets defined once, since Emacs 22
+ ;; activates it immediately
+ (easy-menu-define erc-menu erc-mode-map "ERC menu" erc-menu-definition)
+ (setq erc-menu-defined t))
+ (if (featurep 'xemacs)
+ (progn
+ ;; the menu isn't automatically added to the menu bar in
+ ;; XEmacs
+ (add-hook 'erc-mode-hook 'erc-menu-add)
+ (dolist (buffer (erc-buffer-list))
+ (with-current-buffer buffer (erc-menu-add))))
+ (erc-menu-add)))
+ ((if (featurep 'xemacs)
+ (progn
+ (remove-hook 'erc-mode-hook 'erc-menu-add)
+ (dolist (buffer (erc-buffer-list))
+ (with-current-buffer buffer (erc-menu-remove))))
+ (erc-menu-remove)
+ ;; `easy-menu-remove' is a no-op in Emacs 22
+ (message "You might have to restart Emacs to remove the ERC menu"))))
+
+;; silence byte-compiler warning
+(eval-when-compile
+ (defvar erc-menu nil))
+
+(defun erc-menu-add ()
+ "Add the ERC menu to the current buffer."
+ (easy-menu-add erc-menu erc-mode-map))
+
+(defun erc-menu-remove ()
+ "Remove the ERC menu from the current buffer."
+ (easy-menu-remove erc-menu))
(provide 'erc-menu)