(Parsing Expressions): Clean up forward-comment
[bpt/emacs.git] / lispref / tips.texi
CommitLineData
7015aca4
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
fd897522 3@c Copyright (C) 1990, 1991, 1992, 1993, 1995, 1998, 1999
177c0ea7 4@c Free Software Foundation, Inc.
7015aca4
RS
5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/tips
e23a63a5 7@node Tips, GNU Emacs Internals, GPL, Top
2323275b 8@appendix Tips and Conventions
7015aca4
RS
9@cindex tips
10@cindex standards of coding style
11@cindex coding standards
12
2323275b
RS
13 This chapter describes no additional features of Emacs Lisp. Instead
14it gives advice on making effective use of the features described in the
15previous chapters, and describes conventions Emacs Lisp programmers
16should follow.
7015aca4 17
8241495d
RS
18 You can automatically check some of the conventions described below by
19running the command @kbd{M-x checkdoc RET} when visiting a Lisp file.
20It cannot check all of the conventions, and not all the warnings it
21gives necessarily correspond to problems, but it is worth examining them
22all.
23
7015aca4 24@menu
2323275b 25* Coding Conventions:: Conventions for clean and robust programs.
7015aca4
RS
26* Compilation Tips:: Making compiled code run fast.
27* Documentation Tips:: Writing readable documentation strings.
28* Comment Tips:: Conventions for writing comments.
29* Library Headers:: Standard headers for library packages.
30@end menu
31
2323275b
RS
32@node Coding Conventions
33@section Emacs Lisp Coding Conventions
7015aca4 34
2323275b
RS
35 Here are conventions that you should follow when writing Emacs Lisp
36code intended for widespread use:
7015aca4
RS
37
38@itemize @bullet
39@item
92204c92
RS
40Since all global variables share the same name space, and all
41functions share another name space, you should choose a short word to
42distinguish your program from other Lisp programs.@footnote{The
43benefits of a Common Lisp-style package system are considered not to
44outweigh the costs.} Then take care to begin the names of all global
45variables, constants, and functions in your program with the chosen
46prefix. This helps avoid name conflicts.
7015aca4
RS
47
48This recommendation applies even to names for traditional Lisp
969fe9b5
RS
49primitives that are not primitives in Emacs Lisp---even to
50@code{copy-list}. Believe it or not, there is more than one plausible
51way to define @code{copy-list}. Play it safe; append your name prefix
52to produce a name like @code{foo-copy-list} or @code{mylib-copy-list}
53instead.
7015aca4
RS
54
55If you write a function that you think ought to be added to Emacs under
56a certain name, such as @code{twiddle-files}, don't call it by that name
57in your program. Call it @code{mylib-twiddle-files} in your program,
a9f0a989 58and send mail to @samp{bug-gnu-emacs@@gnu.org} suggesting we add
7015aca4
RS
59it to Emacs. If and when we do, we can change the name easily enough.
60
61If one prefix is insufficient, your package may use two or three
62alternative common prefixes, so long as they make sense.
63
64Separate the prefix from the rest of the symbol name with a hyphen,
65@samp{-}. This will be consistent with Emacs itself and with most Emacs
66Lisp programs.
67
68@item
69It is often useful to put a call to @code{provide} in each separate
70library program, at least if there is more than one entry point to the
71program.
72
bfe721d1
KH
73@item
74If a file requires certain other library programs to be loaded
75beforehand, then the comments at the beginning of the file should say
76so. Also, use @code{require} to make sure they are loaded.
77
7015aca4
RS
78@item
79If one file @var{foo} uses a macro defined in another file @var{bar},
bfe721d1
KH
80@var{foo} should contain this expression before the first use of the
81macro:
82
83@example
84(eval-when-compile (require '@var{bar}))
85@end example
86
87@noindent
969fe9b5
RS
88(And the library @var{bar} should contain @code{(provide '@var{bar})},
89to make the @code{require} work.) This will cause @var{bar} to be
90loaded when you byte-compile @var{foo}. Otherwise, you risk compiling
91@var{foo} without the necessary macro loaded, and that would produce
92compiled code that won't work right. @xref{Compiling Macros}.
bfe721d1
KH
93
94Using @code{eval-when-compile} avoids loading @var{bar} when
95the compiled version of @var{foo} is @emph{used}.
7015aca4 96
becd5943
KH
97@item
98Please don't require the @code{cl} package of Common Lisp extensions at
99run time. Use of this package is optional, and it is not part of the
100standard Emacs namespace. If your package loads @code{cl} at run time,
101that could cause name clashes for users who don't use that package.
102
103However, there is no problem with using the @code{cl} package at compile
104time, for the sake of macros. You do that like this:
105
106@example
107(eval-when-compile (require 'cl))
108@end example
109
7015aca4 110@item
2323275b
RS
111When defining a major mode, please follow the major mode
112conventions. @xref{Major Mode Conventions}.
113
114@item
115When defining a minor mode, please follow the minor mode
116conventions. @xref{Minor Mode Conventions}.
7015aca4 117
6cbf476c
RS
118@item
119If the purpose of a function is to tell you whether a certain condition
120is true or false, give the function a name that ends in @samp{p}. If
121the name is one word, add just @samp{p}; if the name is multiple words,
122add @samp{-p}. Examples are @code{framep} and @code{frame-live-p}.
123
124@item
125If a user option variable records a true-or-false condition, give it a
126name that ends in @samp{-flag}.
127
49247521
LK
128@item
129If the purpose of a variable is to store a single function, give it a
130name that ends in @samp{-function}. If the purpose of a variable is
131to store a list of functions (i.e., the variable is a hook), please
132follow the naming conventions for hooks. @xref{Hooks}.
133
7015aca4 134@item
a9f0a989
RS
135@cindex reserved keys
136@cindex keys, reserved
7015aca4 137Please do not define @kbd{C-c @var{letter}} as a key in your major
17d4b8ce
RS
138modes. Sequences consisting of @kbd{C-c} and a letter (either upper
139or lower case) are reserved for users; they are the @strong{only}
140sequences reserved for users, so do not block them.
7015aca4 141
17d4b8ce
RS
142Changing all the Emacs major modes to respect this convention was a
143lot of work; abandoning this convention would make that work go to
144waste, and inconvenience users. Please comply with it.
7015aca4 145
17d4b8ce
RS
146@item
147Sequences consisting of @kbd{C-c} followed by a control character or a
148digit are reserved for major modes.
00d96ada
RS
149
150@item
151Sequences consisting of @kbd{C-c} followed by @kbd{@{}, @kbd{@}},
152@kbd{<}, @kbd{>}, @kbd{:} or @kbd{;} are also reserved for major modes.
153
154@item
155Sequences consisting of @kbd{C-c} followed by any other punctuation
156character are allocated for minor modes. Using them in a major mode is
157not absolutely prohibited, but if you do that, the major mode binding
158may be shadowed from time to time by minor modes.
7015aca4 159
e6a17ab5
RS
160@item
161Function keys @key{F5} through @key{F9} without modifier keys are
162reserved for users to define.
163
7015aca4 164@item
f9f59935 165Do not bind @kbd{C-h} following any prefix character (including
7015aca4
RS
166@kbd{C-c}). If you don't bind @kbd{C-h}, it is automatically available
167as a help character for listing the subcommands of the prefix character.
168
169@item
f9f59935 170Do not bind a key sequence ending in @key{ESC} except following
969fe9b5 171another @key{ESC}. (That is, it is OK to bind a sequence ending in
7015aca4
RS
172@kbd{@key{ESC} @key{ESC}}.)
173
174The reason for this rule is that a non-prefix binding for @key{ESC} in
175any context prevents recognition of escape sequences as function keys in
176that context.
177
52c90d84
RS
178@item
179Anything which acts like a temporary mode or state which the user can
b6ae404e 180enter and leave should define @kbd{@key{ESC} @key{ESC}} or
52c90d84
RS
181@kbd{@key{ESC} @key{ESC} @key{ESC}} as a way to escape.
182
183For a state which accepts ordinary Emacs commands, or more generally any
184kind of state in which @key{ESC} followed by a function key or arrow key
185is potentially meaningful, then you must not define @kbd{@key{ESC}
186@key{ESC}}, since that would preclude recognizing an escape sequence
187after @key{ESC}. In these states, you should define @kbd{@key{ESC}
188@key{ESC} @key{ESC}} as the way to escape. Otherwise, define
189@kbd{@key{ESC} @key{ESC}} instead.
190
4b6694ef
RS
191@item
192Applications should not bind mouse events based on button 1 with the
193shift key held down. These events include @kbd{S-mouse-1},
194@kbd{M-S-mouse-1}, @kbd{C-S-mouse-1}, and so on. They are reserved for
195users.
196
197@item
c7a401dd
DL
198@cindex mouse-2
199@cindex references, following
f9f59935
RS
200Special major modes used for read-only text should usually redefine
201@kbd{mouse-2} and @key{RET} to trace some sort of reference in the text.
202Modes such as Dired, Info, Compilation, and Occur redefine it in this
203way.
4b6694ef 204
7015aca4 205@item
8414f615 206When a package provides a modification of ordinary Emacs behavior, it is
b8fbee64 207good to include a command to enable and disable the feature, provide a
8414f615
RS
208command named @code{@var{whatever}-mode} which turns the feature on or
209off, and make it autoload (@pxref{Autoload}). Design the package so
210that simply loading it has no visible effect---that should not enable
c7a401dd
DL
211the feature.@footnote{Consider that the package may be loaded
212arbitrarily by Custom for instance.} Users will request the feature by
b68c6256
DL
213invoking the command, which will often be constructed as a minor mode.
214
215@cindex unloading packages
8c7e427d 216If your package contains functions which do modify ordinary Emacs
b68c6256
DL
217behavior, for instance by adding functions to hooks, define a function
218@code{@var{feature}-unload-hook} where @var{feature} is the name of
219the feature the package provides. This function should undo any such
220changes, e.g.@: by turning off a minor mode, when
221@findex unload-feature
222@code{unload-feature} is used.
8414f615
RS
223
224@item
225It is a bad idea to define aliases for the Emacs primitives. Use the
226standard names instead.
7015aca4 227
c7a401dd
DL
228@item
229If a package needs to define an alias or a new function for
bbac5699 230compatibility with some other version of Emacs, name it with the package
c7a401dd
DL
231prefix, not with the raw name with which it occurs in the other version.
232Here is an example from Gnus, which provides many examples of such
233compatibility issues.
234
235@example
236(defalias 'gnus-point-at-bol
237 (if (fboundp 'point-at-bol)
238 'point-at-bol
239 'line-beginning-position))
240@end example
241
7015aca4 242@item
2323275b
RS
243Redefining (or advising) an Emacs primitive is discouraged. It may do
244the right thing for a particular program, but there is no telling what
245other programs might break as a result.
7015aca4
RS
246
247@item
248If a file does replace any of the functions or library programs of
249standard Emacs, prominent comments at the beginning of the file should
250say which functions are replaced, and how the behavior of the
251replacements differs from that of the originals.
252
7015aca4
RS
253@item
254Please keep the names of your Emacs Lisp source files to 13 characters
255or less. This way, if the files are compiled, the compiled files' names
256will be 14 characters or less, which is short enough to fit on all kinds
257of Unix systems.
258
259@item
b68c6256
DL
260@findex next-line
261@findex previous-line
262@findex forward-line
7015aca4
RS
263Don't use @code{next-line} or @code{previous-line} in programs; nearly
264always, @code{forward-line} is more convenient as well as more
265predictable and robust. @xref{Text Lines}.
266
267@item
574efc83
RS
268Don't call functions that set the mark, unless setting the mark is one
269of the intended features of your program. The mark is a user-level
270feature, so it is incorrect to change the mark except to supply a value
271for the user's benefit. @xref{The Mark}.
7015aca4 272
f9f59935 273In particular, don't use any of these functions:
7015aca4
RS
274
275@itemize @bullet
276@item
277@code{beginning-of-buffer}, @code{end-of-buffer}
278@item
279@code{replace-string}, @code{replace-regexp}
280@end itemize
281
282If you just want to move point, or replace a certain string, without any
283of the other features intended for interactive users, you can replace
284these functions with one or two lines of simple Lisp code.
285
1c2b5877
RS
286@item
287Use lists rather than vectors, except when there is a particular reason
288to use a vector. Lisp has more facilities for manipulating lists than
289for vectors, and working with lists is usually more convenient.
290
291Vectors are advantageous for tables that are substantial in size and are
292accessed in random order (not searched front to back), provided there is
293no need to insert or delete elements (only lists allow that).
294
7015aca4
RS
295@item
296The recommended way to print a message in the echo area is with
297the @code{message} function, not @code{princ}. @xref{The Echo Area}.
298
299@item
300When you encounter an error condition, call the function @code{error}
301(or @code{signal}). The function @code{error} does not return.
302@xref{Signaling Errors}.
303
304Do not use @code{message}, @code{throw}, @code{sleep-for},
305or @code{beep} to report errors.
306
bfe721d1
KH
307@item
308An error message should start with a capital letter but should not end
309with a period.
310
01e3636e
RS
311@item
312In @code{interactive}, if you use a Lisp expression to produce a list
313of arguments, don't try to provide the ``correct'' default values for
314region or position arguments. Instead, provide @code{nil} for those
315arguments if they were not specified, and have the function body
316compute the default value when the argument is @code{nil}. For
317instance, write this:
318
319@example
320(defun foo (pos)
321 (interactive
322 (list (if @var{specified} @var{specified-pos})))
323 (unless pos (setq pos @var{default-pos}))
324 ...)
325@end example
326
327@noindent
328rather than this:
329
330@example
331(defun foo (pos)
332 (interactive
333 (list (if @var{specified} @var{specified-pos}
334 @var{default-pos})))
335 ...)
336@end example
337
338@noindent
339This is so that repetition of the command will recompute
340these defaults based on the current circumstances.
341
342You do not need to take such precautions when you use interactive
343specs @samp{d}, @samp{m} and @samp{r}, because they make special
344arrangements to recompute the argument values on repetition of the
345command.
346
2089b41a
RS
347@item
348Many commands that take a long time to execute display a message that
01e3636e 349says something like @samp{Operating...} when they start, and change it to
2089b41a
RS
350@samp{Operating...done} when they finish. Please keep the style of
351these messages uniform: @emph{no} space around the ellipsis, and
01e3636e 352@emph{no} period after @samp{done}.
2089b41a 353
7015aca4 354@item
4b6694ef
RS
355Try to avoid using recursive edits. Instead, do what the Rmail @kbd{e}
356command does: use a new local keymap that contains one command defined
357to switch back to the old local keymap. Or do what the
358@code{edit-options} command does: switch to another buffer and let the
359user switch back at will. @xref{Recursive Editing}.
7015aca4
RS
360
361@item
362In some other systems there is a convention of choosing variable names
363that begin and end with @samp{*}. We don't use that convention in Emacs
4b6694ef 364Lisp, so please don't use it in your programs. (Emacs uses such names
969fe9b5 365only for special-purpose buffers.) The users will find Emacs more
4b6694ef 366coherent if all libraries use the same conventions.
7015aca4 367
6a994023
RS
368@item
369Try to avoid compiler warnings about undefined free variables, by adding
378f6042 370@code{defvar} definitions for these variables.
6a994023 371
8241495d
RS
372Sometimes adding a @code{require} for another package is useful to avoid
373compilation warnings for variables and functions defined in that
513331d3 374package. If you do this, often it is better if the @code{require} acts
8241495d
RS
375only at compile time. Here's how to do that:
376
377@example
378(eval-when-compile
379 (require 'foo)
380 (defvar bar-baz))
381@end example
382
6a994023
RS
383If you bind a variable in one function, and use it or set it in another
384function, the compiler warns about the latter function unless the
385variable has a definition. But often these variables have short names,
a9f0a989 386and it is not clean for Lisp packages to define such variable names.
6a994023
RS
387Therefore, you should rename the variable to start with the name prefix
388used for the other functions and variables in your package.
389
7015aca4
RS
390@item
391Indent each function with @kbd{C-M-q} (@code{indent-sexp}) using the
392default indentation parameters.
393
394@item
395Don't make a habit of putting close-parentheses on lines by themselves;
396Lisp programmers find this disconcerting. Once in a while, when there
397is a sequence of many consecutive close-parentheses, it may make sense
969fe9b5 398to split the sequence in one or two significant places.
7015aca4
RS
399
400@item
401Please put a copyright notice on the file if you give copies to anyone.
f9f59935
RS
402Use a message like this one:
403
404@smallexample
405;; Copyright (C) @var{year} @var{name}
406
407;; This program is free software; you can redistribute it and/or
408;; modify it under the terms of the GNU General Public License as
409;; published by the Free Software Foundation; either version 2 of
410;; the License, or (at your option) any later version.
411
412;; This program is distributed in the hope that it will be
413;; useful, but WITHOUT ANY WARRANTY; without even the implied
414;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
415;; PURPOSE. See the GNU General Public License for more details.
416
417;; You should have received a copy of the GNU General Public
418;; License along with this program; if not, write to the Free
419;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
420;; MA 02111-1307 USA
421@end smallexample
422
423If you have signed papers to assign the copyright to the Foundation,
424then use @samp{Free Software Foundation, Inc.} as @var{name}.
425Otherwise, use your name.
7015aca4
RS
426@end itemize
427
428@node Compilation Tips
429@section Tips for Making Compiled Code Fast
430@cindex execution speed
431@cindex speedups
432
433 Here are ways of improving the execution speed of byte-compiled
4b6694ef 434Lisp programs.
7015aca4
RS
435
436@itemize @bullet
437@item
438@cindex profiling
439@cindex timing programs
a9f0a989 440@cindex @file{elp.el}
5f7eb05d
EZ
441Profile your program with the @file{elp} library. See the file
442@file{elp.el} for instructions.
7015aca4
RS
443
444@item
445Use iteration rather than recursion whenever possible.
446Function calls are slow in Emacs Lisp even when a compiled function
447is calling another compiled function.
448
449@item
bfe721d1
KH
450Using the primitive list-searching functions @code{memq}, @code{member},
451@code{assq}, or @code{assoc} is even faster than explicit iteration. It
f9f59935 452can be worth rearranging a data structure so that one of these primitive
bfe721d1 453search functions can be used.
7015aca4
RS
454
455@item
177c0ea7 456Certain built-in functions are handled specially in byte-compiled code,
7015aca4
RS
457avoiding the need for an ordinary function call. It is a good idea to
458use these functions rather than alternatives. To see whether a function
459is handled specially by the compiler, examine its @code{byte-compile}
460property. If the property is non-@code{nil}, then the function is
461handled specially.
462
463For example, the following input will show you that @code{aref} is
a9f0a989 464compiled specially (@pxref{Array Functions}):
7015aca4 465
4b6694ef 466@example
7015aca4
RS
467@group
468(get 'aref 'byte-compile)
469 @result{} byte-compile-two-args
470@end group
4b6694ef 471@end example
7015aca4
RS
472
473@item
1911e6e5 474If calling a small function accounts for a substantial part of your
7015aca4
RS
475program's running time, make the function inline. This eliminates
476the function call overhead. Since making a function inline reduces
477the flexibility of changing the program, don't do it unless it gives
4b6694ef 478a noticeable speedup in something slow enough that users care about
7015aca4
RS
479the speed. @xref{Inline Functions}.
480@end itemize
481
482@node Documentation Tips
483@section Tips for Documentation Strings
484
969fe9b5
RS
485@findex checkdoc-minor-mode
486 Here are some tips and conventions for the writing of documentation
487strings. You can check many of these conventions by running the command
488@kbd{M-x checkdoc-minor-mode}.
7015aca4
RS
489
490@itemize @bullet
491@item
574efc83 492Every command, function, or variable intended for users to know about
7015aca4
RS
493should have a documentation string.
494
495@item
e0d32668
RS
496An internal variable or subroutine of a Lisp program might as well have
497a documentation string. In earlier Emacs versions, you could save space
498by using a comment instead of a documentation string, but that is no
2468d0c0
DL
499longer the case---documentation strings now take up very little space in
500a running Emacs.
7015aca4 501
b090d792
RS
502@item
503Format the documentation string so that it fits in an Emacs window on an
50480-column screen. It is a good idea for most lines to be no wider than
50560 characters. The first line should not be wider than 67 characters
506or it will look bad in the output of @code{apropos}.
507
508You can fill the text if that looks good. However, rather than blindly
509filling the entire documentation string, you can often make it much more
510readable by choosing certain line breaks with care. Use blank lines
511between topics if the documentation string is long.
512
7015aca4
RS
513@item
514The first line of the documentation string should consist of one or two
574efc83 515complete sentences that stand on their own as a summary. @kbd{M-x
2468d0c0
DL
516apropos} displays just the first line, and if that line's contents don't
517stand on their own, the result looks bad. In particular, start the
518first line with a capital letter and end with a period.
7015aca4 519
aa5dbf7b
RS
520For a function, the first line should briefly answer the question,
521``What does this function do?'' For a variable, the first line should
522briefly answer the question, ``What does this value mean?''
523
524Don't limit the documentation string to one line; use as many lines as
525you need to explain the details of how to use the function or
526variable. Please use complete sentences for the rest of the text too.
7015aca4 527
7878d6b6
RS
528@item
529The first line should mention all the important arguments of the
530function, and should mention them in the order that they are written
531in a function call. If the function has many arguments, then it is
532not feasible to mention them all in the first line; in that case, the
533first line should mention the first few arguments, including the most
534important arguments.
535
4b6694ef 536@item
8241495d
RS
537For consistency, phrase the verb in the first sentence of a function's
538documentation string as an imperative--for instance, use ``Return the
539cons of A and B.'' in preference to ``Returns the cons of A and B@.''
540Usually it looks good to do likewise for the rest of the first
541paragraph. Subsequent paragraphs usually look better if each sentence
b090d792 542is indicative and has a proper subject.
4b6694ef 543
7015aca4
RS
544@item
545Write documentation strings in the active voice, not the passive, and in
546the present tense, not the future. For instance, use ``Return a list
547containing A and B.'' instead of ``A list containing A and B will be
548returned.''
549
550@item
551Avoid using the word ``cause'' (or its equivalents) unnecessarily.
552Instead of, ``Cause Emacs to display text in boldface,'' write just
553``Display text in boldface.''
554
2468d0c0
DL
555@item
556When a command is meaningful only in a certain mode or situation,
557do mention that in the documentation string. For example,
558the documentation of @code{dired-find-file} is:
559
560@example
561In Dired, visit the file or directory named on this line.
562@end example
563
7015aca4
RS
564@item
565Do not start or end a documentation string with whitespace.
177c0ea7 566
7015aca4
RS
567@item
568@strong{Do not} indent subsequent lines of a documentation string so
569that the text is lined up in the source code with the text of the first
570line. This looks nice in the source code, but looks bizarre when users
571view the documentation. Remember that the indentation before the
572starting double-quote is not part of the string!
573
75d97f47
RS
574@item
575When the user tries to use a disabled command, Emacs displays just the
576first paragraph of its documentation string---everything through the
577first blank line. If you wish, you can choose which information to
578include before the first blank line so as to make this display useful.
579
7015aca4
RS
580@item
581A variable's documentation string should start with @samp{*} if the
4b6694ef 582variable is one that users would often want to set interactively. If
574efc83
RS
583the value is a long list, or a function, or if the variable would be set
584only in init files, then don't start the documentation string with
7015aca4
RS
585@samp{*}. @xref{Defining Variables}.
586
587@item
588The documentation string for a variable that is a yes-or-no flag should
4b6694ef
RS
589start with words such as ``Non-nil means@dots{}'', to make it clear that
590all non-@code{nil} values are equivalent and indicate explicitly what
591@code{nil} and non-@code{nil} mean.
7015aca4 592
5c5b7d3e
RS
593@item
594The documentation string for a function that is a yes-or-no predicate
595should start with words such as ``Return t if @dots{}'', to indicate
596explicitly what constitutes ``truth''. The word ``return'' avoids
597starting the sentence with lower-case ``t'', which is somewhat
598distracting.
599
7015aca4
RS
600@item
601When a function's documentation string mentions the value of an argument
602of the function, use the argument name in capital letters as if it were
603a name for that value. Thus, the documentation string of the function
2468d0c0
DL
604@code{eval} refers to its second argument as @samp{FORM}, because the
605actual argument name is @code{form}:
606
607@example
608Evaluate FORM and return its value.
609@end example
7015aca4 610
2468d0c0
DL
611Also write metasyntactic variables in capital letters, such as when you
612show the decomposition of a list or vector into subunits, some of which
613may vary. @samp{KEY} and @samp{VALUE} in the following example
8241495d
RS
614illustrate this practice:
615
616@example
617The argument TABLE should be an alist whose elements
618have the form (KEY . VALUE). Here, KEY is ...
619@end example
7015aca4 620
5c5b7d3e
RS
621@item
622Never change the case of a Lisp symbol when you mention it in a doc
623string. If the symbol's name is @code{foo}, write ``foo'', not
624``Foo'' (which is a different symbol).
625
626This might appear to contradict the policy of writing function
627argument values, but there is no real contradiction; the argument
628@emph{value} is not the same thing as the @emph{symbol} which the
629function uses to hold the value.
630
631If this puts a lower-case letter at the beginning of a sentence
632and that annoys you, rewrite the sentence so that the symbol
633is not at the start of it.
634
2468d0c0
DL
635@item
636If a line in a documentation string begins with an open-parenthesis,
637write a backslash before the open-parenthesis, like this:
638
639@example
640The argument FOO can be either a number
641\(a buffer position) or a string (a file name).
642@end example
643
644This prevents the open-parenthesis from being treated as the start of a
645defun (@pxref{Defuns,, Defuns, emacs, The GNU Emacs Manual}).
646
7015aca4
RS
647@item
648@iftex
649When a documentation string refers to a Lisp symbol, write it as it
650would be printed (which usually means in lower case), with single-quotes
651around it. For example: @samp{`lambda'}. There are two exceptions:
652write @code{t} and @code{nil} without single-quotes.
653@end iftex
37680279 654@ifnottex
7015aca4
RS
655When a documentation string refers to a Lisp symbol, write it as it
656would be printed (which usually means in lower case), with single-quotes
657around it. For example: @samp{lambda}. There are two exceptions: write
969fe9b5
RS
658t and nil without single-quotes. (In this manual, we use a different
659convention, with single-quotes for all symbols.)
37680279 660@end ifnottex
7015aca4 661
1911e6e5
RS
662Help mode automatically creates a hyperlink when a documentation string
663uses a symbol name inside single quotes, if the symbol has either a
a9f0a989
RS
664function or a variable definition. You do not need to do anything
665special to make use of this feature. However, when a symbol has both a
666function definition and a variable definition, and you want to refer to
667just one of them, you can specify which one by writing one of the words
668@samp{variable}, @samp{option}, @samp{function}, or @samp{command},
669immediately before the symbol name. (Case makes no difference in
670recognizing these indicator words.) For example, if you write
671
672@example
673This function sets the variable `buffer-file-name'.
674@end example
675
676@noindent
677then the hyperlink will refer only to the variable documentation of
678@code{buffer-file-name}, and not to its function documentation.
679
680If a symbol has a function definition and/or a variable definition, but
681those are irrelevant to the use of the symbol that you are documenting,
682you can write the word @samp{symbol} before the symbol name to prevent
683making any hyperlink. For example,
969fe9b5
RS
684
685@example
a9f0a989
RS
686If the argument KIND-OF-RESULT is the symbol `list',
687this function returns a list of all the objects
688that satisfy the criterion.
969fe9b5
RS
689@end example
690
a9f0a989
RS
691@noindent
692does not make a hyperlink to the documentation, irrelevant here, of the
693function @code{list}.
694
8241495d
RS
695To make a hyperlink to Info documentation, write the name of the Info
696node in single quotes, preceded by @samp{info node} or @samp{Info
697node}. The Info file name defaults to @samp{emacs}. For example,
698
699@smallexample
700See Info node `Font Lock' and Info node `(elisp)Font Lock Basics'.
701@end smallexample
702
7015aca4
RS
703@item
704Don't write key sequences directly in documentation strings. Instead,
705use the @samp{\\[@dots{}]} construct to stand for them. For example,
9e2b495b
RS
706instead of writing @samp{C-f}, write the construct
707@samp{\\[forward-char]}. When Emacs displays the documentation string,
708it substitutes whatever key is currently bound to @code{forward-char}.
709(This is normally @samp{C-f}, but it may be some other character if the
710user has moved key bindings.) @xref{Keys in Documentation}.
7015aca4
RS
711
712@item
713In documentation strings for a major mode, you will want to refer to the
714key bindings of that mode's local map, rather than global ones.
715Therefore, use the construct @samp{\\<@dots{}>} once in the
716documentation string to specify which key map to use. Do this before
717the first use of @samp{\\[@dots{}]}. The text inside the
718@samp{\\<@dots{}>} should be the name of the variable containing the
719local keymap for the major mode.
720
721It is not practical to use @samp{\\[@dots{}]} very many times, because
722display of the documentation string will become slow. So use this to
723describe the most important commands in your major mode, and then use
724@samp{\\@{@dots{}@}} to display the rest of the mode's keymap.
7015aca4
RS
725@end itemize
726
727@node Comment Tips
728@section Tips on Writing Comments
729
730 We recommend these conventions for where to put comments and how to
731indent them:
732
733@table @samp
734@item ;
735Comments that start with a single semicolon, @samp{;}, should all be
736aligned to the same column on the right of the source code. Such
737comments usually explain how the code on the same line does its job. In
738Lisp mode and related modes, the @kbd{M-;} (@code{indent-for-comment})
739command automatically inserts such a @samp{;} in the right place, or
4b6694ef 740aligns such a comment if it is already present.
7015aca4 741
574efc83 742This and following examples are taken from the Emacs sources.
7015aca4
RS
743
744@smallexample
745@group
746(setq base-version-list ; there was a base
747 (assoc (substring fn 0 start-vn) ; version to which
748 file-version-assoc-list)) ; this looks like
749 ; a subversion
750@end group
751@end smallexample
752
753@item ;;
754Comments that start with two semicolons, @samp{;;}, should be aligned to
4b6694ef 755the same level of indentation as the code. Such comments usually
7015aca4
RS
756describe the purpose of the following lines or the state of the program
757at that point. For example:
758
759@smallexample
760@group
761(prog1 (setq auto-fill-function
762 @dots{}
763 @dots{}
4b6694ef 764 ;; update mode line
7015aca4
RS
765 (force-mode-line-update)))
766@end group
767@end smallexample
768
2468d0c0 769We also normally use two semicolons for comments outside functions.
7015aca4
RS
770
771@smallexample
772@group
2468d0c0
DL
773;; This Lisp code is run in Emacs
774;; when it is to operate as a server
775;; for other processes.
7015aca4
RS
776@end group
777@end smallexample
778
2468d0c0
DL
779Every function that has no documentation string (presumably one that is
780used only internally within the package it belongs to), should instead
781have a two-semicolon comment right before the function, explaining what
782the function does and how to call it properly. Explain precisely what
783each argument means and how the function interprets its possible values.
784
785@item ;;;
786Comments that start with three semicolons, @samp{;;;}, should start at
787the left margin. These are used, occasionally, for comments within
788functions that should start at the margin. We also use them sometimes
789for comments that are between functions---whether to use two or three
790semicolons there is a matter of style.
791
574efc83 792Another use for triple-semicolon comments is for commenting out lines
2468d0c0 793within a function. We use three semicolons for this precisely so that
4b6694ef
RS
794they remain at the left margin.
795
796@smallexample
797(defun foo (a)
798;;; This is no longer necessary.
799;;; (force-mode-line-update)
800 (message "Finished with %s" a))
801@end smallexample
802
7015aca4
RS
803@item ;;;;
804Comments that start with four semicolons, @samp{;;;;}, should be aligned
805to the left margin and are used for headings of major sections of a
806program. For example:
807
808@smallexample
809;;;; The kill ring
810@end smallexample
811@end table
812
813@noindent
814The indentation commands of the Lisp modes in Emacs, such as @kbd{M-;}
969fe9b5 815(@code{indent-for-comment}) and @key{TAB} (@code{lisp-indent-line}),
7015aca4 816automatically indent comments according to these conventions,
574efc83 817depending on the number of semicolons. @xref{Comments,,
7015aca4
RS
818Manipulating Comments, emacs, The GNU Emacs Manual}.
819
7015aca4
RS
820@node Library Headers
821@section Conventional Headers for Emacs Libraries
822@cindex header comments
823@cindex library header comments
824
f9f59935 825 Emacs has conventions for using special comments in Lisp libraries
7015aca4 826to divide them into sections and give information such as who wrote
8241495d
RS
827them. This section explains these conventions.
828
829 We'll start with an example, a package that is included in the Emacs
830distribution.
831
832 Parts of this example reflect its status as part of Emacs; for
833example, the copyright notice lists the Free Software Foundation as the
834copyright holder, and the copying permission says the file is part of
835Emacs. When you write a package and post it, the copyright holder would
836be you (unless your employer claims to own it instead), and you should
837get the suggested copying permission from the end of the GNU General
838Public License itself. Don't say your file is part of Emacs
839if we haven't installed it in Emacs yet!
840
841 With that warning out of the way, on to the example:
7015aca4
RS
842
843@smallexample
844@group
845;;; lisp-mnt.el --- minor mode for Emacs Lisp maintainers
846
847;; Copyright (C) 1992 Free Software Foundation, Inc.
848@end group
849
850;; Author: Eric S. Raymond <esr@@snark.thyrsus.com>
851;; Maintainer: Eric S. Raymond <esr@@snark.thyrsus.com>
852;; Created: 14 Jul 1992
853;; Version: 1.2
854@group
855;; Keywords: docs
856
857;; This file is part of GNU Emacs.
969fe9b5
RS
858@dots{}
859;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
860;; Boston, MA 02111-1307, USA.
7015aca4
RS
861@end group
862@end smallexample
863
864 The very first line should have this format:
865
866@example
867;;; @var{filename} --- @var{description}
868@end example
869
870@noindent
e4317c8c
RS
871The description should be complete in one line. If the file
872needs a @samp{-*-} specification, put it after @var{description}.
7015aca4
RS
873
874 After the copyright notice come several @dfn{header comment} lines,
4b6694ef 875each beginning with @samp{;; @var{header-name}:}. Here is a table of
7015aca4
RS
876the conventional possibilities for @var{header-name}:
877
878@table @samp
879@item Author
880This line states the name and net address of at least the principal
881author of the library.
882
883If there are multiple authors, you can list them on continuation lines
4b6694ef 884led by @code{;;} and a tab character, like this:
7015aca4
RS
885
886@smallexample
887@group
888;; Author: Ashwin Ram <Ram-Ashwin@@cs.yale.edu>
4b6694ef
RS
889;; Dave Sill <de5@@ornl.gov>
890;; Dave Brennan <brennan@@hal.com>
891;; Eric Raymond <esr@@snark.thyrsus.com>
7015aca4
RS
892@end group
893@end smallexample
894
895@item Maintainer
896This line should contain a single name/address as in the Author line, or
4b6694ef
RS
897an address only, or the string @samp{FSF}. If there is no maintainer
898line, the person(s) in the Author field are presumed to be the
899maintainers. The example above is mildly bogus because the maintainer
900line is redundant.
7015aca4
RS
901
902The idea behind the @samp{Author} and @samp{Maintainer} lines is to make
903possible a Lisp function to ``send mail to the maintainer'' without
904having to mine the name out by hand.
905
906Be sure to surround the network address with @samp{<@dots{}>} if
907you include the person's full name as well as the network address.
908
909@item Created
910This optional line gives the original creation date of the
911file. For historical interest only.
912
913@item Version
914If you wish to record version numbers for the individual Lisp program, put
915them in this line.
916
917@item Adapted-By
918In this header line, place the name of the person who adapted the
919library for installation (to make it fit the style conventions, for
920example).
921
922@item Keywords
923This line lists keywords for the @code{finder-by-keyword} help command.
a9f0a989
RS
924Please use that command to see a list of the meaningful keywords.
925
7015aca4 926This field is important; it's how people will find your package when
2c62739d
RS
927they're looking for things by topic area. To separate the keywords, you
928can use spaces, commas, or both.
7015aca4
RS
929@end table
930
931 Just about every Lisp library ought to have the @samp{Author} and
932@samp{Keywords} header comment lines. Use the others if they are
933appropriate. You can also put in header lines with other header
934names---they have no standard meanings, so they can't do any harm.
935
936 We use additional stylized comments to subdivide the contents of the
2468d0c0
DL
937library file. These should be separated by blank lines from anything
938else. Here is a table of them:
7015aca4
RS
939
940@table @samp
941@item ;;; Commentary:
942This begins introductory comments that explain how the library works.
a9f0a989
RS
943It should come right after the copying permissions, terminated by a
944@samp{Change Log}, @samp{History} or @samp{Code} comment line. This
945text is used by the Finder package, so it should make sense in that
946context.
947
fd423b79 948@item ;;; Documentation:
a9f0a989
RS
949This has been used in some files in place of @samp{;;; Commentary:},
950but @samp{;;; Commentary:} is preferred.
7015aca4 951
a9f0a989 952@item ;;; Change Log:
7015aca4 953This begins change log information stored in the library file (if you
2468d0c0
DL
954store the change history there). For Lisp files distributed with Emacs,
955the change history is kept in the file @file{ChangeLog} and not in the
956source file at all; these files generally do not have a @samp{;;; Change
957Log:} line. @samp{History} is an alternative to @samp{Change Log}.
7015aca4
RS
958
959@item ;;; Code:
960This begins the actual code of the program.
961
962@item ;;; @var{filename} ends here
963This is the @dfn{footer line}; it appears at the very end of the file.
964Its purpose is to enable people to detect truncated versions of the file
965from the lack of a footer line.
966@end table
ab5796a9
MB
967
968@ignore
969 arch-tag: 9ea911c2-6b1d-47dd-88b7-0a94e8b27c2e
970@end ignore