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