]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/progmodes/which-func.el (which-func-ff-hook): Obey pre-existing
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 3 Sep 2014 19:10:15 +0000 (15:10 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 3 Sep 2014 19:10:15 +0000 (15:10 -0400)
buffer-local setting of which-func-mode.
(which-func-mode): Use defvar-local.
(which-function-mode): Don't reset which-func-mode in each buffer since
it might have been set by someone else.
(which-func-update-ediff-windows): Check which-function-mode.

lisp/ChangeLog
lisp/progmodes/which-func.el

index d4bb37d32c6ef7b541feddae414580808f8c5e48..d8c48287c1407f2fb7f46aed2574615882ecd963 100644 (file)
@@ -1,3 +1,12 @@
+2014-09-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * progmodes/which-func.el (which-func-ff-hook): Obey pre-existing
+       buffer-local setting of which-func-mode.
+       (which-func-mode): Use defvar-local.
+       (which-function-mode): Don't reset which-func-mode in each buffer since
+       it might have been set by someone else.
+       (which-func-update-ediff-windows): Check which-function-mode.
+
 2014-09-03  Martin Rudalics  <rudalics@gmx.at>
 
        * frame.el (frame-initialize): Remove horizontal-scroll-bars
index aa68f9fcc1ad3dcf2efe5992e05fb10729d94f33..e62ad271089812c35c36c46fc5b6731911aefe78 100644 (file)
@@ -187,21 +187,20 @@ and you want to simplify them for the mode line
                which-func-unknown))))
 ;;;###autoload (put 'which-func-current 'risky-local-variable t)
 
-(defvar which-func-mode nil
+(defvar-local which-func-mode nil
   "Non-nil means display current function name in mode line.
 This makes a difference only if `which-function-mode' is non-nil.")
-(make-variable-buffer-local 'which-func-mode)
-;;(put 'which-func-mode 'permanent-local t)
 
 (add-hook 'find-file-hook 'which-func-ff-hook t)
 
 (defun which-func-ff-hook ()
   "File find hook for Which Function mode.
 It creates the Imenu index for the buffer, if necessary."
-  (setq which-func-mode
-       (and which-function-mode
-            (or (eq which-func-modes t)
-                (member major-mode which-func-modes))))
+  (unless (local-variable-p 'which-func-mode)
+    (setq which-func-mode
+          (and which-function-mode
+               (or (eq which-func-modes t)
+                   (member major-mode which-func-modes)))))
 
   (condition-case err
       (if (and which-func-mode
@@ -259,15 +258,13 @@ in certain major modes."
       ;;Turn it on
       (progn
         (setq which-func-update-timer
-              (run-with-idle-timer idle-update-delay t 'which-func-update))
+              (run-with-idle-timer idle-update-delay t #'which-func-update))
         (dolist (buf (buffer-list))
           (with-current-buffer buf
-            (setq which-func-mode
-                  (or (eq which-func-modes t)
-                      (member major-mode which-func-modes))))))
-    ;; Turn it off
-    (dolist (buf (buffer-list))
-      (with-current-buffer buf (setq which-func-mode nil)))))
+            (unless (local-variable-p 'which-func-mode)
+              (setq which-func-mode
+                    (or (eq which-func-modes t)
+                        (member major-mode which-func-modes)))))))))
 
 (defvar which-function-imenu-failed nil
   "Locally t in a buffer if `imenu--make-index-alist' found nothing there.")
@@ -347,10 +344,11 @@ If no function name is found, return nil."
 (defvar ediff-window-B)
 (defvar ediff-window-C)
 
+;; FIXME: Why does ediff require special support?
 (defun which-func-update-ediff-windows ()
   "Update Which-Function mode display for Ediff windows.
 This function is meant to be called from `ediff-select-hook'."
-  (when (eq major-mode 'ediff-mode)
+  (when (and (derived-mode-p 'ediff-mode) which-function-mode)
     (when ediff-window-A
       (which-func-update-1 ediff-window-A))
     (when ediff-window-B