[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/erc/erc-track.el,v
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/erc/erc-track.el,v |
Date: |
Sun, 01 Apr 2007 13:36:44 +0000 |
CVSROOT: /cvsroot/emacs
Module name: emacs
Changes by: Miles Bader <miles> 07/04/01 13:36:38
Index: lisp/erc/erc-track.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/erc/erc-track.el,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- lisp/erc/erc-track.el 21 Jan 2007 02:47:36 -0000 1.6
+++ lisp/erc/erc-track.el 1 Apr 2007 13:36:37 -0000 1.7
@@ -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 <address@hidden>
;; 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 @@
(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)
+ ;; 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 '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)
+ ;; 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)))
-
-;;;###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)))
+ (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 @@
(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 @@
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 @@
(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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/lisp/erc/erc-track.el,v,
Miles Bader <=