(prepare_to_modify_buffer): Use file_truename for locking.
[bpt/emacs.git] / lispref / tips.texi
CommitLineData
7015aca4
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
3@c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
4@c See the file elisp.texi for copying conditions.
5@setfilename ../info/tips
6@node Tips, GNU Emacs Internals, Calendar, Top
7@appendix Tips and Standards
8@cindex tips
9@cindex standards of coding style
10@cindex coding standards
11
12 This chapter describes no additional features of Emacs Lisp.
13Instead it gives advice on making effective use of the features described
14in the previous chapters.
15
16@menu
17* Style Tips:: Writing clean and robust programs.
18* Compilation Tips:: Making compiled code run fast.
19* Documentation Tips:: Writing readable documentation strings.
20* Comment Tips:: Conventions for writing comments.
21* Library Headers:: Standard headers for library packages.
22@end menu
23
24@node Style Tips
25@section Writing Clean Lisp Programs
26
27 Here are some tips for avoiding common errors in writing Lisp code
28intended for widespread use:
29
30@itemize @bullet
31@item
32Since all global variables share the same name space, and all functions
33share another name space, you should choose a short word to distinguish
34your program from other Lisp programs. Then take care to begin the
35names of all global variables, constants, and functions with the chosen
36prefix. This helps avoid name conflicts.
37
38This recommendation applies even to names for traditional Lisp
39primitives that are not primitives in Emacs Lisp---even to @code{cadr}.
40Believe it or not, there is more than one plausible way to define
41@code{cadr}. Play it safe; append your name prefix to produce a name
42like @code{foo-cadr} or @code{mylib-cadr} instead.
43
44If you write a function that you think ought to be added to Emacs under
45a certain name, such as @code{twiddle-files}, don't call it by that name
46in your program. Call it @code{mylib-twiddle-files} in your program,
47and send mail to @samp{bug-gnu-emacs@@prep.ai.mit.edu} suggesting we add
48it to Emacs. If and when we do, we can change the name easily enough.
49
50If one prefix is insufficient, your package may use two or three
51alternative common prefixes, so long as they make sense.
52
53Separate the prefix from the rest of the symbol name with a hyphen,
54@samp{-}. This will be consistent with Emacs itself and with most Emacs
55Lisp programs.
56
57@item
58It is often useful to put a call to @code{provide} in each separate
59library program, at least if there is more than one entry point to the
60program.
61
62@item
63If one file @var{foo} uses a macro defined in another file @var{bar},
64@var{foo} should contain @code{(require '@var{bar})} before the first
65use of the macro. (And @var{bar} should contain @code{(provide
66'@var{bar})}, to make the @code{require} work.) This will cause
67@var{bar} to be loaded when you byte-compile @var{foo}. Otherwise, you
68risk compiling @var{foo} without the necessary macro loaded, and that
69would produce compiled code that won't work right. @xref{Compiling
70Macros}.
71
72@item
73If you define a major mode, make sure to run a hook variable using
74@code{run-hooks}, just as the existing major modes do. @xref{Hooks}.
75
6cbf476c
RS
76@item
77If the purpose of a function is to tell you whether a certain condition
78is true or false, give the function a name that ends in @samp{p}. If
79the name is one word, add just @samp{p}; if the name is multiple words,
80add @samp{-p}. Examples are @code{framep} and @code{frame-live-p}.
81
82@item
83If a user option variable records a true-or-false condition, give it a
84name that ends in @samp{-flag}.
85
7015aca4
RS
86@item
87Please do not define @kbd{C-c @var{letter}} as a key in your major
88modes. These sequences are reserved for users; they are the
89@strong{only} sequences reserved for users, so we cannot do without
90them.
91
92Instead, define sequences consisting of @kbd{C-c} followed by a
93non-letter. These sequences are reserved for major modes.
94
95Changing all the major modes in Emacs 18 so they would follow this
00d96ada
RS
96convention was a lot of work. Abandoning this convention would make
97that work go to waste, and inconvenience users.
98
99@item
100Sequences consisting of @kbd{C-c} followed by @kbd{@{}, @kbd{@}},
101@kbd{<}, @kbd{>}, @kbd{:} or @kbd{;} are also reserved for major modes.
102
103@item
104Sequences consisting of @kbd{C-c} followed by any other punctuation
105character are allocated for minor modes. Using them in a major mode is
106not absolutely prohibited, but if you do that, the major mode binding
107may be shadowed from time to time by minor modes.
7015aca4
RS
108
109@item
110You should not bind @kbd{C-h} following any prefix character (including
111@kbd{C-c}). If you don't bind @kbd{C-h}, it is automatically available
112as a help character for listing the subcommands of the prefix character.
113
114@item
115You should not bind a key sequence ending in @key{ESC} except following
116another @key{ESC}. (That is, it is ok to bind a sequence ending in
117@kbd{@key{ESC} @key{ESC}}.)
118
119The reason for this rule is that a non-prefix binding for @key{ESC} in
120any context prevents recognition of escape sequences as function keys in
121that context.
122
4b6694ef
RS
123@item
124Applications should not bind mouse events based on button 1 with the
125shift key held down. These events include @kbd{S-mouse-1},
126@kbd{M-S-mouse-1}, @kbd{C-S-mouse-1}, and so on. They are reserved for
127users.
128
129@item
130Modes should redefine @kbd{mouse-2} as a command to follow some sort of
131reference in the text of a buffer, if users usually would not want to
132alter the text in that buffer by hand. Modes such as Dired, Info,
133Compilation, and Occur redefine it in this way.
134
7015aca4 135@item
8414f615
RS
136When a package provides a modification of ordinary Emacs behavior, it is
137good to include a command to enable and disable the feature, Provide a
138command named @code{@var{whatever}-mode} which turns the feature on or
139off, and make it autoload (@pxref{Autoload}). Design the package so
140that simply loading it has no visible effect---that should not enable
141the feature. Users will request the feature by invoking the command.
142
143@item
144It is a bad idea to define aliases for the Emacs primitives. Use the
145standard names instead.
7015aca4
RS
146
147@item
148Redefining an Emacs primitive is an even worse idea.
149It may do the right thing for a particular program, but
150there is no telling what other programs might break as a result.
151
152@item
153If a file does replace any of the functions or library programs of
154standard Emacs, prominent comments at the beginning of the file should
155say which functions are replaced, and how the behavior of the
156replacements differs from that of the originals.
157
158@item
159If a file requires certain standard library programs to be loaded
160beforehand, then the comments at the beginning of the file should say
161so.
162
163@item
164Please keep the names of your Emacs Lisp source files to 13 characters
165or less. This way, if the files are compiled, the compiled files' names
166will be 14 characters or less, which is short enough to fit on all kinds
167of Unix systems.
168
169@item
170Don't use @code{next-line} or @code{previous-line} in programs; nearly
171always, @code{forward-line} is more convenient as well as more
172predictable and robust. @xref{Text Lines}.
173
174@item
574efc83
RS
175Don't call functions that set the mark, unless setting the mark is one
176of the intended features of your program. The mark is a user-level
177feature, so it is incorrect to change the mark except to supply a value
178for the user's benefit. @xref{The Mark}.
7015aca4
RS
179
180In particular, don't use these functions:
181
182@itemize @bullet
183@item
184@code{beginning-of-buffer}, @code{end-of-buffer}
185@item
186@code{replace-string}, @code{replace-regexp}
187@end itemize
188
189If you just want to move point, or replace a certain string, without any
190of the other features intended for interactive users, you can replace
191these functions with one or two lines of simple Lisp code.
192
1c2b5877
RS
193@item
194Use lists rather than vectors, except when there is a particular reason
195to use a vector. Lisp has more facilities for manipulating lists than
196for vectors, and working with lists is usually more convenient.
197
198Vectors are advantageous for tables that are substantial in size and are
199accessed in random order (not searched front to back), provided there is
200no need to insert or delete elements (only lists allow that).
201
7015aca4
RS
202@item
203The recommended way to print a message in the echo area is with
204the @code{message} function, not @code{princ}. @xref{The Echo Area}.
205
206@item
207When you encounter an error condition, call the function @code{error}
208(or @code{signal}). The function @code{error} does not return.
209@xref{Signaling Errors}.
210
211Do not use @code{message}, @code{throw}, @code{sleep-for},
212or @code{beep} to report errors.
213
214@item
4b6694ef
RS
215Try to avoid using recursive edits. Instead, do what the Rmail @kbd{e}
216command does: use a new local keymap that contains one command defined
217to switch back to the old local keymap. Or do what the
218@code{edit-options} command does: switch to another buffer and let the
219user switch back at will. @xref{Recursive Editing}.
7015aca4
RS
220
221@item
222In some other systems there is a convention of choosing variable names
223that begin and end with @samp{*}. We don't use that convention in Emacs
4b6694ef
RS
224Lisp, so please don't use it in your programs. (Emacs uses such names
225only for program-generated buffers.) The users will find Emacs more
226coherent if all libraries use the same conventions.
7015aca4
RS
227
228@item
229Indent each function with @kbd{C-M-q} (@code{indent-sexp}) using the
230default indentation parameters.
231
232@item
233Don't make a habit of putting close-parentheses on lines by themselves;
234Lisp programmers find this disconcerting. Once in a while, when there
235is a sequence of many consecutive close-parentheses, it may make sense
236to split them in one or two significant places.
237
238@item
239Please put a copyright notice on the file if you give copies to anyone.
240Use the same lines that appear at the top of the Lisp files in Emacs
241itself. If you have not signed papers to assign the copyright to the
242Foundation, then place your name in the copyright notice in place of the
243Foundation's name.
244@end itemize
245
246@node Compilation Tips
247@section Tips for Making Compiled Code Fast
248@cindex execution speed
249@cindex speedups
250
251 Here are ways of improving the execution speed of byte-compiled
4b6694ef 252Lisp programs.
7015aca4
RS
253
254@itemize @bullet
255@item
256@cindex profiling
257@cindex timing programs
258@cindex @file{profile.el}
259Use the @file{profile} library to profile your program. See the file
260@file{profile.el} for instructions.
261
262@item
263Use iteration rather than recursion whenever possible.
264Function calls are slow in Emacs Lisp even when a compiled function
265is calling another compiled function.
266
267@item
574efc83 268Using the primitive list-searching functions @code{memq}, @code{assq}, or
7015aca4
RS
269@code{assoc} is even faster than explicit iteration. It may be worth
270rearranging a data structure so that one of these primitive search
271functions can be used.
272
273@item
4b6694ef 274Certain built-in functions are handled specially in byte-compiled code,
7015aca4
RS
275avoiding the need for an ordinary function call. It is a good idea to
276use these functions rather than alternatives. To see whether a function
277is handled specially by the compiler, examine its @code{byte-compile}
278property. If the property is non-@code{nil}, then the function is
279handled specially.
280
281For example, the following input will show you that @code{aref} is
282compiled specially (@pxref{Array Functions}) while @code{elt} is not
283(@pxref{Sequence Functions}):
284
4b6694ef 285@example
7015aca4
RS
286@group
287(get 'aref 'byte-compile)
288 @result{} byte-compile-two-args
289@end group
290
291@group
292(get 'elt 'byte-compile)
293 @result{} nil
294@end group
4b6694ef 295@end example
7015aca4
RS
296
297@item
298If calling a small function accounts for a substantial part of your
299program's running time, make the function inline. This eliminates
300the function call overhead. Since making a function inline reduces
301the flexibility of changing the program, don't do it unless it gives
4b6694ef 302a noticeable speedup in something slow enough that users care about
7015aca4
RS
303the speed. @xref{Inline Functions}.
304@end itemize
305
306@node Documentation Tips
307@section Tips for Documentation Strings
308
309 Here are some tips for the writing of documentation strings.
310
311@itemize @bullet
312@item
574efc83 313Every command, function, or variable intended for users to know about
7015aca4
RS
314should have a documentation string.
315
316@item
e0d32668
RS
317An internal variable or subroutine of a Lisp program might as well have
318a documentation string. In earlier Emacs versions, you could save space
319by using a comment instead of a documentation string, but that is no
320longer the case.
7015aca4
RS
321
322@item
323The first line of the documentation string should consist of one or two
574efc83 324complete sentences that stand on their own as a summary. @kbd{M-x
4b6694ef
RS
325apropos} displays just the first line, and if it doesn't stand on its
326own, the result looks bad. In particular, start the first line with a
327capital letter and end with a period.
7015aca4 328
574efc83 329The documentation string can have additional lines that expand on the
7015aca4
RS
330details of how to use the function or variable. The additional lines
331should be made up of complete sentences also, but they may be filled if
332that looks good.
333
4b6694ef
RS
334@item
335For consistency, phrase the verb in the first sentence of a
336documentation string as an infinitive with ``to'' omitted. For
337instance, use ``Return the cons of A and B.'' in preference to ``Returns
338the cons of A and B@.'' Usually it looks good to do likewise for the
339rest of the first paragraph. Subsequent paragraphs usually look better
340if they have proper subjects.
341
7015aca4
RS
342@item
343Write documentation strings in the active voice, not the passive, and in
344the present tense, not the future. For instance, use ``Return a list
345containing A and B.'' instead of ``A list containing A and B will be
346returned.''
347
348@item
349Avoid using the word ``cause'' (or its equivalents) unnecessarily.
350Instead of, ``Cause Emacs to display text in boldface,'' write just
351``Display text in boldface.''
352
353@item
354Do not start or end a documentation string with whitespace.
355
356@item
357Format the documentation string so that it fits in an Emacs window on an
574efc83 35880-column screen. It is a good idea for most lines to be no wider than
7015aca4
RS
35960 characters. The first line can be wider if necessary to fit the
360information that ought to be there.
361
362However, rather than simply filling the entire documentation string, you
363can make it much more readable by choosing line breaks with care.
364Use blank lines between topics if the documentation string is long.
365
366@item
367@strong{Do not} indent subsequent lines of a documentation string so
368that the text is lined up in the source code with the text of the first
369line. This looks nice in the source code, but looks bizarre when users
370view the documentation. Remember that the indentation before the
371starting double-quote is not part of the string!
372
373@item
374A variable's documentation string should start with @samp{*} if the
4b6694ef 375variable is one that users would often want to set interactively. If
574efc83
RS
376the value is a long list, or a function, or if the variable would be set
377only in init files, then don't start the documentation string with
7015aca4
RS
378@samp{*}. @xref{Defining Variables}.
379
380@item
381The documentation string for a variable that is a yes-or-no flag should
4b6694ef
RS
382start with words such as ``Non-nil means@dots{}'', to make it clear that
383all non-@code{nil} values are equivalent and indicate explicitly what
384@code{nil} and non-@code{nil} mean.
7015aca4
RS
385
386@item
387When a function's documentation string mentions the value of an argument
388of the function, use the argument name in capital letters as if it were
389a name for that value. Thus, the documentation string of the function
4b6694ef
RS
390@code{/} refers to its second argument as @samp{DIVISOR}, because the
391actual argument name is @code{divisor}.
7015aca4
RS
392
393Also use all caps for meta-syntactic variables, such as when you show
394the decomposition of a list or vector into subunits, some of which may
395vary.
396
397@item
398@iftex
399When a documentation string refers to a Lisp symbol, write it as it
400would be printed (which usually means in lower case), with single-quotes
401around it. For example: @samp{`lambda'}. There are two exceptions:
402write @code{t} and @code{nil} without single-quotes.
403@end iftex
404@ifinfo
405When a documentation string refers to a Lisp symbol, write it as it
406would be printed (which usually means in lower case), with single-quotes
407around it. For example: @samp{lambda}. There are two exceptions: write
408t and nil without single-quotes. (In this manual, we normally do use
409single-quotes for those symbols.)
410@end ifinfo
411
412@item
413Don't write key sequences directly in documentation strings. Instead,
414use the @samp{\\[@dots{}]} construct to stand for them. For example,
4b6694ef
RS
415instead of writing @samp{C-f}, write @samp{\\[forward-char]}. When
416Emacs displays the documentation string, it substitutes whatever key is
417currently bound to @code{forward-char}. (This is normally @samp{C-f},
418but it may be some other character if the user has moved key bindings.)
419@xref{Keys in Documentation}.
7015aca4
RS
420
421@item
422In documentation strings for a major mode, you will want to refer to the
423key bindings of that mode's local map, rather than global ones.
424Therefore, use the construct @samp{\\<@dots{}>} once in the
425documentation string to specify which key map to use. Do this before
426the first use of @samp{\\[@dots{}]}. The text inside the
427@samp{\\<@dots{}>} should be the name of the variable containing the
428local keymap for the major mode.
429
430It is not practical to use @samp{\\[@dots{}]} very many times, because
431display of the documentation string will become slow. So use this to
432describe the most important commands in your major mode, and then use
433@samp{\\@{@dots{}@}} to display the rest of the mode's keymap.
434
435@item
436Don't use the term ``Elisp'', since that is or was a trademark.
437Use the term ``Emacs Lisp''.
438@end itemize
439
440@node Comment Tips
441@section Tips on Writing Comments
442
443 We recommend these conventions for where to put comments and how to
444indent them:
445
446@table @samp
447@item ;
448Comments that start with a single semicolon, @samp{;}, should all be
449aligned to the same column on the right of the source code. Such
450comments usually explain how the code on the same line does its job. In
451Lisp mode and related modes, the @kbd{M-;} (@code{indent-for-comment})
452command automatically inserts such a @samp{;} in the right place, or
4b6694ef 453aligns such a comment if it is already present.
7015aca4 454
574efc83 455This and following examples are taken from the Emacs sources.
7015aca4
RS
456
457@smallexample
458@group
459(setq base-version-list ; there was a base
460 (assoc (substring fn 0 start-vn) ; version to which
461 file-version-assoc-list)) ; this looks like
462 ; a subversion
463@end group
464@end smallexample
465
466@item ;;
467Comments that start with two semicolons, @samp{;;}, should be aligned to
4b6694ef 468the same level of indentation as the code. Such comments usually
7015aca4
RS
469describe the purpose of the following lines or the state of the program
470at that point. For example:
471
472@smallexample
473@group
474(prog1 (setq auto-fill-function
475 @dots{}
476 @dots{}
4b6694ef 477 ;; update mode line
7015aca4
RS
478 (force-mode-line-update)))
479@end group
480@end smallexample
481
4b6694ef
RS
482Every function that has no documentation string (because it is use only
483internally within the package it belongs to), should have instead a
484two-semicolon comment right before the function, explaining what the
485function does and how to call it properly. Explain precisely what each
574efc83 486argument means and how the function interprets its possible values.
7015aca4
RS
487
488@item ;;;
489Comments that start with three semicolons, @samp{;;;}, should start at
4b6694ef
RS
490the left margin. Such comments are used outside function definitions to
491make general statements explaining the design principles of the program.
492For example:
7015aca4
RS
493
494@smallexample
495@group
496;;; This Lisp code is run in Emacs
497;;; when it is to operate as a server
498;;; for other processes.
499@end group
500@end smallexample
501
574efc83 502Another use for triple-semicolon comments is for commenting out lines
4b6694ef
RS
503within a function. We use triple-semicolons for this precisely so that
504they remain at the left margin.
505
506@smallexample
507(defun foo (a)
508;;; This is no longer necessary.
509;;; (force-mode-line-update)
510 (message "Finished with %s" a))
511@end smallexample
512
7015aca4
RS
513@item ;;;;
514Comments that start with four semicolons, @samp{;;;;}, should be aligned
515to the left margin and are used for headings of major sections of a
516program. For example:
517
518@smallexample
519;;;; The kill ring
520@end smallexample
521@end table
522
523@noindent
524The indentation commands of the Lisp modes in Emacs, such as @kbd{M-;}
525(@code{indent-for-comment}) and @key{TAB} (@code{lisp-indent-line})
526automatically indent comments according to these conventions,
574efc83 527depending on the number of semicolons. @xref{Comments,,
7015aca4
RS
528Manipulating Comments, emacs, The GNU Emacs Manual}.
529
7015aca4
RS
530@node Library Headers
531@section Conventional Headers for Emacs Libraries
532@cindex header comments
533@cindex library header comments
534
535 Emacs 19 has conventions for using special comments in Lisp libraries
536to divide them into sections and give information such as who wrote
537them. This section explains these conventions. First, an example:
538
539@smallexample
540@group
541;;; lisp-mnt.el --- minor mode for Emacs Lisp maintainers
542
543;; Copyright (C) 1992 Free Software Foundation, Inc.
544@end group
545
546;; Author: Eric S. Raymond <esr@@snark.thyrsus.com>
547;; Maintainer: Eric S. Raymond <esr@@snark.thyrsus.com>
548;; Created: 14 Jul 1992
549;; Version: 1.2
550@group
551;; Keywords: docs
552
553;; This file is part of GNU Emacs.
574efc83 554@var{copying permissions}@dots{}
7015aca4
RS
555@end group
556@end smallexample
557
558 The very first line should have this format:
559
560@example
561;;; @var{filename} --- @var{description}
562@end example
563
564@noindent
565The description should be complete in one line.
566
567 After the copyright notice come several @dfn{header comment} lines,
4b6694ef 568each beginning with @samp{;; @var{header-name}:}. Here is a table of
7015aca4
RS
569the conventional possibilities for @var{header-name}:
570
571@table @samp
572@item Author
573This line states the name and net address of at least the principal
574author of the library.
575
576If there are multiple authors, you can list them on continuation lines
4b6694ef 577led by @code{;;} and a tab character, like this:
7015aca4
RS
578
579@smallexample
580@group
581;; Author: Ashwin Ram <Ram-Ashwin@@cs.yale.edu>
4b6694ef
RS
582;; Dave Sill <de5@@ornl.gov>
583;; Dave Brennan <brennan@@hal.com>
584;; Eric Raymond <esr@@snark.thyrsus.com>
7015aca4
RS
585@end group
586@end smallexample
587
588@item Maintainer
589This line should contain a single name/address as in the Author line, or
4b6694ef
RS
590an address only, or the string @samp{FSF}. If there is no maintainer
591line, the person(s) in the Author field are presumed to be the
592maintainers. The example above is mildly bogus because the maintainer
593line is redundant.
7015aca4
RS
594
595The idea behind the @samp{Author} and @samp{Maintainer} lines is to make
596possible a Lisp function to ``send mail to the maintainer'' without
597having to mine the name out by hand.
598
599Be sure to surround the network address with @samp{<@dots{}>} if
600you include the person's full name as well as the network address.
601
602@item Created
603This optional line gives the original creation date of the
604file. For historical interest only.
605
606@item Version
607If you wish to record version numbers for the individual Lisp program, put
608them in this line.
609
610@item Adapted-By
611In this header line, place the name of the person who adapted the
612library for installation (to make it fit the style conventions, for
613example).
614
615@item Keywords
616This line lists keywords for the @code{finder-by-keyword} help command.
617This field is important; it's how people will find your package when
2c62739d
RS
618they're looking for things by topic area. To separate the keywords, you
619can use spaces, commas, or both.
7015aca4
RS
620@end table
621
622 Just about every Lisp library ought to have the @samp{Author} and
623@samp{Keywords} header comment lines. Use the others if they are
624appropriate. You can also put in header lines with other header
625names---they have no standard meanings, so they can't do any harm.
626
627 We use additional stylized comments to subdivide the contents of the
628library file. Here is a table of them:
629
630@table @samp
631@item ;;; Commentary:
632This begins introductory comments that explain how the library works.
633It should come right after the copying permissions.
634
635@item ;;; Change log:
636This begins change log information stored in the library file (if you
637store the change history there). For most of the Lisp
638files distributed with Emacs, the change history is kept in the file
639@file{ChangeLog} and not in the source file at all; these files do
640not have a @samp{;;; Change log:} line.
641
642@item ;;; Code:
643This begins the actual code of the program.
644
645@item ;;; @var{filename} ends here
646This is the @dfn{footer line}; it appears at the very end of the file.
647Its purpose is to enable people to detect truncated versions of the file
648from the lack of a footer line.
649@end table