]> code.delx.au - gnu-emacs/blobdiff - lisp/which-func.el
(latex-run-command): Doc fix.
[gnu-emacs] / lisp / which-func.el
index cf0e2e571dc0b06b6297d7621ad01111e65068b0..b77f0bcd65bc3e5c02c84abf0f7133069fc3f538 100644 (file)
@@ -72,7 +72,8 @@
   :version "20.3")
 
 (defcustom which-func-modes 
-  '(emacs-lisp-mode c-mode c++-mode perl-mode makefile-mode sh-mode)
+  '(emacs-lisp-mode c-mode c++-mode perl-mode makefile-mode sh-mode
+                   fortran-mode)
   "List of major modes for which Which Function mode should be used.
 For other modes it is disabled.  If this is equal to t,
 then Which Function mode is enabled in any major mode that supports it."
@@ -105,7 +106,7 @@ Zero means compute the Imenu menu regardless of size."
   "*Toggle `which-func-mode'.
 You must modify via \\[customize] for this variable to have an effect."
   :set #'(lambda (symbol value)
-          (which-func-mode (or value 0)))
+          (which-func-mode (if value 1 0)))
   :initialize 'custom-initialize-default
   :type    'boolean
   :group   'which-func
@@ -136,12 +137,15 @@ It creates the Imenu index for the buffer, if necessary."
       (setq which-func-mode which-func-mode-global)
     (setq which-func-mode nil))
 
-  (if (and which-func-mode
-           (not (member major-mode which-func-non-auto-modes))
-           (or (< buffer-saved-size which-func-maxout)
-               (= which-func-maxout 0)))
-      (setq imenu--index-alist
-           (save-excursion (funcall imenu-create-index-function)))))
+  (condition-case nil
+      (if (and which-func-mode
+              (not (member major-mode which-func-non-auto-modes))
+              (or (< buffer-saved-size which-func-maxout)
+                  (= which-func-maxout 0)))
+         (setq imenu--index-alist
+               (save-excursion (funcall imenu-create-index-function))))
+    (error
+     (setq which-func-mode nil))))
 
 (defun which-func-update ()
   ;; Update the string containing the current function.
@@ -200,8 +204,9 @@ is located before first function, returns nil."
    (let ((pair (car-safe imenu--index-alist))
          (rest (cdr-safe imenu--index-alist))
          (name nil))
-     (while (and pair (or (not (number-or-marker-p (cdr pair)))
-                         (> (point) (cdr pair))))
+     (while (and (or rest pair)
+                (or (not (number-or-marker-p (cdr pair)))
+                    (> (point) (cdr pair))))
        (setq name (car pair))
        (setq pair (car-safe rest))
        (setq rest (cdr-safe rest)))