Mercurial > emacs
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 |
rev | line source |
---|---|
20322 | 1 ;;; which-func.el --- Print current function in mode line |
20321 | 2 |
21697 | 3 ;; Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc. |
20321 | 4 |
5 ;; Author: Alex Rezinsky <alexr@msil.sps.mot.com> | |
21697 | 6 ;; Keywords: mode-line, imenu, tools |
20321 | 7 |
8 ;; This file is part of GNU Emacs. | |
9 | |
10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
11 ;; it under the terms of the GNU General Public License as published by | |
12 ;; the Free Software Foundation; either version 2, or (at your option) | |
13 ;; any later version. | |
14 | |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
23 ;; Boston, MA 02111-1307, USA. | |
24 | |
21697 | 25 ;;; Commentary: |
26 | |
27 ;; This package prints name of function where your current point is | |
28 ;; located in mode line. It assumes that you work with imenu package | |
29 ;; and imenu--index-alist is up to date. | |
20321 | 30 |
21697 | 31 ;; KNOWN BUGS |
32 ;; ---------- | |
33 ;; Really this package shows not "function where the current point is | |
34 ;; located now", but "nearest function which defined above the current | |
35 ;; point". So if your current point is located after end of function | |
36 ;; FOO but before begin of function BAR, FOO will be displayed in mode | |
37 ;; line. | |
20321 | 38 |
21697 | 39 ;; TODO LIST |
40 ;; --------- | |
41 ;; 1. Dependence on imenu package should be removed. Separate | |
42 ;; function determination mechanism should be used to determine the end | |
43 ;; of a function as well as the beginning of a function. | |
44 ;; 2. This package should be realized with the help of overlay | |
45 ;; properties instead of imenu--index-alist variable. | |
46 | |
47 ;;; History: | |
20321 | 48 |
21697 | 49 ;; THANKS TO |
50 ;; --------- | |
51 ;; Per Abrahamsen <abraham@iesd.auc.dk> | |
52 ;; Some ideas (inserting in mode-line, using of post-command hook | |
53 ;; and toggling this mode) have been borrowed from his package | |
54 ;; column.el | |
55 ;; Peter Eisenhauer <pipe@fzi.de> | |
56 ;; Bug fixing in case nested indexes. | |
57 ;; Terry Tateyama <ttt@ursa0.cs.utah.edu> | |
58 ;; Suggestion to use find-file-hooks for first imenu | |
59 ;; index building. | |
20321 | 60 |
21697 | 61 ;;; Code: |
62 | |
63 ;; Variables for customization | |
64 ;; --------------------------- | |
65 ;; | |
20321 | 66 (defvar which-func-unknown "???" |
67 "String to display in the mode line when current function is unknown.") | |
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 | 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 | 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 | 80 :group 'which-func |
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 | 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 | 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 | 92 |
93 (defcustom which-func-maxout 100000 | |
94 "Don't automatically compute the Imenu menu if buffer is this big or bigger. | |
95 Zero means compute the Imenu menu regardless of size." | |
96 :group 'which-func | |
97 :type 'integer) | |
98 | |
99 (defcustom which-func-format '(" [" which-func-current "]") | |
100 "Format for displaying the function in the mode line." | |
101 :group 'which-func | |
102 :type 'sexp) | |
103 | |
21697 | 104 ;;;###autoload |
105 (defcustom which-func-mode-global nil | |
106 "*Toggle `which-func-mode'. | |
107 You must modify via \\[customize] for this variable to have an effect." | |
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 | 110 :initialize 'custom-initialize-default |
111 :type 'boolean | |
112 :group 'which-func | |
113 :require 'which-func) | |
114 | |
20321 | 115 ;;; Code, nothing to customize below here |
116 ;;; ------------------------------------- | |
117 ;;; | |
118 (require 'imenu) | |
119 | |
120 (defvar which-func-current which-func-unknown) | |
121 (defvar which-func-previous which-func-unknown) | |
122 (make-variable-buffer-local 'which-func-current) | |
123 (make-variable-buffer-local 'which-func-previous) | |
124 | |
125 (defvar which-func-mode nil | |
126 "Non-nil means display current function name in mode line. | |
21697 | 127 This makes a difference only if `which-func-mode-global' is non-nil") |
20321 | 128 (make-variable-buffer-local 'which-func-mode) |
129 (put 'which-func-mode 'permanent-local t) | |
130 | |
131 (add-hook 'find-file-hooks 'which-func-ff-hook t) | |
132 | |
133 (defun which-func-ff-hook () | |
134 "File find hook for Which Function mode. | |
135 It creates the Imenu index for the buffer, if necessary." | |
136 (if (or (eq which-func-modes t) (member major-mode which-func-modes)) | |
137 (setq which-func-mode which-func-mode-global) | |
138 (setq which-func-mode nil)) | |
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 | 149 |
150 (defun which-func-update () | |
151 ;; Update the string containing the current function. | |
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 | 160 (error |
161 (ding) | |
162 (remove-hook 'post-command-hook 'which-func-update) | |
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 | 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 | 170 ;;;###autoload |
20321 | 171 (defun which-func-mode (&optional arg) |
172 "Toggle Which Function mode, globally. | |
173 When Which Function mode is enabled, the current function name is | |
174 continuously displayed in the mode line, in certain major modes. | |
175 | |
176 With prefix arg, turn Which Function mode on iff arg is positive, | |
177 and off otherwise." | |
178 (interactive "P") | |
179 (if (or (and (null arg) which-func-mode-global) | |
180 (<= (prefix-numeric-value arg) 0)) | |
181 ;; Turn it off | |
182 (if which-func-mode-global | |
183 (progn | |
184 (remove-hook 'post-command-hook 'which-func-update) | |
185 (setq which-func-mode-global nil) | |
186 (setq which-func-mode nil) | |
187 (force-mode-line-update))) | |
188 ;;Turn it on | |
189 (if which-func-mode-global | |
190 () | |
191 (add-hook 'post-command-hook 'which-func-update) | |
192 (setq which-func-mode-global t) | |
193 (setq which-func-mode | |
194 (or (eq which-func-modes t) | |
195 (member major-mode which-func-modes)))))) | |
196 | |
197 (defun which-function () | |
21697 | 198 "Return current function name based on point. |
199 If `imenu--index-alist' does not exist, or is empty or if point | |
20321 | 200 is located before first function, returns nil." |
201 (and | |
202 (boundp 'imenu--index-alist) | |
203 imenu--index-alist | |
204 (let ((pair (car-safe imenu--index-alist)) | |
205 (rest (cdr-safe imenu--index-alist)) | |
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 | 210 (setq name (car pair)) |
211 (setq pair (car-safe rest)) | |
212 (setq rest (cdr-safe rest))) | |
213 name))) | |
214 | |
215 (provide 'which-func) | |
216 | |
217 ;; which-func.el ends here |