annotate lisp/emacs-lisp/eldoc.el @ 30408:e3e2c9051c5f

Got rid of all byte-compiler warnings on Emacs. Add to the menu when the file is loaded, not in ada-mode-hook. Add -toolbar to the default ddd command Switches moved from ada-prj-default-comp-cmd and ada-prj-default-make-cmd to ada-prj-default-comp-opt (ada-add-ada-menu): Remove the map and name parameters Add the Ada Reference Manual to the menu (ada-check-current): rewritten as a call to ada-compile-current (ada-compile): Removed. (ada-compile-application, ada-compile-current, ada-check-current): Set the compilation-search-path so that compile.el automatically finds the sources in src_dir. Automatic scrollong of the compilation buffer. C-uC-cC-c asks for confirmation before compiling (ada-compile-current): New parameter, prj-field (ada-complete-identifier): Load the .ali file before doing processing (ada-find-ali-file-in-dir): prepend build_dir to obj_dir to conform to gnatmake's behavior. (ada-find-file-in-dir): New function (ada-find-references): Set the environment variables for gnatfind (ada-find-src-file-in-dir): New function. (ada-first-non-nil): Removed (ada-gdb-application): Add support for jdb, the java debugger. (ada-get-ada-file-name): Load the original-file first if not done yet. (ada-get-all-references): Handles the new ali syntax (parent types are found between <>). (ada-initialize-runtime-library): New function (ada-mode-hook): Always load a project file when a file is opened, so that the casing exceptions are correctly read. (ada-operator-re): Add all missing operators ("abs", "rem", "**"). (ada-parse-prj-file): Use find-file-noselect instead of find-file to open the project file, since the latter does not work with speedbar Get default values before loading the prj file, or the default executable file name is wrong. Use the absolute value of src_dir to initialize ada-search-directories and compilation-search-path,... Add the standard runtime library to the search path for find-file. (ada-prj-default-debugger): Was missing an opening '{' (ada-prj-default-bind-opt, ada-prj-default-link-opt): New variables. (ada-prj-default-gnatmake-opt): New variable (ada-prj-find-prj-file): Handles non-file buffers For non-Ada buffers, the project file is the default one Save the windows configuration before displaying the menu. (ada-prj-src-dir, ada-prj-obj-dir, ada-prj-comp-opt,...): Removed (ada-read-identifier): Fix xrefs on operators (for "mod", "and", ...) regexp-quote identifiers names to support operators +, -,... in regexps. (ada-remote): New function. (ada-run-application): Erase the output buffer before starting the run Support remote execution of the application. Use call-process, or the arguments are incorrectly parsed (ada-set-default-project-file): Reread the content of the active project file, not the one from the current buffer When a project file is set as the default project, all directories are automatically associated with it. (ada-set-environment): New function (ada-treat-cmd-string): New special variable ${current} (ada-treat-cmd-string): Revised. The substitution is now done for any ${...} substring (ada-xref-current): If no body was found, compiles the spec instead. Setup ADA_{SOURCE,OBJECTS}_PATH before running the compiler to get rid of command line length limitations. (ada-xref-get-project-field): New function (ada-xref-project-files): New variable (ada-xref-runtime-library-specs-path) (ada-xref-runtime-library-ali-path): New variables (ada-xref-set-default-prj-values): Default run command now does a cd to the build directory. New field: main_unit Provide a default file name even if the current buffer has no prj file.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 24 Jul 2000 11:13:11 +0000
parents 38f19553e93d
children 35b22767b7c9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
1 ;;; eldoc.el --- show function arglist or variable docstring in echo area
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
2
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
3 ;; Copyright (C) 1996, 97, 98, 99, 2000 Free Software Foundation, Inc.
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
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
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
7 ;; Keywords: extensions
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
8 ;; Created: 1995-10-06
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
9
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
10 ;; $Id: eldoc.el,v 1.20 2000/06/03 19:50:18 friedman Exp $
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
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
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
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
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
15 ;; it under the terms of the GNU General Public License as published by
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
16 ;; the Free Software Foundation; either version 2, or (at your option)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
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
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
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
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
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
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
28
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
29 ;;; Commentary:
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
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
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
39
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
40 ;; One useful way to enable this minor mode is to put the following in your
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
41 ;; .emacs:
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
42 ;;
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
43 ;; (autoload 'turn-on-eldoc-mode "eldoc" nil t)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
44 ;; (add-hook 'emacs-lisp-mode-hook 'turn-on-eldoc-mode)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
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
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
47
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
48 ;;; Code:
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
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.
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
51 ;; Please don't change this to use `require'; this package works
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
52 ;; as-is in XEmacs 19.14 and later and I am striving to maintain
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
53 ;; compatibility between emacs variants.
16969
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."
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
59 :group 'eldoc
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
60 :group 'lisp
17445
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
61 :group 'extensions)
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
62
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
63 ;;;###autoload
17445
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
64 (defcustom eldoc-mode nil
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
65 "*If non-nil, show the defined parameters for the elisp function near point.
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
66
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
67 For the emacs lisp function at the beginning of the sexp which point is
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
68 within, show the defined parameters for the function in the echo area.
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
69 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
70 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
71 from the documentation string if possible.
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
72
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
73 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
74 instead.
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
75
17445
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
76 This variable is buffer-local."
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
77 :type 'boolean
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
78 :group 'eldoc)
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
79 (make-variable-buffer-local 'eldoc-mode)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
80
17445
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
81 (defcustom eldoc-idle-delay 0.50
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
82 "*Number of seconds of idle time to wait before printing.
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
83 If user input arrives before this interval of time has elapsed after the
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
84 last input, no documentation will be printed.
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
85
17445
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
86 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
87 :type 'number
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
88 :group 'eldoc)
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
89
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
90 ;;;###autoload
17445
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
91 (defcustom eldoc-minor-mode-string " ElDoc"
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
92 "*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
93 :type 'string
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
94 :group 'eldoc)
16969
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
95
17445
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
96 (defcustom eldoc-argument-case 'upcase
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
97 "Case to display argument names of functions, as a symbol.
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
98 This has two preferred values: `upcase' or `downcase'.
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
99 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
100 returns another string is acceptable."
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
101 :type '(radio (function-item upcase)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
102 (function-item downcase)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
103 function)
17445
f2db4e8bb6ed Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17253
diff changeset
104 :group 'eldoc)
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
105
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
106 (defcustom eldoc-echo-area-use-multiline-p 'truncate-sym-name-if-fit
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
107 "*Allow long eldoc messages to resize echo area display.
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
108 If value is `t', never attempt to truncate messages; complete symbol name
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
109 and function arglist or 1-line variable documentation will be displayed
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
110 even if echo area must be resized to fit.
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
111
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
112 If value is any non-nil value other than `t', symbol name may be truncated
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
113 if it will enable the function arglist or documentation string to fit on a
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
114 single line without resizing window. Otherwise, behavior is just like
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
115 former case.
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
116
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
117 If value is nil, messages are always truncated to fit in a single line of
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
118 display in the echo area. Function or variable symbol name may be
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
119 truncated to make more of the arglist or documentation string visible.
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
120
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
121 Non-nil values for this variable have no effect unless
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
122 `eldoc-echo-area-multiline-supported-p' is non-nil."
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
123 :type '(radio (const :tag "Always" t)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
124 (const :tag "Never" nil)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
125 (const :tag "Yes, but truncate symbol names if it will\
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
126 enable argument list to fit on one line" truncate-sym-name-if-fit))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
127 :group 'eldoc)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
128
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
129 ;;; No user options below here.
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
130
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
131 ;; Non-nil if this version of emacs supports dynamically resizable echo areas.
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
132 (defvar eldoc-echo-area-multiline-supported-p
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
133 (and (string-lessp "21" emacs-version)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
134 (save-match-data
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
135 (numberp (string-match "^GNU Emacs" (emacs-version))))))
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
136
17920
161cc8316f98 (eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents: 17445
diff changeset
137 ;; 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
138 ;; 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
139 ;; 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
140 ;; 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
141 ;; 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
142 ;; 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
143 ;; 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
144 (defvar eldoc-message-commands nil)
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
145
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
146 ;; 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
147 ;; 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
148 ;; 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
149 ;; 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
150 ;; 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
151 ;; 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
152 (defvar eldoc-message-commands-table-size 31)
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
153
23283
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
154 ;; 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
155 ;; 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
156 ;; 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
157 ;; 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
158 ;; 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
159 (defvar eldoc-last-data (make-vector 3 nil))
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
160 (defvar eldoc-last-message nil)
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
161
16969
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
162 ;; 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
163 (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
164
16969
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
165 ;; 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
166 (defvar eldoc-timer nil)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
167
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
168 ;; 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
169 ;; 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
170 (defvar eldoc-current-idle-delay eldoc-idle-delay)
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
171
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
172 ;; Put minor mode string on the global minor-mode-alist.
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
173 ;;;###autoload
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
174 (cond ((fboundp 'add-minor-mode)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
175 (add-minor-mode 'eldoc-mode 'eldoc-minor-mode-string))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
176 ((assq 'eldoc-mode (default-value 'minor-mode-alist)))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
177 (t
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
178 (setq-default minor-mode-alist
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
179 (append (default-value 'minor-mode-alist)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
180 '((eldoc-mode eldoc-minor-mode-string))))))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
181
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
182
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
183 ;;;###autoload
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
184 (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
185 "*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
186 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
187
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
188 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
189 of the mode.
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
190 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
191 the mode, respectively."
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
192 (interactive "P")
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
193 (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
194 (cond (eldoc-use-idle-timer-p
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
195 (add-hook 'post-command-hook 'eldoc-schedule-timer)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
196 (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
197 (t
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
198 ;; 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
199 ;; 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
200 ;; 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
201 ;; 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
202 (add-hook (if (boundp 'post-command-idle-hook)
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
203 'post-command-idle-hook
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
204 'post-command-hook)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
205 'eldoc-print-current-symbol-info t t)
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
206 ;; 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
207 (and (fboundp 'display-message)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
208 (add-hook 'pre-command-hook
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
209 'eldoc-pre-command-refresh-echo-area t t))))
15671
27e6b6f4f1b6 (eldoc-mode): Toggle eldoc-mode if no prefix given.
Noah Friedman <friedman@splode.com>
parents: 13647
diff changeset
210 (setq eldoc-mode (if prefix
27e6b6f4f1b6 (eldoc-mode): Toggle eldoc-mode if no prefix given.
Noah Friedman <friedman@splode.com>
parents: 13647
diff changeset
211 (>= (prefix-numeric-value prefix) 0)
27e6b6f4f1b6 (eldoc-mode): Toggle eldoc-mode if no prefix given.
Noah Friedman <friedman@splode.com>
parents: 13647
diff changeset
212 (not eldoc-mode)))
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
213 (and (interactive-p)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
214 (if eldoc-mode
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
215 (message "eldoc-mode is enabled")
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
216 (message "eldoc-mode is disabled")))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
217 eldoc-mode)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
218
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
219 ;;;###autoload
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
220 (defun turn-on-eldoc-mode ()
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
221 "Unequivocally turn on eldoc-mode (see variable documentation)."
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
222 (interactive)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
223 (eldoc-mode 1))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
224
23283
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
225
16969
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
226 ;; 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
227 (defun eldoc-schedule-timer ()
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
228 (or (and eldoc-timer
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
229 (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
230 (setq eldoc-timer
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
231 (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
232 '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
233
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
234 ;; 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
235 (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
236 (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
237 (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
238
23283
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
239 (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
240 (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
241 (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
242 ((or (null args)
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
243 (null (car args)))
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
244 (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
245 ;; 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
246 ;; 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
247 ;; subsequent calls.
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
248 ((null (cdr args))
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
249 (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
250 (t
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
251 (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
252 ;; 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
253 ;; 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
254 ;; they are Legion.
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
255 (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
256 ;; 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
257 (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
258 (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
259 (omessage
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
260 (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
261 (t
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
262 ;; 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
263 (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
264 (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
265 (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
266 (omessage
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
267 (message nil)))))))
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
268 eldoc-last-message)
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
269
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
270 ;; 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
271 ;; 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
272 ;; 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
273 ;; begins. This function reprints the last eldoc message immediately
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
274 ;; 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
275 ;; 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
276 (defun eldoc-pre-command-refresh-echo-area ()
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
277 (and eldoc-last-message
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
278 (if (eldoc-display-message-no-interference-p)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
279 (eldoc-message eldoc-last-message)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
280 (setq eldoc-last-message nil))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
281
16975
188c4da9bf5d (eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents: 16969
diff changeset
282 ;; 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
283 (defun eldoc-display-message-p ()
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
284 (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
285 (cond (eldoc-use-idle-timer-p
16975
188c4da9bf5d (eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents: 16969
diff changeset
286 ;; 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
287 ;; 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
288 ;; 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
289 ;; overwrite the echo area.
188c4da9bf5d (eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents: 16969
diff changeset
290 (and (not this-command)
188c4da9bf5d (eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents: 16969
diff changeset
291 (symbolp last-command)
16969
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
292 (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
293 eldoc-message-commands)))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
294 (t
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
295 ;; 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
296 ;; 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
297 ;; 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
298 ;; 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
299 (and (symbolp this-command)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
300 (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
301 eldoc-message-commands)
16975
188c4da9bf5d (eldoc-display-message-p): New function.
Noah Friedman <friedman@splode.com>
parents: 16969
diff changeset
302 (sit-for eldoc-idle-delay))))))
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
303
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
304 ;; Check various conditions about the current environment that might make
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
305 ;; it undesirable to print eldoc messages right this instant.
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
306 (defun eldoc-display-message-no-interference-p ()
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
307 (and eldoc-mode
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
308 (not executing-kbd-macro)
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
309 (not (and (boundp 'edebug-active) edebug-active))
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
310 ;; 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
311 ;; interference with what's going on there.
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
312 (not cursor-in-echo-area)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
313 (not (eq (selected-window) (minibuffer-window)))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
314
23283
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
315
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
316 (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
317 (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
318 (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
319 (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
320 (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
321 (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
322 (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
323 (t
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
324 (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
325 (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
326 (eldoc-message doc))))
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
327
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
328 ;; 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
329 ;; 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
330 ;; docstring or elsewhere.
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
331 (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
332 (let ((args nil)
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
333 (doc nil))
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
334 (cond ((not (and sym
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
335 (symbolp sym)
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
336 (fboundp sym))))
23283
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
337 ((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
338 (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
339 (setq doc (aref eldoc-last-data 1)))
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
340 ((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
341 (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
342 (eldoc-docstring-first-line (documentation sym t)))))
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
343 (t
23283
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
344 (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
345 (cond (args
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
346 (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
347 (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
348 doc))
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
349
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
350 ;; 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
351 ;; the variable.
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
352 (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
353 (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
354 (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
355 (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
356 (t
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
357 (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
358 (cond (doc
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
359 (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
360 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
361 (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
362 doc))))
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
363
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
364 (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
365 (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
366 (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
367 (aset eldoc-last-data 2 type))
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
368
23283
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
369 ;; 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
370 ;; 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
371 (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
372 (and (stringp doc)
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
373 (substitute-command-keys
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
374 (save-match-data
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
375 (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
376 (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
377 (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
378 ((zerop start) doc)
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
379 (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
380
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
381 ;; 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
382 ;; 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
383 ;; description.
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
384 (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
385 (save-match-data
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
386 (let* ((name (symbol-name sym))
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
387 (ea-multi (and eldoc-echo-area-multiline-supported-p
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
388 eldoc-echo-area-use-multiline-p))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
389 ;; Subtract 1 from window width since emacs will not write
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
390 ;; any chars to the last column, or in later versions, will
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
391 ;; cause a wraparound and resize of the echo area.
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
392 (ea-width (1- (window-width (minibuffer-window))))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
393 (strip (- (+ (length name) (length ": ") (length doc)) ea-width)))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
394 (cond ((or (<= strip 0)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
395 (eq ea-multi t)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
396 (and ea-multi (> (length doc) ea-width)))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
397 (format "%s: %s" sym doc))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
398 ((> (length doc) ea-width)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
399 (substring (format "%s" doc) 0 ea-width))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
400 ((>= strip (length name))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
401 (format "%s" doc))
23283
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
402 (t
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
403 ;; Show the end of the partial symbol name, rather
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
404 ;; than the beginning, since the former is more likely
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
405 ;; to be unique given package namespace conventions.
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
406 (setq name (substring name strip))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
407 (format "%s: %s" name doc))))))
23283
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
408
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
409
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
410 (defun eldoc-fnsym-in-current-sexp ()
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
411 (let ((p (point)))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
412 (eldoc-beginning-of-sexp)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
413 (prog1
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
414 ;; 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
415 (if (= (or (char-after (1- (point))) 0) ?\")
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
416 nil
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
417 (eldoc-current-symbol))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
418 (goto-char p))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
419
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
420 (defun eldoc-beginning-of-sexp ()
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
421 (let ((parse-sexp-ignore-comments t))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
422 (condition-case err
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
423 (while (progn
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
424 (forward-sexp -1)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
425 (or (= (or (char-after (1- (point)))) ?\")
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
426 (> (point) (point-min)))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
427 (error nil))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
428
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
429 ;; returns nil unless current word is an interned symbol.
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
430 (defun eldoc-current-symbol ()
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
431 (let ((c (char-after (point))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
432 (and c
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
433 (memq (char-syntax c) '(?w ?_))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
434 (intern-soft (current-word)))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
435
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
436 ;; Do indirect function resolution if possible.
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
437 (defun eldoc-symbol-function (fsym)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
438 (let ((defn (and (fboundp fsym)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
439 (symbol-function fsym))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
440 (and (symbolp defn)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
441 (condition-case err
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
442 (setq defn (indirect-function fsym))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
443 (error (setq defn nil))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
444 defn))
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
445
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
446 (defun eldoc-function-arglist (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
447 (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
448 (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
449 (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
450 prelim-def))
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
451 (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
452 ((byte-code-function-p def)
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
453 (cond ((fboundp 'compiled-function-arglist)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
454 (funcall 'compiled-function-arglist def))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
455 (t
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
456 (aref def 0))))
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
457 ((eq (car-safe def) 'lambda)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
458 (nth 1 def))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
459 (t t))))
30389
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
460 arglist))
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
461
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
462 (defun eldoc-function-argstring (fn)
38f19553e93d (eldoc-minor-mode-string): Add autoload cookie; otherwise autoloaded
Noah Friedman <friedman@splode.com>
parents: 23586
diff changeset
463 (eldoc-function-argstring-format (eldoc-function-arglist fn)))
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
464
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
465 (defun eldoc-function-argstring-format (arglist)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
466 (cond ((not (listp arglist))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
467 (setq arglist nil))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
468 ((symbolp (car arglist))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
469 (setq arglist
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
470 (mapcar (function (lambda (s)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
471 (if (memq s '(&optional &rest))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
472 (symbol-name s)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
473 (funcall eldoc-argument-case
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
474 (symbol-name s)))))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
475 arglist)))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
476 ((stringp (car arglist))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
477 (setq arglist
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
478 (mapcar (function (lambda (s)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
479 (if (member s '("&optional" "&rest"))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
480 s
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
481 (funcall eldoc-argument-case s))))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
482 arglist))))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
483 (concat "(" (mapconcat 'identity arglist " ") ")"))
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
484
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
485
16969
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
486 ;; 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
487 ;; 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
488 ;; 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
489 ;; 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
490 ;; that docstring.
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
491 ;;
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
492 ;; 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
493 ;; 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
494 ;;
17920
161cc8316f98 (eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents: 17445
diff changeset
495 ;; 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
496 ;; 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
497 ;; 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
498 ;; 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
499 (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
500 (list
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
501 ;; 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
502 ;; 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
503 (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
504 (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
505 (function (lambda (doc)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
506 ;; 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
507 (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
508 (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
509 (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
510 "")))))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
511
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
512 ;; 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
513 ;; 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
514 (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
515 ;; 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
516 ;; Emacs/XEmacs 19.
161cc8316f98 (eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents: 17445
diff changeset
517 (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
518 (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
519 (function (lambda (doc)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
520 ;; 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
521 (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
522 (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
523 (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
524
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
525 ;; Emacs subr docstring style:
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
526 ;; (fn arg1 arg2 ...): description...
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
527 (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
528 (string-match "^([^\n)]+):" doc)))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
529 (function (lambda (doc)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
530 ;; 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
531 (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
532 (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
533 (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
534
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
535 ;; XEmacs subr docstring style:
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
536 ;; "arguments: (arg1 arg2 ...)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
537 (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
538 (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
539 (function (lambda (doc)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
540 ;; 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
541 ;; 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
542 (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
543
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
544 ;; 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
545 (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
546 (string-match
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
547 (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
548 doc)))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
549 (function (lambda (doc)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
550 ;; 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
551 (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
552 (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
553 (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
554
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
555 ;; 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
556 (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
557 (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
558 doc)))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
559 (function (lambda (doc)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
560 ;; 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
561 (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
562 (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
563 (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
564
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
565 ;; 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
566 (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
567 (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
568 (function (lambda (doc)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
569 (substring doc (match-beginning 1) (match-end 1)))))
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
570
17920
161cc8316f98 (eldoc-message-commands): Move docstring into comments, since this isn't
Noah Friedman <friedman@splode.com>
parents: 17445
diff changeset
571 ;; 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
572 (list (function (lambda (doc fn)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
573 (memq fn '(and or list + -))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
574 (function (lambda (doc)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
575 ;; The value nil is a placeholder; otherwise, the
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
576 ;; following string may be compiled as a docstring,
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
577 ;; and not a return value for the function.
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
578 ;; In interpreted lisp form they are
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
579 ;; indistinguishable; it only matters for compiled
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
580 ;; forms.
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
581 nil
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
582 "&rest args")))
16969
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
583 ))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
584
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
585 (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
586 (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
587 (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
588 (doc nil)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
589 (doclist nil))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
590 (save-match-data
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
591 (while table
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
592 (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
593 (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
594 (setq table nil))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
595 (t
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
596 (setq table (cdr table)))))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
597
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
598 (cond ((not (stringp doc))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
599 nil)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
600 ((string-match "&" doc)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
601 (let ((p 0)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
602 (l (length doc)))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
603 (while (< p l)
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
604 (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
605 (setq doclist
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
606 (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
607 doclist))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
608 (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
609 (t
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
610 (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
611 (setq p l))))
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
612 (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
613 (t
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
614 (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
615
436fd36233d1 Update copyright notice to reflect assignment to FSF and incorporation
Noah Friedman <friedman@splode.com>
parents: 16385
diff changeset
616
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
617 ;; 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
618 ;; 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
619 ;; 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
620 ;; overwrite them unless it is more restrained.
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
621 ;; These functions do display-command table management.
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
622
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
623 (defun eldoc-add-command (&rest cmds)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
624 (or eldoc-message-commands
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
625 (setq eldoc-message-commands
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
626 (make-vector eldoc-message-commands-table-size 0)))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
627
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
628 (let (name sym)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
629 (while cmds
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
630 (setq name (car cmds))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
631 (setq cmds (cdr cmds))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
632
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
633 (cond ((symbolp name)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
634 (setq sym name)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
635 (setq name (symbol-name sym)))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
636 ((stringp name)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
637 (setq sym (intern-soft name))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
638
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
639 (and (symbolp sym)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
640 (fboundp sym)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
641 (set (intern name eldoc-message-commands) t)))))
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
642
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
643 (defun eldoc-add-command-completions (&rest names)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
644 (while names
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
645 (apply 'eldoc-add-command
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
646 (all-completions (car names) obarray 'fboundp))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
647 (setq names (cdr names))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
648
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
649 (defun eldoc-remove-command (&rest cmds)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
650 (let (name)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
651 (while cmds
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
652 (setq name (car cmds))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
653 (setq cmds (cdr cmds))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
654
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
655 (and (symbolp name)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
656 (setq name (symbol-name name)))
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
657
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
658 (if (fboundp 'unintern)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
659 (unintern name eldoc-message-commands)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
660 (let ((s (intern-soft name eldoc-message-commands)))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
661 (and s
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
662 (makunbound s)))))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
663
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
664 (defun eldoc-remove-command-completions (&rest names)
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
665 (while names
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
666 (apply 'eldoc-remove-command
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
667 (all-completions (car names) eldoc-message-commands))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
668 (setq names (cdr names))))
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
669
23283
2442a5dce1a8 (eldoc-message): Check for 1-arg case, and store string in
Noah Friedman <friedman@splode.com>
parents: 18699
diff changeset
670
16996
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
671 ;; Prime the command list.
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
672 (eldoc-add-command-completions
2d67501c45b9 (eldoc-message-commands): Doc fixes.
Noah Friedman <friedman@splode.com>
parents: 16975
diff changeset
673 "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
674 "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
675 "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
676 "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
677 "up-list" "down-list")
13530
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
678
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
679 (provide 'eldoc)
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
680
625e90e74d83 Initial revision
Noah Friedman <friedman@splode.com>
parents:
diff changeset
681 ;;; eldoc.el ends here