(Coding System Basics): Describe about rondtrip
[bpt/emacs.git] / lispref / help.texi
CommitLineData
5e8db0c6
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
335c56b9 3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2004
177c0ea7 4@c Free Software Foundation, Inc.
5e8db0c6
RS
5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/help
7@node Documentation, Files, Modes, Top
8@chapter Documentation
9@cindex documentation strings
10
11 GNU Emacs Lisp has convenient on-line help facilities, most of which
12derive their information from the documentation strings associated with
13functions and variables. This chapter describes how to write good
14documentation strings for your Lisp programs, as well as how to write
15programs to access documentation.
16
17 Note that the documentation strings for Emacs are not the same thing
18as the Emacs manual. Manuals have their own source files, written in
19the Texinfo language; documentation strings are specified in the
20definitions of the functions and variables they apply to. A collection
21of documentation strings is not sufficient as a manual because a good
22manual is not organized in that fashion; it is organized in terms of
23topics of discussion.
24
25@menu
26* Documentation Basics:: Good style for doc strings.
27 Where to put them. How Emacs stores them.
28* Accessing Documentation:: How Lisp programs can access doc strings.
29* Keys in Documentation:: Substituting current key bindings.
30* Describing Characters:: Making printable descriptions of
31 non-printing characters and key sequences.
32* Help Functions:: Subroutines used by Emacs help facilities.
33@end menu
34
35@node Documentation Basics
36@comment node-name, next, previous, up
37@section Documentation Basics
38@cindex documentation conventions
39@cindex writing a documentation string
40@cindex string, writing a doc string
41
42 A documentation string is written using the Lisp syntax for strings,
43with double-quote characters surrounding the text of the string. This
44is because it really is a Lisp string object. The string serves as
45documentation when it is written in the proper place in the definition
46of a function or variable. In a function definition, the documentation
47string follows the argument list. In a variable definition, the
48documentation string follows the initial value of the variable.
49
50 When you write a documentation string, make the first line a complete
51sentence (or two complete sentences) since some commands, such as
52@code{apropos}, show only the first line of a multi-line documentation
53string. Also, you should not indent the second line of a documentation
969fe9b5
RS
54string, if it has one, because that looks odd when you use @kbd{C-h f}
55(@code{describe-function}) or @kbd{C-h v} (@code{describe-variable}) to
56view the documentation string. @xref{Documentation Tips}.
5e8db0c6 57
969fe9b5 58 Documentation strings can contain several special substrings, which
5e8db0c6
RS
59stand for key bindings to be looked up in the current keymaps when the
60documentation is displayed. This allows documentation strings to refer
61to the keys for related commands and be accurate even when a user
335c56b9 62rearranges the key bindings. (@xref{Keys in Documentation}.)
5e8db0c6 63
f9f59935 64 In Emacs Lisp, a documentation string is accessible through the
5e8db0c6
RS
65function or variable that it describes:
66
67@itemize @bullet
68@item
1e04ba2c
RS
69@kindex function-documentation
70The documentation for a function is usually stored in the function
71definition itself (@pxref{Lambda Expressions}). The function
72@code{documentation} knows how to extract it. You can also put
73function documentation in the @code{function-documentation} property
74of the function name. That is useful with definitions such as
75keyboard macros that can't hold a documentation string.
5e8db0c6
RS
76
77@item
78@kindex variable-documentation
79The documentation for a variable is stored in the variable's property
80list under the property name @code{variable-documentation}. The
f9f59935 81function @code{documentation-property} knows how to retrieve it.
5e8db0c6
RS
82@end itemize
83
84@cindex @file{DOC} (documentation) file
85@cindex @file{emacs/etc/DOC-@var{version}}
86@cindex @file{etc/DOC-@var{version}}
87To save space, the documentation for preloaded functions and variables
82a2fe69 88(including primitive functions and autoloaded functions) is stored in
f9f59935
RS
89the file @file{emacs/etc/DOC-@var{version}}---not inside Emacs. The
90documentation strings for functions and variables loaded during the
91Emacs session from byte-compiled files are stored in those files
92(@pxref{Docs and Compilation}).
bfe721d1
KH
93
94The data structure inside Emacs has an integer offset into the file, or
f9f59935
RS
95a list containing a file name and an integer, in place of the
96documentation string. The functions @code{documentation} and
97@code{documentation-property} use that information to fetch the
98documentation string from the appropriate file; this is transparent to
99the user.
5e8db0c6
RS
100
101 For information on the uses of documentation strings, see @ref{Help, ,
102Help, emacs, The GNU Emacs Manual}.
103
104@c Wordy to prevent overfull hbox. --rjc 15mar92
b32a6a15
RS
105 The @file{emacs/lib-src} directory contains two utilities that you can
106use to print nice-looking hardcopy for the file
1911e6e5
RS
107@file{emacs/etc/DOC-@var{version}}. These are @file{sorted-doc} and
108@file{digest-doc}.
5e8db0c6
RS
109
110@node Accessing Documentation
111@section Access to Documentation Strings
112
113@defun documentation-property symbol property &optional verbatim
caae20c7
RS
114This function returns the documentation string that is recorded in
115@var{symbol}'s property list under property @var{property}. It
116retrieves the text from a file if the value calls for that. If the
117property value isn't @code{nil}, isn't a string, and doesn't refer to
118text in a file, then it is evaluated to obtain a string.
119
120Finally, @code{documentation-property} passes the string through
121@code{substitute-command-keys} to substitute actual key bindings,
122unless @var{verbatim} is non-@code{nil}.
5e8db0c6
RS
123
124@smallexample
125@group
126(documentation-property 'command-line-processed
127 'variable-documentation)
1911e6e5 128 @result{} "Non-nil once command line has been processed"
5e8db0c6
RS
129@end group
130@group
131(symbol-plist 'command-line-processed)
132 @result{} (variable-documentation 188902)
133@end group
134@end smallexample
135@end defun
136
137@defun documentation function &optional verbatim
caae20c7
RS
138This function returns the documentation string of @var{function}.
139
140If @var{function} is a symbol, this function first looks for the
141@code{function-documentation} property of that symbol; if that has a
142non-@code{nil} value, the documentation comes from that value (if the
143value is not a string, it is evaluated). If @var{function} is not a
144symbol, or if it has no @code{function-documentation} property, then
145@code{documentation} extracts the documentation string from the actual
146function definition, reading it from a file if called for.
147
148Finally, unless @var{verbatim} is non-@code{nil}, it calls
149@code{substitute-command-keys} so as to return a value containing the
7f0afecc 150actual (current) key bindings.
5e8db0c6
RS
151
152The function @code{documentation} signals a @code{void-function} error
969fe9b5 153if @var{function} has no function definition. However, it is OK if
5e8db0c6
RS
154the function definition has no documentation string. In that case,
155@code{documentation} returns @code{nil}.
156@end defun
157
158@c Wordy to prevent overfull hboxes. --rjc 15mar92
82a2fe69 159Here is an example of using the two functions, @code{documentation} and
5e8db0c6
RS
160@code{documentation-property}, to display the documentation strings for
161several symbols in a @samp{*Help*} buffer.
162
73036a68 163@anchor{describe-symbols example}
5e8db0c6
RS
164@smallexample
165@group
166(defun describe-symbols (pattern)
167 "Describe the Emacs Lisp symbols matching PATTERN.
168All symbols that have PATTERN in their name are described
169in the `*Help*' buffer."
170 (interactive "sDescribe symbols matching: ")
171 (let ((describe-func
177c0ea7 172 (function
5e8db0c6
RS
173 (lambda (s)
174@end group
175@group
176 ;; @r{Print description of symbol.}
177 (if (fboundp s) ; @r{It is a function.}
178 (princ
179 (format "%s\t%s\n%s\n\n" s
177c0ea7 180 (if (commandp s)
5e8db0c6
RS
181 (let ((keys (where-is-internal s)))
182 (if keys
183 (concat
184 "Keys: "
177c0ea7 185 (mapconcat 'key-description
5e8db0c6
RS
186 keys " "))
187 "Keys: none"))
188 "Function")
189@end group
190@group
177c0ea7 191 (or (documentation s)
5e8db0c6 192 "not documented"))))
177c0ea7 193
5e8db0c6
RS
194 (if (boundp s) ; @r{It is a variable.}
195@end group
196@group
197 (princ
198 (format "%s\t%s\n%s\n\n" s
177c0ea7 199 (if (user-variable-p s)
5e8db0c6
RS
200 "Option " "Variable")
201@end group
202@group
177c0ea7 203 (or (documentation-property
5e8db0c6
RS
204 s 'variable-documentation)
205 "not documented")))))))
206 sym-list)
207@end group
208
209@group
210 ;; @r{Build a list of symbols that match pattern.}
177c0ea7 211 (mapatoms (function
5e8db0c6
RS
212 (lambda (sym)
213 (if (string-match pattern (symbol-name sym))
214 (setq sym-list (cons sym sym-list))))))
215@end group
216
217@group
218 ;; @r{Display the data.}
219 (with-output-to-temp-buffer "*Help*"
220 (mapcar describe-func (sort sym-list 'string<))
221 (print-help-return-message))))
222@end group
223@end smallexample
224
225 The @code{describe-symbols} function works like @code{apropos},
226but provides more information.
227
228@smallexample
229@group
230(describe-symbols "goal")
231
232---------- Buffer: *Help* ----------
177c0ea7 233goal-column Option
9e2b495b 234*Semipermanent goal column for vertical motion, as set by @dots{}
5e8db0c6
RS
235@end group
236@c Do not blithely break or fill these lines.
237@c That makes them incorrect.
238
239@group
1911e6e5 240set-goal-column Keys: C-x C-n
5e8db0c6
RS
241Set the current horizontal position as a goal for C-n and C-p.
242@end group
243@c DO NOT put a blank line here! That is factually inaccurate!
244@group
245Those commands will move to this position in the line moved to
246rather than trying to keep the same horizontal position.
247With a non-nil argument, clears out the goal column
248so that C-n and C-p resume vertical motion.
249The goal column is stored in the variable `goal-column'.
250@end group
251
252@group
253temporary-goal-column Variable
254Current goal column for vertical motion.
255It is the column where point was
256at the start of current run of vertical motion commands.
257When the `track-eol' feature is doing its job, the value is 9999.
258---------- Buffer: *Help* ----------
259@end group
260@end smallexample
261
bfccb7b3
EZ
262The asterisk @samp{*} as the first character of a variable's doc string,
263as shown above for the @code{goal-column} variable, means that it is a
264user option; see the description of @code{defvar} in @ref{Defining
265Variables}.
266
5e8db0c6 267@defun Snarf-documentation filename
335c56b9 268@anchor{Definition of Snarf-documentation}
f9f59935 269This function is used only during Emacs initialization, just before
5e8db0c6
RS
270the runnable Emacs is dumped. It finds the file offsets of the
271documentation strings stored in the file @var{filename}, and records
272them in the in-core function definitions and variable property lists in
273place of the actual strings. @xref{Building Emacs}.
274
f9f59935
RS
275Emacs reads the file @var{filename} from the @file{emacs/etc} directory.
276When the dumped Emacs is later executed, the same file will be looked
277for in the directory @code{doc-directory}. Usually @var{filename} is
5e8db0c6
RS
278@code{"DOC-@var{version}"}.
279@end defun
280
281@c Emacs 19 feature
282@defvar doc-directory
969fe9b5 283This variable holds the name of the directory which should contain the
5e8db0c6
RS
284file @code{"DOC-@var{version}"} that contains documentation strings for
285built-in and preloaded functions and variables.
286
287In most cases, this is the same as @code{data-directory}. They may be
288different when you run Emacs from the directory where you built it,
335c56b9 289without actually installing it. @xref{Definition of data-directory}.
5e8db0c6
RS
290
291In older Emacs versions, @code{exec-directory} was used for this.
292@end defvar
293
294@node Keys in Documentation
295@section Substituting Key Bindings in Documentation
296@cindex documentation, keys in
297@cindex keys in documentation strings
298@cindex substituting keys in documentation
299
82a2fe69
RS
300 When documentation strings refer to key sequences, they should use the
301current, actual key bindings. They can do so using certain special text
302sequences described below. Accessing documentation strings in the usual
303way substitutes current key binding information for these special
304sequences. This works by calling @code{substitute-command-keys}. You
305can also call that function yourself.
5e8db0c6
RS
306
307 Here is a list of the special sequences and what they mean:
308
309@table @code
310@item \[@var{command}]
311stands for a key sequence that will invoke @var{command}, or @samp{M-x
312@var{command}} if @var{command} has no key bindings.
313
177c0ea7 314@item \@{@var{mapvar}@}
969fe9b5
RS
315stands for a summary of the keymap which is the value of the variable
316@var{mapvar}. The summary is made using @code{describe-bindings}.
5e8db0c6 317
177c0ea7 318@item \<@var{mapvar}>
f9f59935 319stands for no text itself. It is used only for a side effect: it
969fe9b5 320specifies @var{mapvar}'s value as the keymap for any following
f9f59935 321@samp{\[@var{command}]} sequences in this documentation string.
815c9631
RS
322
323@item \=
324quotes the following character and is discarded; thus, @samp{\=\[} puts
325@samp{\[} into the output, and @samp{\=\=} puts @samp{\=} into the
326output.
5e8db0c6
RS
327@end table
328
82a2fe69 329@strong{Please note:} Each @samp{\} must be doubled when written in a
5e8db0c6
RS
330string in Emacs Lisp.
331
332@defun substitute-command-keys string
333This function scans @var{string} for the above special sequences and
334replaces them by what they stand for, returning the result as a string.
335This permits display of documentation that refers accurately to the
82a2fe69 336user's own customized key bindings.
5e8db0c6
RS
337@end defun
338
339 Here are examples of the special sequences:
340
341@smallexample
342@group
177c0ea7 343(substitute-command-keys
5e8db0c6
RS
344 "To abort recursive edit, type: \\[abort-recursive-edit]")
345@result{} "To abort recursive edit, type: C-]"
346@end group
347
348@group
177c0ea7 349(substitute-command-keys
5e8db0c6
RS
350 "The keys that are defined for the minibuffer here are:
351 \\@{minibuffer-local-must-match-map@}")
352@result{} "The keys that are defined for the minibuffer here are:
353@end group
354
355? minibuffer-completion-help
356SPC minibuffer-complete-word
357TAB minibuffer-complete
969fe9b5 358C-j minibuffer-complete-and-exit
5e8db0c6
RS
359RET minibuffer-complete-and-exit
360C-g abort-recursive-edit
361"
362
363@group
364(substitute-command-keys
365 "To abort a recursive edit from the minibuffer, type\
366\\<minibuffer-local-must-match-map>\\[abort-recursive-edit].")
367@result{} "To abort a recursive edit from the minibuffer, type C-g."
368@end group
369@end smallexample
370
371@node Describing Characters
372@section Describing Characters for Help Messages
373
f9f59935
RS
374 These functions convert events, key sequences, or characters to
375textual descriptions. These descriptions are useful for including
376arbitrary text characters or key sequences in messages, because they
377convert non-printing and whitespace characters to sequences of printing
5e8db0c6
RS
378characters. The description of a non-whitespace printing character is
379the character itself.
380
335c56b9 381@defun key-description sequence &optional prefix
5e8db0c6
RS
382@cindex Emacs event standard notation
383This function returns a string containing the Emacs standard notation
335c56b9
LT
384for the input events in @var{sequence}. If @var{prefix} is
385non-@code{nil}, it is a sequence of input events leading up to
386@var{sequence} and is included in the return value. Both arguments
387may be strings, vectors or lists. @xref{Input Events}, for more
388information about valid events.
389
390@smallexample
391@group
392(key-description [?\M-3 delete])
393 @result{} "M-3 <delete>"
394@end group
395@group
396(key-description [delete] "\M-3")
397 @result{} "M-3 <delete>"
398@end group
399@end smallexample
400
401 See also the examples for @code{single-key-description}, below.
5e8db0c6
RS
402@end defun
403
7f0afecc 404@defun single-key-description event &optional no-angles
5e8db0c6
RS
405@cindex event printing
406@cindex character printing
407@cindex control character printing
408@cindex meta character printing
409This function returns a string describing @var{event} in the standard
caae20c7
RS
410Emacs notation for keyboard input. A normal printing character
411appears as itself, but a control character turns into a string
412starting with @samp{C-}, a meta character turns into a string starting
413with @samp{M-}, and space, tab, etc.@: appear as @samp{SPC},
414@samp{TAB}, etc. A function key symbol appears inside angle brackets
415@samp{<@dots{}>}. An event that is a list appears as the name of the
416symbol in the @sc{car} of the list, inside angle brackets.
7f0afecc
EZ
417
418If the optional argument @var{no-angles} is non-@code{nil}, the angle
419brackets around function keys and event symbols are omitted; this is
caae20c7 420for compatibility with old versions of Emacs which didn't use the
7f0afecc 421brackets.
5e8db0c6
RS
422
423@smallexample
424@group
425(single-key-description ?\C-x)
426 @result{} "C-x"
427@end group
428@group
429(key-description "\C-x \M-y \n \t \r \f123")
969fe9b5 430 @result{} "C-x SPC M-y SPC C-j SPC TAB SPC RET SPC C-l 1 2 3"
5e8db0c6
RS
431@end group
432@group
7f0afecc
EZ
433(single-key-description 'delete)
434 @result{} "<delete>"
435@end group
436@group
5e8db0c6 437(single-key-description 'C-mouse-1)
7f0afecc
EZ
438 @result{} "<C-mouse-1>"
439@end group
440@group
441(single-key-description 'C-mouse-1 t)
5e8db0c6
RS
442 @result{} "C-mouse-1"
443@end group
444@end smallexample
445@end defun
446
447@defun text-char-description character
448This function returns a string describing @var{character} in the
449standard Emacs notation for characters that appear in text---like
450@code{single-key-description}, except that control characters are
451represented with a leading caret (which is how control characters in
335c56b9
LT
452Emacs buffers are usually displayed). Another difference is that
453@code{text-char-description} recognizes the 2**7 bit as the Meta
454character, whereas @code{single-key-description} uses the 2**27 bit
455for Meta.
5e8db0c6
RS
456
457@smallexample
458@group
459(text-char-description ?\C-c)
460 @result{} "^C"
461@end group
462@group
463(text-char-description ?\M-m)
a48d10ae 464 @result{} "\xed"
5e8db0c6
RS
465@end group
466@group
467(text-char-description ?\C-\M-m)
a48d10ae 468 @result{} "\x8d"
5e8db0c6 469@end group
335c56b9
LT
470@group
471(text-char-description (+ 128 ?m))
472 @result{} "M-m"
473@end group
474@group
475(text-char-description (+ 128 ?\C-m))
476 @result{} "M-^M"
477@end group
5e8db0c6
RS
478@end smallexample
479@end defun
480
335c56b9 481@defun read-kbd-macro string &optional need-vector
a9f0a989
RS
482This function is used mainly for operating on keyboard macros, but it
483can also be used as a rough inverse for @code{key-description}. You
484call it with a string containing key descriptions, separated by spaces;
485it returns a string or vector containing the corresponding events.
486(This may or may not be a single valid key sequence, depending on what
335c56b9
LT
487events you use; @pxref{Keymap Terminology}.) If @var{need-vector} is
488non-@code{nil}, the return value is always a vector.
a9f0a989
RS
489@end defun
490
5e8db0c6
RS
491@node Help Functions
492@section Help Functions
493
494 Emacs provides a variety of on-line help functions, all accessible to
495the user as subcommands of the prefix @kbd{C-h}. For more information
496about them, see @ref{Help, , Help, emacs, The GNU Emacs Manual}. Here
497we describe some program-level interfaces to the same information.
498
969fe9b5 499@deffn Command apropos regexp &optional do-all
335c56b9
LT
500This function finds all ``meaningful'' symbols whose names contain a
501match for the regular expression @var{regexp}, and returns a list of
502them, with associated documentation (@pxref{Regular Expressions}). It
503also displays the symbols in a buffer named @samp{*Apropos*}, each
504with a one-line description taken from the beginning of its
505documentation string. A symbol is ``meaningful'' if it has a
506definition as a function, variable, or face, or has properties.
5e8db0c6
RS
507
508@c Emacs 19 feature
335c56b9
LT
509If @var{do-all} is non-@code{nil}, or if the user option
510@code{apropos-do-all} is non-@code{nil}, then @code{apropos} also
511shows key bindings for the functions that are found; it also shows
512@emph{all} interned symbols, not just meaningful ones (and it lists
513them in the return value as well).
5e8db0c6
RS
514@end deffn
515
516@defvar help-map
517The value of this variable is a local keymap for characters following the
518Help key, @kbd{C-h}.
519@end defvar
520
521@deffn {Prefix Command} help-command
f9f59935 522This symbol is not a function; its function definition cell holds the
5e8db0c6
RS
523keymap known as @code{help-map}. It is defined in @file{help.el} as
524follows:
525
526@smallexample
527@group
335c56b9 528(define-key global-map (char-to-string help-char) 'help-command)
5e8db0c6
RS
529(fset 'help-command help-map)
530@end group
531@end smallexample
532@end deffn
533
534@defun print-help-return-message &optional function
82a2fe69
RS
535This function builds a string that explains how to restore the previous
536state of the windows after a help command. After building the message,
537it applies @var{function} to it if @var{function} is non-@code{nil}.
538Otherwise it calls @code{message} to display it in the echo area.
5e8db0c6
RS
539
540This function expects to be called inside a
541@code{with-output-to-temp-buffer} special form, and expects
542@code{standard-output} to have the value bound by that special form.
543For an example of its use, see the long example in @ref{Accessing
544Documentation}.
545@end defun
546
547@defvar help-char
548The value of this variable is the help character---the character that
a9f0a989
RS
549Emacs recognizes as meaning Help. By default, its value is 8, which
550stands for @kbd{C-h}. When Emacs reads this character, if
551@code{help-form} is a non-@code{nil} Lisp expression, it evaluates that
552expression, and displays the result in a window if it is a string.
5e8db0c6 553
1911e6e5 554Usually the value of @code{help-form} is @code{nil}. Then the
5e8db0c6
RS
555help character has no special meaning at the level of command input, and
556it becomes part of a key sequence in the normal way. The standard key
557binding of @kbd{C-h} is a prefix key for several general-purpose help
558features.
559
560The help character is special after prefix keys, too. If it has no
561binding as a subcommand of the prefix key, it runs
562@code{describe-prefix-bindings}, which displays a list of all the
563subcommands of the prefix key.
564@end defvar
565
969fe9b5
RS
566@defvar help-event-list
567The value of this variable is a list of event types that serve as
568alternative ``help characters.'' These events are handled just like the
569event specified by @code{help-char}.
570@end defvar
571
5e8db0c6
RS
572@defvar help-form
573If this variable is non-@code{nil}, its value is a form to evaluate
574whenever the character @code{help-char} is read. If evaluating the form
575produces a string, that string is displayed.
576
577A command that calls @code{read-event} or @code{read-char} probably
578should bind @code{help-form} to a non-@code{nil} expression while it
969fe9b5
RS
579does input. (The time when you should not do this is when @kbd{C-h} has
580some other meaning.) Evaluating this expression should result in a
581string that explains what the input is for and how to enter it properly.
5e8db0c6
RS
582
583Entry to the minibuffer binds this variable to the value of
335c56b9 584@code{minibuffer-help-form} (@pxref{Definition of minibuffer-help-form}).
5e8db0c6
RS
585@end defvar
586
587@defvar prefix-help-command
969fe9b5
RS
588This variable holds a function to print help for a prefix key. The
589function is called when the user types a prefix key followed by the help
590character, and the help character has no binding after that prefix. The
591variable's default value is @code{describe-prefix-bindings}.
5e8db0c6
RS
592@end defvar
593
594@defun describe-prefix-bindings
595This function calls @code{describe-bindings} to display a list of all
596the subcommands of the prefix key of the most recent key sequence. The
597prefix described consists of all but the last event of that key
82a2fe69 598sequence. (The last event is, presumably, the help character.)
5e8db0c6
RS
599@end defun
600
a9f0a989
RS
601 The following two functions are meant for modes that want to provide
602help without relinquishing control, such as the ``electric'' modes.
603Their names begin with @samp{Helper} to distinguish them from the
604ordinary help functions.
5e8db0c6
RS
605
606@deffn Command Helper-describe-bindings
607This command pops up a window displaying a help buffer containing a
608listing of all of the key bindings from both the local and global keymaps.
609It works by calling @code{describe-bindings}.
610@end deffn
611
612@deffn Command Helper-help
613This command provides help for the current mode. It prompts the user
614in the minibuffer with the message @samp{Help (Type ? for further
615options)}, and then provides assistance in finding out what the key
616bindings are, and what the mode is intended for. It returns @code{nil}.
617
618This can be customized by changing the map @code{Helper-help-map}.
619@end deffn
620
621@c Emacs 19 feature
622@defvar data-directory
335c56b9 623@anchor{Definition of data-directory}
5e8db0c6
RS
624This variable holds the name of the directory in which Emacs finds
625certain documentation and text files that come with Emacs. In older
626Emacs versions, @code{exec-directory} was used for this.
627@end defvar
628
629@c Emacs 19 feature
630@defmac make-help-screen fname help-line help-text help-map
177c0ea7 631This macro defines a help command named @var{fname} that acts like a
82a2fe69 632prefix key that shows a list of the subcommands it offers.
5e8db0c6
RS
633
634When invoked, @var{fname} displays @var{help-text} in a window, then
635reads and executes a key sequence according to @var{help-map}. The
82a2fe69 636string @var{help-text} should describe the bindings available in
5e8db0c6
RS
637@var{help-map}.
638
639The command @var{fname} is defined to handle a few events itself, by
640scrolling the display of @var{help-text}. When @var{fname} reads one of
641those special events, it does the scrolling and then reads another
82a2fe69 642event. When it reads an event that is not one of those few, and which
5e8db0c6
RS
643has a binding in @var{help-map}, it executes that key's binding and
644then returns.
645
646The argument @var{help-line} should be a single-line summary of the
647alternatives in @var{help-map}. In the current version of Emacs, this
648argument is used only if you set the option @code{three-step-help} to
649@code{t}.
f9f59935
RS
650
651This macro is used in the command @code{help-for-help} which is the
652binding of @kbd{C-h C-h}.
5e8db0c6
RS
653@end defmac
654
655@defopt three-step-help
656If this variable is non-@code{nil}, commands defined with
657@code{make-help-screen} display their @var{help-line} strings in the
658echo area at first, and display the longer @var{help-text} strings only
659if the user types the help character again.
660@end defopt
ab5796a9
MB
661
662@ignore
663 arch-tag: ba36b4c2-e60f-49e2-bc25-61158fdcd815
664@end ignore