annotate lisp/which-func.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents 4486a6940607
children a24270f60a41
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20322
10d9f05af2cb Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 20321
diff changeset
1 ;;; which-func.el --- Print current function in mode line
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
21697
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
3 ;; Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: Alex Rezinsky <alexr@msil.sps.mot.com>
21697
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
6 ;; Keywords: mode-line, imenu, tools
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; any later version.
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; Boston, MA 02111-1307, USA.
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
21697
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
25 ;;; Commentary:
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
26
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
27 ;; This package prints name of function where your current point is
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
28 ;; located in mode line. It assumes that you work with imenu package
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
29 ;; and imenu--index-alist is up to date.
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30
21697
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
31 ;; KNOWN BUGS
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
32 ;; ----------
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
33 ;; Really this package shows not "function where the current point is
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
34 ;; located now", but "nearest function which defined above the current
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
35 ;; point". So if your current point is located after end of function
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
36 ;; FOO but before begin of function BAR, FOO will be displayed in mode
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
37 ;; line.
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38
21697
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
39 ;; TODO LIST
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
40 ;; ---------
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
41 ;; 1. Dependence on imenu package should be removed. Separate
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
42 ;; function determination mechanism should be used to determine the end
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
43 ;; of a function as well as the beginning of a function.
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
44 ;; 2. This package should be realized with the help of overlay
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
45 ;; properties instead of imenu--index-alist variable.
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
46
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
47 ;;; History:
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48
21697
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
49 ;; THANKS TO
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
50 ;; ---------
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
51 ;; Per Abrahamsen <abraham@iesd.auc.dk>
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
52 ;; Some ideas (inserting in mode-line, using of post-command hook
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
53 ;; and toggling this mode) have been borrowed from his package
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
54 ;; column.el
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
55 ;; Peter Eisenhauer <pipe@fzi.de>
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
56 ;; Bug fixing in case nested indexes.
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
57 ;; Terry Tateyama <ttt@ursa0.cs.utah.edu>
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
58 ;; Suggestion to use find-file-hooks for first imenu
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
59 ;; index building.
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60
21697
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
61 ;;; Code:
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
62
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
63 ;; Variables for customization
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
64 ;; ---------------------------
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
65 ;;
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 (defvar which-func-unknown "???"
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 "String to display in the mode line when current function is unknown.")
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68
21653
e95a88dc6110 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20573
diff changeset
69 (defgroup which-func nil
e95a88dc6110 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20573
diff changeset
70 "Mode to display the current function name in the modeline."
e95a88dc6110 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20573
diff changeset
71 :group 'tools
e95a88dc6110 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20573
diff changeset
72 :version "20.3")
e95a88dc6110 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20573
diff changeset
73
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 (defcustom which-func-modes
23018
114211878bf9 (which-func-modes): Add fortran-mode.
Richard M. Stallman <rms@gnu.org>
parents: 22308
diff changeset
75 '(emacs-lisp-mode c-mode c++-mode perl-mode makefile-mode sh-mode
114211878bf9 (which-func-modes): Add fortran-mode.
Richard M. Stallman <rms@gnu.org>
parents: 22308
diff changeset
76 fortran-mode)
22134
29c2db002dd5 (which-func-modes): Fix custom type.
Richard M. Stallman <rms@gnu.org>
parents: 21964
diff changeset
77 "List of major modes for which Which Function mode should be used.
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 For other modes it is disabled. If this is equal to t,
22134
29c2db002dd5 (which-func-modes): Fix custom type.
Richard M. Stallman <rms@gnu.org>
parents: 21964
diff changeset
79 then Which Function mode is enabled in any major mode that supports it."
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 :group 'which-func
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 :type '(choice (const :tag "All modes" t)
22134
29c2db002dd5 (which-func-modes): Fix custom type.
Richard M. Stallman <rms@gnu.org>
parents: 21964
diff changeset
82 (repeat (symbol :tag "Major mode"))))
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83
21964
390352ec56c6 (which-func-non-auto-modes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21960
diff changeset
84 (defcustom which-func-non-auto-modes nil
390352ec56c6 (which-func-non-auto-modes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21960
diff changeset
85 "List of major modes where Which Function mode is inactive till Imenu is used.
22134
29c2db002dd5 (which-func-modes): Fix custom type.
Richard M. Stallman <rms@gnu.org>
parents: 21964
diff changeset
86 This means that Which Function mode won't really do anything
29c2db002dd5 (which-func-modes): Fix custom type.
Richard M. Stallman <rms@gnu.org>
parents: 21964
diff changeset
87 until you use Imenu, in these modes. Note that files
29c2db002dd5 (which-func-modes): Fix custom type.
Richard M. Stallman <rms@gnu.org>
parents: 21964
diff changeset
88 larger than `which-func-maxout' behave in this way too;
29c2db002dd5 (which-func-modes): Fix custom type.
Richard M. Stallman <rms@gnu.org>
parents: 21964
diff changeset
89 Which Function mode doesn't do anything until you use Imenu."
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 :group 'which-func
22134
29c2db002dd5 (which-func-modes): Fix custom type.
Richard M. Stallman <rms@gnu.org>
parents: 21964
diff changeset
91 :type '(repeat (symbol :tag "Major mode")))
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 (defcustom which-func-maxout 100000
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 "Don't automatically compute the Imenu menu if buffer is this big or bigger.
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 Zero means compute the Imenu menu regardless of size."
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 :group 'which-func
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 :type 'integer)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 (defcustom which-func-format '(" [" which-func-current "]")
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 "Format for displaying the function in the mode line."
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 :group 'which-func
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 :type 'sexp)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103
21697
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
104 ;;;###autoload
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
105 (defcustom which-func-mode-global nil
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
106 "*Toggle `which-func-mode'.
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
107 You must modify via \\[customize] for this variable to have an effect."
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
108 :set #'(lambda (symbol value)
23355
4486a6940607 (which-func-mode-global): Make :set function
Karl Heuer <kwzh@gnu.org>
parents: 23350
diff changeset
109 (which-func-mode (if value 1 0)))
21697
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
110 :initialize 'custom-initialize-default
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
111 :type 'boolean
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
112 :group 'which-func
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
113 :require 'which-func)
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
114
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;;; Code, nothing to customize below here
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ;;; -------------------------------------
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 ;;;
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 (require 'imenu)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 (defvar which-func-current which-func-unknown)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 (defvar which-func-previous which-func-unknown)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 (make-variable-buffer-local 'which-func-current)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 (make-variable-buffer-local 'which-func-previous)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 (defvar which-func-mode nil
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 "Non-nil means display current function name in mode line.
21697
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
127 This makes a difference only if `which-func-mode-global' is non-nil")
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 (make-variable-buffer-local 'which-func-mode)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 (put 'which-func-mode 'permanent-local t)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 (add-hook 'find-file-hooks 'which-func-ff-hook t)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 (defun which-func-ff-hook ()
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 "File find hook for Which Function mode.
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 It creates the Imenu index for the buffer, if necessary."
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 (if (or (eq which-func-modes t) (member major-mode which-func-modes))
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 (setq which-func-mode which-func-mode-global)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 (setq which-func-mode nil))
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139
22308
87366acfb1e9 (which-func-ff-hook): If imenu gets error,
Karl Heuer <kwzh@gnu.org>
parents: 22134
diff changeset
140 (condition-case nil
87366acfb1e9 (which-func-ff-hook): If imenu gets error,
Karl Heuer <kwzh@gnu.org>
parents: 22134
diff changeset
141 (if (and which-func-mode
87366acfb1e9 (which-func-ff-hook): If imenu gets error,
Karl Heuer <kwzh@gnu.org>
parents: 22134
diff changeset
142 (not (member major-mode which-func-non-auto-modes))
87366acfb1e9 (which-func-ff-hook): If imenu gets error,
Karl Heuer <kwzh@gnu.org>
parents: 22134
diff changeset
143 (or (< buffer-saved-size which-func-maxout)
87366acfb1e9 (which-func-ff-hook): If imenu gets error,
Karl Heuer <kwzh@gnu.org>
parents: 22134
diff changeset
144 (= which-func-maxout 0)))
87366acfb1e9 (which-func-ff-hook): If imenu gets error,
Karl Heuer <kwzh@gnu.org>
parents: 22134
diff changeset
145 (setq imenu--index-alist
87366acfb1e9 (which-func-ff-hook): If imenu gets error,
Karl Heuer <kwzh@gnu.org>
parents: 22134
diff changeset
146 (save-excursion (funcall imenu-create-index-function))))
87366acfb1e9 (which-func-ff-hook): If imenu gets error,
Karl Heuer <kwzh@gnu.org>
parents: 22134
diff changeset
147 (error
87366acfb1e9 (which-func-ff-hook): If imenu gets error,
Karl Heuer <kwzh@gnu.org>
parents: 22134
diff changeset
148 (setq which-func-mode nil))))
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 (defun which-func-update ()
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 ;; Update the string containing the current function.
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 (condition-case info
20573
b46523ef0e0a (which-func-update): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents: 20322
diff changeset
153 (progn
b46523ef0e0a (which-func-update): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents: 20322
diff changeset
154 (if (not (setq which-func-current (which-function)))
b46523ef0e0a (which-func-update): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents: 20322
diff changeset
155 (setq which-func-current which-func-unknown))
b46523ef0e0a (which-func-update): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents: 20322
diff changeset
156 (if (not (string= which-func-current which-func-previous))
b46523ef0e0a (which-func-update): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents: 20322
diff changeset
157 (progn
b46523ef0e0a (which-func-update): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents: 20322
diff changeset
158 (force-mode-line-update)
b46523ef0e0a (which-func-update): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents: 20322
diff changeset
159 (setq which-func-previous which-func-current))))
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 (error
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 (ding)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 (remove-hook 'post-command-hook 'which-func-update)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 (which-func-mode -1) ; Function mode off
20573
b46523ef0e0a (which-func-update): Fix paren error.
Richard M. Stallman <rms@gnu.org>
parents: 20322
diff changeset
164 (message "Error in which-func-update: %s" info))))
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165
21960
79c7369b9ab4 (which-function-mode): New alias.
Richard M. Stallman <rms@gnu.org>
parents: 21697
diff changeset
166 ;; This is the name people would normally expect.
79c7369b9ab4 (which-function-mode): New alias.
Richard M. Stallman <rms@gnu.org>
parents: 21697
diff changeset
167 ;;;###autoload
79c7369b9ab4 (which-function-mode): New alias.
Richard M. Stallman <rms@gnu.org>
parents: 21697
diff changeset
168 (defalias 'which-function-mode 'which-func-mode)
79c7369b9ab4 (which-function-mode): New alias.
Richard M. Stallman <rms@gnu.org>
parents: 21697
diff changeset
169
21697
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
170 ;;;###autoload
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 (defun which-func-mode (&optional arg)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 "Toggle Which Function mode, globally.
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 When Which Function mode is enabled, the current function name is
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 continuously displayed in the mode line, in certain major modes.
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 With prefix arg, turn Which Function mode on iff arg is positive,
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 and off otherwise."
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (interactive "P")
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 (if (or (and (null arg) which-func-mode-global)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 (<= (prefix-numeric-value arg) 0))
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 ;; Turn it off
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 (if which-func-mode-global
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 (progn
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 (remove-hook 'post-command-hook 'which-func-update)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 (setq which-func-mode-global nil)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 (setq which-func-mode nil)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 (force-mode-line-update)))
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 ;;Turn it on
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 (if which-func-mode-global
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 ()
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 (add-hook 'post-command-hook 'which-func-update)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 (setq which-func-mode-global t)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 (setq which-func-mode
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 (or (eq which-func-modes t)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 (member major-mode which-func-modes))))))
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 (defun which-function ()
21697
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
198 "Return current function name based on point.
ecfe9bc12b7f Fix header comments.
Dave Love <fx@gnu.org>
parents: 21653
diff changeset
199 If `imenu--index-alist' does not exist, or is empty or if point
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 is located before first function, returns nil."
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (and
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 (boundp 'imenu--index-alist)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 imenu--index-alist
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 (let ((pair (car-safe imenu--index-alist))
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 (rest (cdr-safe imenu--index-alist))
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 (name nil))
23350
df3df03d8a19 (which-function): Handle case when (car imenu--index-alist) is nil.
Karl Heuer <kwzh@gnu.org>
parents: 23018
diff changeset
207 (while (and (or rest pair)
df3df03d8a19 (which-function): Handle case when (car imenu--index-alist) is nil.
Karl Heuer <kwzh@gnu.org>
parents: 23018
diff changeset
208 (or (not (number-or-marker-p (cdr pair)))
df3df03d8a19 (which-function): Handle case when (car imenu--index-alist) is nil.
Karl Heuer <kwzh@gnu.org>
parents: 23018
diff changeset
209 (> (point) (cdr pair))))
20321
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 (setq name (car pair))
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (setq pair (car-safe rest))
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 (setq rest (cdr-safe rest)))
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 name)))
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 (provide 'which-func)
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216
d638e4de74aa Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 ;; which-func.el ends here