diff options
author | Miles Bader <miles@gnu.org> | 2007-01-17 18:17:25 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 2007-01-17 18:17:25 +0000 |
commit | 6904f7fe8ed11bf4c94c009b4ef300f4ccdfa2e6 (patch) | |
tree | 5d3f9cf0ca50143225d6e0622620942f90d90d78 /lisp/erc/erc-menu.el | |
parent | c5f847b6b3c1733731e079c3adaca0c30ed69522 (diff) | |
download | emacs-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.el | 118 |
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) |