emacs-diffs
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]