summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2014-09-03 15:10:15 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2014-09-03 15:10:15 -0400
commit23aec6771492c8e5104be5c44d33e75492ad055a (patch)
tree1aa694babcaf04aa4147578ce1b44ff74c1fd897 /lisp
parenteda0450a3aea160f3e6899b8c0bd8a2ac9ab7866 (diff)
downloademacs-23aec6771492c8e5104be5c44d33e75492ad055a.tar.gz
* lisp/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.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog9
-rw-r--r--lisp/progmodes/which-func.el28
2 files changed, 22 insertions, 15 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d4bb37d32c6..d8c48287c14 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -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
diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el
index aa68f9fcc1a..e62ad271089 100644
--- a/lisp/progmodes/which-func.el
+++ b/lisp/progmodes/which-func.el
@@ -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