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