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