diff options
author | Miles Bader <miles@gnu.org> | 2007-04-01 13:36:38 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 2007-04-01 13:36:38 +0000 |
commit | ff59d266c7dcb9c6f7cc7ff7942510bda288e167 (patch) | |
tree | 9cc762d166a00ae8d02c9f079890afb68125072e /lisp/erc/erc-track.el | |
parent | 25c8c1594fe7ba177ec0621260304181b7052af3 (diff) | |
download | emacs-ff59d266c7dcb9c6f7cc7ff7942510bda288e167.tar.gz |
Release ERC 5.2.
I have updated the version of ERC to 5.2, since it fixes a bug with C-c
C-SPC being bound globally by default. For the full list of changes in
this version, see etc/ERC-NEWS.
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-687
Creator: Michael Olson <mwolson@gnu.org>
Diffstat (limited to 'lisp/erc/erc-track.el')
-rw-r--r-- | lisp/erc/erc-track.el | 187 |
1 files changed, 142 insertions, 45 deletions
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el index 0fa550a5838..4a8b673d46b 100644 --- a/lisp/erc/erc-track.el +++ b/lisp/erc/erc-track.el @@ -1,6 +1,7 @@ ;;; erc-track.el --- Track modified channel buffers -;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, +;; 2007 Free Software Foundation, Inc. ;; Author: Mario Lang <mlang@delysid.org> ;; Keywords: comm, faces @@ -46,12 +47,33 @@ "Track active buffers and show activity in the modeline." :group 'erc) +(defcustom erc-track-enable-keybindings 'ask + "Whether to enable the ERC track keybindings, namely: +`C-c C-SPC' and `C-c C-@', which both do the same thing. + +The default is to check to see whether these keys are used +already: if not, then enable the ERC track minor mode, which +provides these keys. Otherwise, do not touch the keys. + +This can alternatively be set to either t or nil, which indicate +respectively always to enable ERC track minor mode or never to +enable ERC track minor mode. + +The reason for using this default value is to both (1) adhere to +the Emacs development guidelines which say not to touch keys of +the form C-c C-<something> and also (2) to meet the expectations +of long-time ERC users, many of whom rely on these keybindings." + :group 'erc-track + :type '(choice (const :tag "Ask, if used already" ask) + (const :tag "Enable" t) + (const :tag "Disable" nil))) + (defcustom erc-track-visibility t "Where do we look for buffers to determine their visibility? The value of this variable determines, when a buffer is considered visible or invisible. New messages in invisible buffers are tracked, while switching to visible buffers when they are tracked removes them -from the list. See also `erc-track-when-inactive-mode'. +from the list. See also `erc-track-when-inactive'. Possible values are: @@ -488,45 +510,124 @@ START is the minimum length of the name used." (equal (erc-unique-substrings '("abc" "abcdefg")) '("abc" "abcd")))))) +;;; Minor mode + +;; Play nice with other IRC clients (and Emacs development rules) by +;; making this a minor mode + +(defvar erc-track-minor-mode-map (make-sparse-keymap) + "Keymap for rcirc track minor mode.") + +(define-key erc-track-minor-mode-map (kbd "C-c C-@") 'erc-track-switch-buffer) +(define-key erc-track-minor-mode-map (kbd "C-c C-SPC") + 'erc-track-switch-buffer) + +;;;###autoload +(define-minor-mode erc-track-minor-mode + "Global minor mode for tracking ERC buffers and showing activity in the +mode line. + +This exists for the sole purpose of providing the C-c C-SPC and +C-c C-@ keybindings. Make sure that you have enabled the track +module, otherwise the keybindings will not do anything useful." + :init-value nil + :lighter "" + :keymap erc-track-minor-mode-map + :global t + :group 'erc-track) + +(defun erc-track-minor-mode-maybe () + "Enable `erc-track-minor-mode', depending on `erc-track-enable-keybindings'." + (unless (or erc-track-minor-mode + ;; don't start the minor mode until we have an ERC + ;; process running, because we don't want to prompt the + ;; user while starting Emacs + (null (erc-buffer-list))) + (cond ((eq erc-track-enable-keybindings 'ask) + (let ((key (or (and (key-binding (kbd "C-c C-SPC")) "C-SPC") + (and (key-binding (kbd "C-c C-@")) "C-@")))) + (if key + (if (y-or-n-p + (concat "The C-c " key " binding is in use;" + " override it for tracking? ")) + (progn + (message (concat "Will change it; set" + " `erc-track-enable-keybindings'" + " to disable this message")) + (sleep-for 3) + (erc-track-minor-mode 1)) + (message (concat "Not changing it; set" + " `erc-track-enable-keybindings'" + " to disable this message")) + (sleep-for 3)) + (erc-track-minor-mode 1)))) + ((eq erc-track-enable-keybindings t) + (erc-track-minor-mode 1)) + (t nil)))) + ;;; Module ;;;###autoload (autoload 'erc-track-mode "erc-track" nil t) -(define-erc-module track track-modified-channels +(define-erc-module track nil "This mode tracks ERC channel buffers with activity." - ((erc-track-add-to-mode-line erc-track-position-in-mode-line) - (setq erc-modified-channels-object (erc-modified-channels-object nil)) - (erc-update-mode-line) - (if (featurep 'xemacs) - (defadvice switch-to-buffer (after erc-update (&rest args) activate) - (erc-modified-channels-update)) - (add-hook 'window-configuration-change-hook 'erc-modified-channels-update)) - (add-hook 'erc-insert-post-hook 'erc-track-modified-channels) - (add-hook 'erc-disconnected-hook 'erc-modified-channels-update)) - ((erc-track-remove-from-mode-line) - (if (featurep 'xemacs) - (ad-disable-advice 'switch-to-buffer 'after 'erc-update) - (remove-hook 'window-configuration-change-hook - 'erc-modified-channels-update)) - (remove-hook 'erc-disconnected-hook 'erc-modified-channels-update) - (remove-hook 'erc-insert-post-hook 'erc-track-modified-channels))) - -;;;###autoload (autoload 'erc-track-when-inactive-mode "erc-track" nil t) -(define-erc-module track-when-inactive nil - "This mode enables channel tracking even for visible buffers, -if you are inactivity." - ((if (featurep 'xemacs) - (defadvice switch-to-buffer (after erc-update-when-inactive (&rest args) activate) - (erc-user-is-active)) - (add-hook 'window-configuration-change-hook 'erc-user-is-active)) - (add-hook 'erc-send-completed-hook 'erc-user-is-active) - (add-hook 'erc-server-001-functions 'erc-user-is-active)) - ((erc-track-remove-from-mode-line) - (if (featurep 'xemacs) - (ad-disable-advice 'switch-to-buffer 'after 'erc-update-when-inactive) - (remove-hook 'window-configuration-change-hook 'erc-user-is-active)) - (remove-hook 'erc-send-completed-hook 'erc-user-is-active) - (remove-hook 'erc-server-001-functions 'erc-user-is-active) - (remove-hook 'erc-timer-hook 'erc-user-is-active))) + ;; Enable: + ((when (boundp 'erc-track-when-inactive) + (if erc-track-when-inactive + (progn + (if (featurep 'xemacs) + (defadvice switch-to-buffer (after erc-update-when-inactive + (&rest args) activate) + (erc-user-is-active)) + (add-hook 'window-configuration-change-hook 'erc-user-is-active)) + (add-hook 'erc-send-completed-hook 'erc-user-is-active) + (add-hook 'erc-server-001-functions 'erc-user-is-active)) + (erc-track-add-to-mode-line erc-track-position-in-mode-line) + (setq erc-modified-channels-object (erc-modified-channels-object nil)) + (erc-update-mode-line) + (if (featurep 'xemacs) + (defadvice switch-to-buffer (after erc-update (&rest args) activate) + (erc-modified-channels-update)) + (add-hook 'window-configuration-change-hook + 'erc-modified-channels-update)) + (add-hook 'erc-insert-post-hook 'erc-track-modified-channels) + (add-hook 'erc-disconnected-hook 'erc-modified-channels-update)) + ;; enable the tracking keybindings + (erc-track-minor-mode-maybe))) + ;; Disable: + ((when (boundp 'erc-track-when-inactive) + (erc-track-remove-from-mode-line) + (if erc-track-when-inactive + (progn + (if (featurep 'xemacs) + (ad-disable-advice 'switch-to-buffer 'after + 'erc-update-when-inactive) + (remove-hook 'window-configuration-change-hook + 'erc-user-is-active)) + (remove-hook 'erc-send-completed-hook 'erc-user-is-active) + (remove-hook 'erc-server-001-functions 'erc-user-is-active) + (remove-hook 'erc-timer-hook 'erc-user-is-active)) + (if (featurep 'xemacs) + (ad-disable-advice 'switch-to-buffer 'after 'erc-update) + (remove-hook 'window-configuration-change-hook + 'erc-modified-channels-update)) + (remove-hook 'erc-disconnected-hook 'erc-modified-channels-update) + (remove-hook 'erc-insert-post-hook 'erc-track-modified-channels)) + ;; disable the tracking keybindings + (when erc-track-minor-mode + (erc-track-minor-mode -1))))) + +(defcustom erc-track-when-inactive nil + "Enable channel tracking even for visible buffers, if you are +inactive." + :group 'erc-track + :type 'boolean + :set (lambda (sym val) + (if erc-track-mode + (progn + (erc-track-disable) + (set sym val) + (erc-track-enable)) + (set sym val)))) ;;; Visibility @@ -545,7 +646,7 @@ only consider active buffers visible.") (defun erc-buffer-visible (buffer) "Return non-nil when the buffer is visible." - (if erc-track-when-inactive-mode + (if erc-track-when-inactive (when erc-buffer-activity; could be nil (and (get-buffer-window buffer erc-track-visibility) (<= (erc-time-diff erc-buffer-activity (erc-current-time)) @@ -815,7 +916,9 @@ relative to `erc-track-switch-direction'" switch back to the last non-ERC buffer visited. Next is defined by `erc-track-switch-direction', a negative argument will reverse this." (interactive "p") - (when erc-track-mode + (if (not erc-track-mode) + (message (concat "Enable the ERC track module if you want to use the" + " tracking minor mode")) (cond (erc-modified-channels-alist ;; if we're not in erc-mode, set this buffer to return to (unless (eq major-mode 'erc-mode) @@ -828,12 +931,6 @@ switch back to the last non-ERC buffer visited. Next is defined by (buffer-live-p erc-track-last-non-erc-buffer)) (switch-to-buffer erc-track-last-non-erc-buffer))))) -;; These bindings are global, because they pop us from any other -;; buffer to an active ERC buffer! - -(global-set-key (kbd "C-c C-@") 'erc-track-switch-buffer) -(global-set-key (kbd "C-c C-SPC") 'erc-track-switch-buffer) - (provide 'erc-track) ;;; erc-track.el ends here |