Mercurial > emacs
annotate lisp/emacs-lisp/eldoc.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 | 58e75110c086 |
children | 38f19553e93d |
rev | line source |
---|---|
13530 | 1 ;;; eldoc.el --- show function arglist or variable docstring in echo area |
2 | |
23283
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
3 ;; Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. |
13530 | 4 |
23283
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
5 ;; Author: Noah Friedman <friedman@splode.com> |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
6 ;; Maintainer: friedman@splode.com |
13530 | 7 ;; Keywords: extensions |
8 ;; Created: 1995-10-06 | |
9 | |
23586
58e75110c086
(eldoc-argument-case): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
23283
diff
changeset
|
10 ;; $Id: eldoc.el,v 1.15 1998/09/19 02:15:26 friedman Exp $ |
13530 | 11 |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
12 ;; This file is part of GNU Emacs. |
13530 | 13 |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
14 ;; GNU Emacs is free software; you can redistribute it and/or modify |
13530 | 15 ;; it under the terms of the GNU General Public License as published by |
16 ;; the Free Software Foundation; either version 2, or (at your option) | |
17 ;; any later version. | |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
18 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
19 ;; GNU Emacs is distributed in the hope that it will be useful, |
13530 | 20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
22 ;; GNU General Public License for more details. | |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
23 |
13530 | 24 ;; You should have received a copy of the GNU General Public License |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
25 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
26 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
27 ;; Boston, MA 02111-1307, USA. |
13530 | 28 |
29 ;;; Commentary: | |
30 | |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
31 ;; This program was inspired by the behavior of the "mouse documentation |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
32 ;; window" on many Lisp Machine systems; as you type a function's symbol |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
33 ;; name as part of a sexp, it will print the argument list for that |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
34 ;; function. Behavior is not identical; for example, you need not actually |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
35 ;; type the function name, you need only move point around in a sexp that |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
36 ;; calls it. Also, if point is over a documented variable, it will print |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
37 ;; the one-line documentation for that variable instead, to remind you of |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
38 ;; that variable's meaning. |
13530 | 39 |
40 ;; One useful way to enable this minor mode is to put the following in your | |
41 ;; .emacs: | |
42 ;; | |
43 ;; (autoload 'turn-on-eldoc-mode "eldoc" nil t) | |
44 ;; (add-hook 'emacs-lisp-mode-hook 'turn-on-eldoc-mode) | |
45 ;; (add-hook 'lisp-interaction-mode-hook 'turn-on-eldoc-mode) | |
16975
188c4da9bf5d
(eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents:
16969
diff
changeset
|
46 ;; (add-hook 'ielm-mode-hook 'turn-on-eldoc-mode) |
13530 | 47 |
48 ;;; Code: | |
49 | |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
50 ;; Use idle timers if available in the version of emacs running. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
51 ;; Please don't change this to use `require'; this package works as-is in |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
52 ;; XEmacs (which doesn't have timer.el as of 19.14), and I would like to |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
53 ;; maintain compatibility with that since I must use it sometimes. --Noah |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
54 (or (featurep 'timer) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
55 (load "timer" t)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
56 |
17445
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
57 (defgroup eldoc nil |
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
58 "Show function arglist or variable docstring in echo area." |
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
59 :group 'extensions) |
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
60 |
13530 | 61 ;;;###autoload |
17445
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
62 (defcustom eldoc-mode nil |
13530 | 63 "*If non-nil, show the defined parameters for the elisp function near point. |
64 | |
65 For the emacs lisp function at the beginning of the sexp which point is | |
66 within, show the defined parameters for the function in the echo area. | |
67 This information is extracted directly from the function or macro if it is | |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
68 in pure lisp. If the emacs function is a subr, the parameters are obtained |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
69 from the documentation string if possible. |
13530 | 70 |
71 If point is over a documented variable, print that variable's docstring | |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
72 instead. |
13530 | 73 |
17445
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
74 This variable is buffer-local." |
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
75 :type 'boolean |
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
76 :group 'eldoc) |
13530 | 77 (make-variable-buffer-local 'eldoc-mode) |
78 | |
17445
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
79 (defcustom eldoc-idle-delay 0.50 |
13530 | 80 "*Number of seconds of idle time to wait before printing. |
81 If user input arrives before this interval of time has elapsed after the | |
82 last input, no documentation will be printed. | |
83 | |
17445
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
84 If this variable is set to 0, no idle time is required." |
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
85 :type 'number |
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
86 :group 'eldoc) |
13530 | 87 |
17445
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
88 (defcustom eldoc-minor-mode-string " ElDoc" |
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
89 "*String to display in mode line when Eldoc Mode is enabled." |
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
90 :type 'string |
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
91 :group 'eldoc) |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
92 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
93 ;; Put this minor mode on the global minor-mode-alist. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
94 (or (assq 'eldoc-mode (default-value 'minor-mode-alist)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
95 (setq-default minor-mode-alist |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
96 (append (default-value 'minor-mode-alist) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
97 '((eldoc-mode eldoc-minor-mode-string))))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
98 |
17445
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
99 (defcustom eldoc-argument-case 'upcase |
13530 | 100 "Case to display argument names of functions, as a symbol. |
101 This has two preferred values: `upcase' or `downcase'. | |
102 Actually, any name of a function which takes a string as an argument and | |
17445
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
103 returns another string is acceptable." |
23586
58e75110c086
(eldoc-argument-case): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
23283
diff
changeset
|
104 :type '(radio function |
58e75110c086
(eldoc-argument-case): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
23283
diff
changeset
|
105 (function-item upcase) |
58e75110c086
(eldoc-argument-case): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
23283
diff
changeset
|
106 (function-item downcase)) |
17445
f2db4e8bb6ed
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
17253
diff
changeset
|
107 :group 'eldoc) |
13530 | 108 |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
109 ;; No user options below here. |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
110 |
17920
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
111 ;; Commands after which it is appropriate to print in the echo area. |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
112 ;; Eldoc does not try to print function arglists, etc. after just any command, |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
113 ;; because some commands print their own messages in the echo area and these |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
114 ;; functions would instantly overwrite them. But self-insert-command as well |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
115 ;; as most motion commands are good candidates. |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
116 ;; This variable contains an obarray of symbols; do not manipulate it |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
117 ;; directly. Instead, use `eldoc-add-command' and `eldoc-remove-command'. |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
118 (defvar eldoc-message-commands nil) |
13530 | 119 |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
120 ;; This is used by eldoc-add-command to initialize eldoc-message-commands |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
121 ;; as an obarray. |
17920
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
122 ;; It should probably never be necessary to do so, but if you |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
123 ;; choose to increase the number of buckets, you must do so before loading |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
124 ;; this file since the obarray is initialized at load time. |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
125 ;; Remember to keep it a prime number to improve hash performance. |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
126 (defvar eldoc-message-commands-table-size 31) |
13530 | 127 |
23283
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
128 ;; Bookkeeping; elements are as follows: |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
129 ;; 0 - contains the last symbol read from the buffer. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
130 ;; 1 - contains the string last displayed in the echo area for that |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
131 ;; symbol, so it can be printed again if necessary without reconsing. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
132 ;; 2 - 'function if function args, 'variable if variable documentation. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
133 (defvar eldoc-last-data (make-vector 3 nil)) |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
134 (defvar eldoc-last-message nil) |
13530 | 135 |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
136 ;; Idle timers are supported in Emacs 19.31 and later. |
17920
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
137 (defvar eldoc-use-idle-timer-p (fboundp 'run-with-idle-timer)) |
13591
b2fb0109006d
(eldoc-minor-mode-string): New variable.
Noah Friedman <friedman@splode.com>
parents:
13532
diff
changeset
|
138 |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
139 ;; eldoc's timer object, if using idle timers |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
140 (defvar eldoc-timer nil) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
141 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
142 ;; idle time delay currently in use by timer. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
143 ;; This is used to determine if eldoc-idle-delay is changed by the user. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
144 (defvar eldoc-current-idle-delay eldoc-idle-delay) |
13530 | 145 |
146 | |
147 ;;;###autoload | |
148 (defun eldoc-mode (&optional prefix) | |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
149 "*Enable or disable eldoc mode. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
150 See documentation for the variable of the same name for more details. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
151 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
152 If called interactively with no prefix argument, toggle current condition |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
153 of the mode. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
154 If called with a positive or negative prefix argument, enable or disable |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
155 the mode, respectively." |
13530 | 156 (interactive "P") |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
157 (setq eldoc-last-message nil) |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
158 (cond (eldoc-use-idle-timer-p |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
159 (add-hook 'post-command-hook 'eldoc-schedule-timer) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
160 (add-hook 'pre-command-hook 'eldoc-pre-command-refresh-echo-area)) |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
161 (t |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
162 ;; Use post-command-idle-hook if defined, otherwise use |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
163 ;; post-command-hook. The former is only proper to use in Emacs |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
164 ;; 19.30; that is the first version in which it appeared, but it |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
165 ;; was obsolesced by idle timers in Emacs 19.31. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
166 (add-hook (if (boundp 'post-command-idle-hook) |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
167 'post-command-idle-hook |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
168 'post-command-hook) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
169 'eldoc-print-current-symbol-info) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
170 ;; quick and dirty hack for seeing if this is XEmacs |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
171 (and (fboundp 'display-message) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
172 (add-hook 'pre-command-hook |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
173 'eldoc-pre-command-refresh-echo-area)))) |
15671
27e6b6f4f1b6
(eldoc-mode): Toggle eldoc-mode if no prefix given.
Noah Friedman <friedman@splode.com>
parents:
13647
diff
changeset
|
174 (setq eldoc-mode (if prefix |
27e6b6f4f1b6
(eldoc-mode): Toggle eldoc-mode if no prefix given.
Noah Friedman <friedman@splode.com>
parents:
13647
diff
changeset
|
175 (>= (prefix-numeric-value prefix) 0) |
27e6b6f4f1b6
(eldoc-mode): Toggle eldoc-mode if no prefix given.
Noah Friedman <friedman@splode.com>
parents:
13647
diff
changeset
|
176 (not eldoc-mode))) |
13530 | 177 (and (interactive-p) |
178 (if eldoc-mode | |
179 (message "eldoc-mode is enabled") | |
180 (message "eldoc-mode is disabled"))) | |
181 eldoc-mode) | |
182 | |
183 ;;;###autoload | |
184 (defun turn-on-eldoc-mode () | |
185 "Unequivocally turn on eldoc-mode (see variable documentation)." | |
186 (interactive) | |
187 (eldoc-mode 1)) | |
188 | |
23283
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
189 |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
190 ;; Idle timers are part of Emacs 19.31 and later. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
191 (defun eldoc-schedule-timer () |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
192 (or (and eldoc-timer |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
193 (memq eldoc-timer timer-idle-list)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
194 (setq eldoc-timer |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
195 (run-with-idle-timer eldoc-idle-delay t |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
196 'eldoc-print-current-symbol-info))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
197 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
198 ;; If user has changed the idle delay, update the timer. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
199 (cond ((not (= eldoc-idle-delay eldoc-current-idle-delay)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
200 (setq eldoc-current-idle-delay eldoc-idle-delay) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
201 (timer-set-idle-time eldoc-timer eldoc-idle-delay t)))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
202 |
23283
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
203 (defun eldoc-message (&rest args) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
204 (let ((omessage eldoc-last-message)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
205 (cond ((eq (car args) eldoc-last-message)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
206 ((or (null args) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
207 (null (car args))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
208 (setq eldoc-last-message nil)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
209 ;; If only one arg, no formatting to do so put it in |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
210 ;; eldoc-last-message so eq test above might succeed on |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
211 ;; subsequent calls. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
212 ((null (cdr args)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
213 (setq eldoc-last-message (car args))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
214 (t |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
215 (setq eldoc-last-message (apply 'format args)))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
216 ;; In emacs 19.29 and later, and XEmacs 19.13 and later, all messages |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
217 ;; are recorded in a log. Do not put eldoc messages in that log since |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
218 ;; they are Legion. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
219 (cond ((fboundp 'display-message) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
220 ;; XEmacs 19.13 way of preventing log messages. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
221 (cond (eldoc-last-message |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
222 (display-message 'no-log eldoc-last-message)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
223 (omessage |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
224 (clear-message 'no-log)))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
225 (t |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
226 ;; Emacs way of preventing log messages. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
227 (let ((message-log-max nil)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
228 (cond (eldoc-last-message |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
229 (message "%s" eldoc-last-message)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
230 (omessage |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
231 (message nil))))))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
232 eldoc-last-message) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
233 |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
234 ;; This function goes on pre-command-hook for XEmacs or when using idle |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
235 ;; timers in Emacs. Motion commands clear the echo area for some reason, |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
236 ;; which make eldoc messages flicker or disappear just before motion |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
237 ;; begins. This function reprints the last eldoc message immediately |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
238 ;; before the next command executes, which does away with the flicker. |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
239 ;; This doesn't seem to be required for Emacs 19.28 and earlier. |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
240 (defun eldoc-pre-command-refresh-echo-area () |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
241 (and eldoc-last-message |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
242 (if (eldoc-display-message-no-interference-p) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
243 (eldoc-message eldoc-last-message) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
244 (setq eldoc-last-message nil)))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
245 |
16975
188c4da9bf5d
(eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents:
16969
diff
changeset
|
246 ;; Decide whether now is a good time to display a message. |
188c4da9bf5d
(eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents:
16969
diff
changeset
|
247 (defun eldoc-display-message-p () |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
248 (and (eldoc-display-message-no-interference-p) |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
249 (cond (eldoc-use-idle-timer-p |
16975
188c4da9bf5d
(eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents:
16969
diff
changeset
|
250 ;; If this-command is non-nil while running via an idle |
188c4da9bf5d
(eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents:
16969
diff
changeset
|
251 ;; timer, we're still in the middle of executing a command, |
188c4da9bf5d
(eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents:
16969
diff
changeset
|
252 ;; e.g. a query-replace where it would be annoying to |
188c4da9bf5d
(eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents:
16969
diff
changeset
|
253 ;; overwrite the echo area. |
188c4da9bf5d
(eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents:
16969
diff
changeset
|
254 (and (not this-command) |
188c4da9bf5d
(eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents:
16969
diff
changeset
|
255 (symbolp last-command) |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
256 (intern-soft (symbol-name last-command) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
257 eldoc-message-commands))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
258 (t |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
259 ;; If we don't have idle timers, this function is |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
260 ;; running on post-command-hook directly; that means the |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
261 ;; user's last command is still on `this-command', and we |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
262 ;; must wait briefly for input to see whether to do display. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
263 (and (symbolp this-command) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
264 (intern-soft (symbol-name this-command) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
265 eldoc-message-commands) |
16975
188c4da9bf5d
(eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents:
16969
diff
changeset
|
266 (sit-for eldoc-idle-delay)))))) |
13530 | 267 |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
268 (defun eldoc-display-message-no-interference-p () |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
269 (and eldoc-mode |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
270 (not executing-kbd-macro) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
271 ;; Having this mode operate in an active minibuffer/echo area causes |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
272 ;; interference with what's going on there. |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
273 (not cursor-in-echo-area) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
274 (not (eq (selected-window) (minibuffer-window))))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
275 |
23283
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
276 |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
277 (defun eldoc-print-current-symbol-info () |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
278 (and (eldoc-display-message-p) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
279 (let* ((current-symbol (eldoc-current-symbol)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
280 (current-fnsym (eldoc-fnsym-in-current-sexp)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
281 (doc (cond ((eq current-symbol current-fnsym) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
282 (or (eldoc-get-fnsym-args-string current-fnsym) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
283 (eldoc-get-var-docstring current-symbol))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
284 (t |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
285 (or (eldoc-get-var-docstring current-symbol) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
286 (eldoc-get-fnsym-args-string current-fnsym)))))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
287 (eldoc-message doc)))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
288 |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
289 ;; Return a string containing the function parameter list, or 1-line |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
290 ;; docstring if function is a subr and no arglist is obtainable from the |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
291 ;; docstring or elsewhere. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
292 (defun eldoc-get-fnsym-args-string (sym) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
293 (let ((args nil) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
294 (doc nil)) |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
295 (cond ((not (and sym |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
296 (symbolp sym) |
13530 | 297 (fboundp sym)))) |
23283
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
298 ((and (eq sym (aref eldoc-last-data 0)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
299 (eq 'function (aref eldoc-last-data 2))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
300 (setq doc (aref eldoc-last-data 1))) |
13530 | 301 ((subrp (eldoc-symbol-function sym)) |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
302 (setq args (or (eldoc-function-argstring-from-docstring sym) |
23283
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
303 (eldoc-docstring-first-line (documentation sym t))))) |
13530 | 304 (t |
23283
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
305 (setq args (eldoc-function-argstring sym)))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
306 (cond (args |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
307 (setq doc (eldoc-docstring-format-sym-doc sym args)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
308 (eldoc-last-data-store sym doc 'function))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
309 doc)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
310 |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
311 ;; Return a string containing a brief (one-line) documentation string for |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
312 ;; the variable. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
313 (defun eldoc-get-var-docstring (sym) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
314 (cond ((and (eq sym (aref eldoc-last-data 0)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
315 (eq 'variable (aref eldoc-last-data 2))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
316 (aref eldoc-last-data 1)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
317 (t |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
318 (let ((doc (documentation-property sym 'variable-documentation t))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
319 (cond (doc |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
320 (setq doc (eldoc-docstring-format-sym-doc |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
321 sym (eldoc-docstring-first-line doc))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
322 (eldoc-last-data-store sym doc 'variable))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
323 doc)))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
324 |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
325 (defun eldoc-last-data-store (symbol doc type) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
326 (aset eldoc-last-data 0 symbol) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
327 (aset eldoc-last-data 1 doc) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
328 (aset eldoc-last-data 2 type)) |
13530 | 329 |
23283
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
330 ;; Note that any leading `*' in the docstring (which indicates the variable |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
331 ;; is a user option) is removed. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
332 (defun eldoc-docstring-first-line (doc) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
333 (and (stringp doc) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
334 (substitute-command-keys |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
335 (save-match-data |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
336 (let ((start (if (string-match "^\\*" doc) (match-end 0) 0))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
337 (cond ((string-match "\n" doc) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
338 (substring doc start (match-beginning 0))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
339 ((zerop start) doc) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
340 (t (substring doc start)))))))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
341 |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
342 ;; If the entire line cannot fit in the echo area, the symbol name may be |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
343 ;; truncated or eliminated entirely from the output to make room for the |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
344 ;; description. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
345 (defun eldoc-docstring-format-sym-doc (sym doc) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
346 (save-match-data |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
347 (let* ((name (symbol-name sym)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
348 (doclen (+ (length name) (length ": ") (length doc))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
349 ;; Subtract 1 from window width since emacs seems not to write |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
350 ;; any chars to the last column, at least for some terminal types. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
351 (strip (- doclen (1- (window-width (minibuffer-window)))))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
352 (cond ((> strip 0) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
353 (let* ((len (length name))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
354 (cond ((>= strip len) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
355 (format "%s" doc)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
356 (t |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
357 ;;(setq name (substring name 0 (- len strip))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
358 ;; |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
359 ;; Show the end of the partial symbol name, rather |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
360 ;; than the beginning, since the former is more likely |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
361 ;; to be unique given package namespace conventions. |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
362 (setq name (substring name strip)) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
363 (format "%s: %s" name doc))))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
364 (t |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
365 (format "%s: %s" sym doc)))))) |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
366 |
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
367 |
13530 | 368 (defun eldoc-fnsym-in-current-sexp () |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
369 (let ((p (point))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
370 (eldoc-beginning-of-sexp) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
371 (prog1 |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
372 ;; Don't do anything if current word is inside a string. |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
373 (if (= (or (char-after (1- (point))) 0) ?\") |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
374 nil |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
375 (eldoc-current-symbol)) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
376 (goto-char p)))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
377 |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
378 (defun eldoc-beginning-of-sexp () |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
379 (let ((parse-sexp-ignore-comments t)) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
380 (condition-case err |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
381 (while (progn |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
382 (forward-sexp -1) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
383 (or (= (or (char-after (1- (point)))) ?\") |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
384 (> (point) (point-min))))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
385 (error nil)))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
386 |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
387 ;; returns nil unless current word is an interned symbol. |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
388 (defun eldoc-current-symbol () |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
389 (let ((c (char-after (point)))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
390 (and c |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
391 (memq (char-syntax c) '(?w ?_)) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
392 (intern-soft (current-word))))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
393 |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
394 ;; Do indirect function resolution if possible. |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
395 (defun eldoc-symbol-function (fsym) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
396 (let ((defn (and (fboundp fsym) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
397 (symbol-function fsym)))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
398 (and (symbolp defn) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
399 (condition-case err |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
400 (setq defn (indirect-function fsym)) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
401 (error (setq defn nil)))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
402 defn)) |
13530 | 403 |
404 (defun eldoc-function-argstring (fn) | |
13532
37fdd3664658
(top level): Make sure to set global minor-mode-alist, not local one.
Noah Friedman <friedman@splode.com>
parents:
13530
diff
changeset
|
405 (let* ((prelim-def (eldoc-symbol-function fn)) |
37fdd3664658
(top level): Make sure to set global minor-mode-alist, not local one.
Noah Friedman <friedman@splode.com>
parents:
13530
diff
changeset
|
406 (def (if (eq (car-safe prelim-def) 'macro) |
37fdd3664658
(top level): Make sure to set global minor-mode-alist, not local one.
Noah Friedman <friedman@splode.com>
parents:
13530
diff
changeset
|
407 (cdr prelim-def) |
37fdd3664658
(top level): Make sure to set global minor-mode-alist, not local one.
Noah Friedman <friedman@splode.com>
parents:
13530
diff
changeset
|
408 prelim-def)) |
13530 | 409 (arglist (cond ((null def) nil) |
13532
37fdd3664658
(top level): Make sure to set global minor-mode-alist, not local one.
Noah Friedman <friedman@splode.com>
parents:
13530
diff
changeset
|
410 ((byte-code-function-p def) |
13530 | 411 (if (fboundp 'compiled-function-arglist) |
412 (funcall 'compiled-function-arglist def) | |
13532
37fdd3664658
(top level): Make sure to set global minor-mode-alist, not local one.
Noah Friedman <friedman@splode.com>
parents:
13530
diff
changeset
|
413 (aref def 0))) |
13530 | 414 ((eq (car-safe def) 'lambda) |
415 (nth 1 def)) | |
416 (t t)))) | |
417 (eldoc-function-argstring-format arglist))) | |
418 | |
419 (defun eldoc-function-argstring-format (arglist) | |
420 (cond ((not (listp arglist)) | |
421 (setq arglist nil)) | |
422 ((symbolp (car arglist)) | |
423 (setq arglist | |
424 (mapcar (function (lambda (s) | |
425 (if (memq s '(&optional &rest)) | |
426 (symbol-name s) | |
427 (funcall eldoc-argument-case | |
428 (symbol-name s))))) | |
429 arglist))) | |
430 ((stringp (car arglist)) | |
431 (setq arglist | |
432 (mapcar (function (lambda (s) | |
433 (if (member s '("&optional" "&rest")) | |
434 s | |
435 (funcall eldoc-argument-case s)))) | |
436 arglist)))) | |
437 (concat "(" (mapconcat 'identity arglist " ") ")")) | |
438 | |
439 | |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
440 ;; Alist of predicate/action pairs. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
441 ;; Each member of the list is a sublist consisting of a predicate function |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
442 ;; used to determine if the arglist for a function can be found using a |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
443 ;; certain pattern, and a function which returns the actual arglist from |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
444 ;; that docstring. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
445 ;; |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
446 ;; The order in this table is significant, since later predicates may be |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
447 ;; more general than earlier ones. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
448 ;; |
17920
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
449 ;; Compiler note for Emacs/XEmacs versions which support dynamic loading: |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
450 ;; these functions will be compiled to bytecode, but can't be lazy-loaded |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
451 ;; even if you set byte-compile-dynamic; to do that would require making |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
452 ;; them named top-level defuns, which is not particularly desirable either. |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
453 (defvar eldoc-function-argstring-from-docstring-method-table |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
454 (list |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
455 ;; Try first searching for args starting with symbol name. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
456 ;; This is to avoid matching parenthetical remarks in e.g. sit-for. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
457 (list (function (lambda (doc fn) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
458 (string-match (format "^(%s[^\n)]*)$" fn) doc))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
459 (function (lambda (doc) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
460 ;; end does not include trailing ")" sequence. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
461 (let ((end (- (match-end 0) 1))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
462 (if (string-match " +" doc (match-beginning 0)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
463 (substring doc (match-end 0) end) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
464 ""))))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
465 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
466 ;; Try again not requiring this symbol name in the docstring. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
467 ;; This will be the case when looking up aliases. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
468 (list (function (lambda (doc fn) |
17920
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
469 ;; save-restriction has a pathological docstring in |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
470 ;; Emacs/XEmacs 19. |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
471 (and (not (eq fn 'save-restriction)) |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
472 (string-match "^([^\n)]+)$" doc)))) |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
473 (function (lambda (doc) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
474 ;; end does not include trailing ")" sequence. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
475 (let ((end (- (match-end 0) 1))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
476 (and (string-match " +" doc (match-beginning 0)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
477 (substring doc (match-end 0) end)))))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
478 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
479 ;; Emacs subr docstring style: |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
480 ;; (fn arg1 arg2 ...): description... |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
481 (list (function (lambda (doc fn) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
482 (string-match "^([^\n)]+):" doc))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
483 (function (lambda (doc) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
484 ;; end does not include trailing "):" sequence. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
485 (let ((end (- (match-end 0) 2))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
486 (and (string-match " +" doc (match-beginning 0)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
487 (substring doc (match-end 0) end)))))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
488 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
489 ;; XEmacs subr docstring style: |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
490 ;; "arguments: (arg1 arg2 ...) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
491 (list (function (lambda (doc fn) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
492 (string-match "^arguments: (\\([^\n)]+\\))" doc))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
493 (function (lambda (doc) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
494 ;; also skip leading paren, but the first word is |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
495 ;; actually an argument, not the function name. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
496 (substring doc (match-beginning 1) (match-end 1))))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
497 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
498 ;; This finds the argstring for `condition-case'. Any others? |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
499 (list (function (lambda (doc fn) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
500 (string-match |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
501 (format "^Usage looks like \\((%s[^\n)]*)\\)\\.$" fn) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
502 doc))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
503 (function (lambda (doc) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
504 ;; end does not include trailing ")" sequence. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
505 (let ((end (- (match-end 1) 1))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
506 (and (string-match " +" doc (match-beginning 1)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
507 (substring doc (match-end 0) end)))))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
508 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
509 ;; This finds the argstring for `setq-default'. Any others? |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
510 (list (function (lambda (doc fn) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
511 (string-match (format "^[ \t]+\\((%s[^\n)]*)\\)$" fn) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
512 doc))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
513 (function (lambda (doc) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
514 ;; end does not include trailing ")" sequence. |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
515 (let ((end (- (match-end 1) 1))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
516 (and (string-match " +" doc (match-beginning 1)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
517 (substring doc (match-end 0) end)))))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
518 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
519 ;; This finds the argstring for `start-process'. Any others? |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
520 (list (function (lambda (doc fn) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
521 (string-match "^Args are +\\([^\n]+\\)$" doc))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
522 (function (lambda (doc) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
523 (substring doc (match-beginning 1) (match-end 1))))) |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
524 |
17920
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
525 ;; These common subrs don't have arglists in their docstrings. So cheat. |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
526 (list (function (lambda (doc fn) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
527 (memq fn '(and or list + -)))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
528 (function (lambda (doc) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
529 ;; The value nil is a placeholder; otherwise, the |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
530 ;; following string may be compiled as a docstring, |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
531 ;; and not a return value for the function. |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
532 ;; In interpreted lisp form they are |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
533 ;; indistinguishable; it only matters for compiled |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
534 ;; forms. |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
535 nil |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
536 "&rest args"))) |
16969
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
537 )) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
538 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
539 (defun eldoc-function-argstring-from-docstring (fn) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
540 (let ((docstring (documentation fn 'raw)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
541 (table eldoc-function-argstring-from-docstring-method-table) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
542 (doc nil) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
543 (doclist nil)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
544 (save-match-data |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
545 (while table |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
546 (cond ((funcall (car (car table)) docstring fn) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
547 (setq doc (funcall (car (cdr (car table))) docstring)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
548 (setq table nil)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
549 (t |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
550 (setq table (cdr table))))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
551 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
552 (cond ((not (stringp doc)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
553 nil) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
554 ((string-match "&" doc) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
555 (let ((p 0) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
556 (l (length doc))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
557 (while (< p l) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
558 (cond ((string-match "[ \t\n]+" doc p) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
559 (setq doclist |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
560 (cons (substring doc p (match-beginning 0)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
561 doclist)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
562 (setq p (match-end 0))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
563 (t |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
564 (setq doclist (cons (substring doc p) doclist)) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
565 (setq p l)))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
566 (eldoc-function-argstring-format (nreverse doclist)))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
567 (t |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
568 (concat "(" (funcall eldoc-argument-case doc) ")")))))) |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
569 |
436fd36233d1
Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents:
16385
diff
changeset
|
570 |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
571 ;; When point is in a sexp, the function args are not reprinted in the echo |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
572 ;; area after every possible interactive command because some of them print |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
573 ;; their own messages in the echo area; the eldoc functions would instantly |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
574 ;; overwrite them unless it is more restrained. |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
575 ;; These functions do display-command table management. |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
576 |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
577 (defun eldoc-add-command (&rest cmds) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
578 (or eldoc-message-commands |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
579 (setq eldoc-message-commands |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
580 (make-vector eldoc-message-commands-table-size 0))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
581 |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
582 (let (name sym) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
583 (while cmds |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
584 (setq name (car cmds)) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
585 (setq cmds (cdr cmds)) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
586 |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
587 (cond ((symbolp name) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
588 (setq sym name) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
589 (setq name (symbol-name sym))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
590 ((stringp name) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
591 (setq sym (intern-soft name)))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
592 |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
593 (and (symbolp sym) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
594 (fboundp sym) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
595 (set (intern name eldoc-message-commands) t))))) |
13530 | 596 |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
597 (defun eldoc-add-command-completions (&rest names) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
598 (while names |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
599 (apply 'eldoc-add-command |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
600 (all-completions (car names) obarray 'fboundp)) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
601 (setq names (cdr names)))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
602 |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
603 (defun eldoc-remove-command (&rest cmds) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
604 (let (name) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
605 (while cmds |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
606 (setq name (car cmds)) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
607 (setq cmds (cdr cmds)) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
608 |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
609 (and (symbolp name) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
610 (setq name (symbol-name name))) |
13530 | 611 |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
612 (if (fboundp 'unintern) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
613 (unintern name eldoc-message-commands) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
614 (let ((s (intern-soft name eldoc-message-commands))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
615 (and s |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
616 (makunbound s))))))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
617 |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
618 (defun eldoc-remove-command-completions (&rest names) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
619 (while names |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
620 (apply 'eldoc-remove-command |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
621 (all-completions (car names) eldoc-message-commands)) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
622 (setq names (cdr names)))) |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
623 |
23283
2442a5dce1a8
(eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents:
18699
diff
changeset
|
624 |
16996
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
625 ;; Prime the command list. |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
626 (eldoc-add-command-completions |
2d67501c45b9
(eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents:
16975
diff
changeset
|
627 "backward-" "beginning-of-" "delete-other-windows" "delete-window" |
17920
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
628 "end-of-" "forward-" "indent-for-tab-command" "goto-" "mouse-set-point" |
161cc8316f98
(eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents:
17445
diff
changeset
|
629 "next-" "other-window" "previous-" "recenter" "scroll-" |
18699
c6cf53a7da72
[top level]: Add `up-list' and `down-list' to eldoc-message-commands.
Noah Friedman <friedman@splode.com>
parents:
17920
diff
changeset
|
630 "self-insert-command" "split-window-" |
c6cf53a7da72
[top level]: Add `up-list' and `down-list' to eldoc-message-commands.
Noah Friedman <friedman@splode.com>
parents:
17920
diff
changeset
|
631 "up-list" "down-list") |
13530 | 632 |
633 (provide 'eldoc) | |
634 | |
635 ;;; eldoc.el ends here |