annotate man/trouble.texi @ 34765:bb3103d4e94d

(push_key_description): Don't convert eight-bit-control and eight-bit-graphic to multibyte character.
author Kenichi Handa <handa@m17n.org>
date Thu, 21 Dec 2000 01:58:28 +0000
parents 2d29e09cdef7
children 94d46968a93f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1 @c This is part of the Emacs manual.
Dave Love <fx@gnu.org>
parents:
diff changeset
2 @c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997 Free Software Foundation, Inc.
Dave Love <fx@gnu.org>
parents:
diff changeset
3 @c See file emacs.texi for copying conditions.
Dave Love <fx@gnu.org>
parents:
diff changeset
4 @iftex
Dave Love <fx@gnu.org>
parents:
diff changeset
5 @chapter Dealing with Common Problems
Dave Love <fx@gnu.org>
parents:
diff changeset
6
Dave Love <fx@gnu.org>
parents:
diff changeset
7 If you type an Emacs command you did not intend, the results are often
Dave Love <fx@gnu.org>
parents:
diff changeset
8 mysterious. This chapter tells what you can do to cancel your mistake or
Dave Love <fx@gnu.org>
parents:
diff changeset
9 recover from a mysterious situation. Emacs bugs and system crashes are
Dave Love <fx@gnu.org>
parents:
diff changeset
10 also considered.
Dave Love <fx@gnu.org>
parents:
diff changeset
11 @end iftex
Dave Love <fx@gnu.org>
parents:
diff changeset
12
Dave Love <fx@gnu.org>
parents:
diff changeset
13 @node Quitting, Lossage, Customization, Top
Dave Love <fx@gnu.org>
parents:
diff changeset
14 @section Quitting and Aborting
Dave Love <fx@gnu.org>
parents:
diff changeset
15 @cindex quitting
Dave Love <fx@gnu.org>
parents:
diff changeset
16
Dave Love <fx@gnu.org>
parents:
diff changeset
17 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
18 @item C-g
30452
7ac56091d9f4 (Quitting): Add findex entry for keyboard-quit.
Eli Zaretskii <eliz@gnu.org>
parents: 29107
diff changeset
19 @itemx C-@key{BREAK}@r{ (MS-DOS only)}
30462
2d29e09cdef7 (Quitting): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 30452
diff changeset
20 Quit (@code{keyboard-quit}): cancel running or partially typed command.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
21 @item C-]
Dave Love <fx@gnu.org>
parents:
diff changeset
22 Abort innermost recursive editing level and cancel the command which
Dave Love <fx@gnu.org>
parents:
diff changeset
23 invoked it (@code{abort-recursive-edit}).
Dave Love <fx@gnu.org>
parents:
diff changeset
24 @item @key{ESC} @key{ESC} @key{ESC}
Dave Love <fx@gnu.org>
parents:
diff changeset
25 Either quit or abort, whichever makes sense (@code{keyboard-escape-quit}).
Dave Love <fx@gnu.org>
parents:
diff changeset
26 @item M-x top-level
Dave Love <fx@gnu.org>
parents:
diff changeset
27 Abort all recursive editing levels that are currently executing.
Dave Love <fx@gnu.org>
parents:
diff changeset
28 @item C-x u
Dave Love <fx@gnu.org>
parents:
diff changeset
29 Cancel a previously made change in the buffer contents (@code{undo}).
Dave Love <fx@gnu.org>
parents:
diff changeset
30 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
31
Dave Love <fx@gnu.org>
parents:
diff changeset
32 There are two ways of canceling commands which are not finished
Dave Love <fx@gnu.org>
parents:
diff changeset
33 executing: @dfn{quitting} with @kbd{C-g}, and @dfn{aborting} with
Dave Love <fx@gnu.org>
parents:
diff changeset
34 @kbd{C-]} or @kbd{M-x top-level}. Quitting cancels a partially typed
Dave Love <fx@gnu.org>
parents:
diff changeset
35 command or one which is already running. Aborting exits a recursive
Dave Love <fx@gnu.org>
parents:
diff changeset
36 editing level and cancels the command that invoked the recursive edit.
Dave Love <fx@gnu.org>
parents:
diff changeset
37 (@xref{Recursive Edit}.)
Dave Love <fx@gnu.org>
parents:
diff changeset
38
Dave Love <fx@gnu.org>
parents:
diff changeset
39 @cindex quitting
30452
7ac56091d9f4 (Quitting): Add findex entry for keyboard-quit.
Eli Zaretskii <eliz@gnu.org>
parents: 29107
diff changeset
40 @findex keyboard-quit
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
41 @kindex C-g
Dave Love <fx@gnu.org>
parents:
diff changeset
42 Quitting with @kbd{C-g} is used for getting rid of a partially typed
Dave Love <fx@gnu.org>
parents:
diff changeset
43 command, or a numeric argument that you don't want. It also stops a
Dave Love <fx@gnu.org>
parents:
diff changeset
44 running command in the middle in a relatively safe way, so you can use
Dave Love <fx@gnu.org>
parents:
diff changeset
45 it if you accidentally give a command which takes a long time. In
Dave Love <fx@gnu.org>
parents:
diff changeset
46 particular, it is safe to quit out of killing; either your text will
Dave Love <fx@gnu.org>
parents:
diff changeset
47 @emph{all} still be in the buffer, or it will @emph{all} be in the kill
Dave Love <fx@gnu.org>
parents:
diff changeset
48 ring (or maybe both). Quitting an incremental search does special
Dave Love <fx@gnu.org>
parents:
diff changeset
49 things documented under searching; in general, it may take two
Dave Love <fx@gnu.org>
parents:
diff changeset
50 successive @kbd{C-g} characters to get out of a search
Dave Love <fx@gnu.org>
parents:
diff changeset
51 (@pxref{Incremental Search}).
Dave Love <fx@gnu.org>
parents:
diff changeset
52
Dave Love <fx@gnu.org>
parents:
diff changeset
53 On MS-DOS, the character @kbd{C-@key{BREAK}} serves as a quit character
Dave Love <fx@gnu.org>
parents:
diff changeset
54 like @kbd{C-g}. The reason is that it is not feasible, on MS-DOS, to
Dave Love <fx@gnu.org>
parents:
diff changeset
55 recognize @kbd{C-g} while a command is running, between interactions
Dave Love <fx@gnu.org>
parents:
diff changeset
56 with the user. By contrast, it @emph{is} feasible to recognize
Dave Love <fx@gnu.org>
parents:
diff changeset
57 @kbd{C-@key{BREAK}} at all times. @xref{MS-DOS Input}.
Dave Love <fx@gnu.org>
parents:
diff changeset
58
Dave Love <fx@gnu.org>
parents:
diff changeset
59 @kbd{C-g} works by setting the variable @code{quit-flag} to @code{t}
Dave Love <fx@gnu.org>
parents:
diff changeset
60 the instant @kbd{C-g} is typed; Emacs Lisp checks this variable
Dave Love <fx@gnu.org>
parents:
diff changeset
61 frequently and quits if it is non-@code{nil}. @kbd{C-g} is only
Dave Love <fx@gnu.org>
parents:
diff changeset
62 actually executed as a command if you type it while Emacs is waiting for
Dave Love <fx@gnu.org>
parents:
diff changeset
63 input.
Dave Love <fx@gnu.org>
parents:
diff changeset
64
Dave Love <fx@gnu.org>
parents:
diff changeset
65 If you quit with @kbd{C-g} a second time before the first @kbd{C-g} is
Dave Love <fx@gnu.org>
parents:
diff changeset
66 recognized, you activate the ``emergency escape'' feature and return to
Dave Love <fx@gnu.org>
parents:
diff changeset
67 the shell. @xref{Emergency Escape}.
Dave Love <fx@gnu.org>
parents:
diff changeset
68
Dave Love <fx@gnu.org>
parents:
diff changeset
69 @cindex NFS and quitting
Dave Love <fx@gnu.org>
parents:
diff changeset
70 There may be times when you cannot quit. When Emacs is waiting for
Dave Love <fx@gnu.org>
parents:
diff changeset
71 the operating system to do something, quitting is impossible unless
Dave Love <fx@gnu.org>
parents:
diff changeset
72 special pains are taken for the particular system call within Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
73 where the waiting occurs. We have done this for the system calls that
Dave Love <fx@gnu.org>
parents:
diff changeset
74 users are likely to want to quit from, but it's possible you will find
Dave Love <fx@gnu.org>
parents:
diff changeset
75 another. In one very common case---waiting for file input or output
Dave Love <fx@gnu.org>
parents:
diff changeset
76 using NFS---Emacs itself knows how to quit, but most NFS implementations
Dave Love <fx@gnu.org>
parents:
diff changeset
77 simply do not allow user programs to stop waiting for NFS when the NFS
Dave Love <fx@gnu.org>
parents:
diff changeset
78 server is hung.
Dave Love <fx@gnu.org>
parents:
diff changeset
79
Dave Love <fx@gnu.org>
parents:
diff changeset
80 @cindex aborting recursive edit
Dave Love <fx@gnu.org>
parents:
diff changeset
81 @findex abort-recursive-edit
Dave Love <fx@gnu.org>
parents:
diff changeset
82 @kindex C-]
Dave Love <fx@gnu.org>
parents:
diff changeset
83 Aborting with @kbd{C-]} (@code{abort-recursive-edit}) is used to get
Dave Love <fx@gnu.org>
parents:
diff changeset
84 out of a recursive editing level and cancel the command which invoked
Dave Love <fx@gnu.org>
parents:
diff changeset
85 it. Quitting with @kbd{C-g} does not do this, and could not do this,
Dave Love <fx@gnu.org>
parents:
diff changeset
86 because it is used to cancel a partially typed command @emph{within} the
Dave Love <fx@gnu.org>
parents:
diff changeset
87 recursive editing level. Both operations are useful. For example, if
Dave Love <fx@gnu.org>
parents:
diff changeset
88 you are in a recursive edit and type @kbd{C-u 8} to enter a numeric
Dave Love <fx@gnu.org>
parents:
diff changeset
89 argument, you can cancel that argument with @kbd{C-g} and remain in the
Dave Love <fx@gnu.org>
parents:
diff changeset
90 recursive edit.
Dave Love <fx@gnu.org>
parents:
diff changeset
91
Dave Love <fx@gnu.org>
parents:
diff changeset
92 @findex keyboard-escape-quit
Dave Love <fx@gnu.org>
parents:
diff changeset
93 @kindex ESC ESC ESC
Dave Love <fx@gnu.org>
parents:
diff changeset
94 The command @kbd{@key{ESC} @key{ESC} @key{ESC}}
Dave Love <fx@gnu.org>
parents:
diff changeset
95 (@code{keyboard-escape-quit}) can either quit or abort. This key was
Dave Love <fx@gnu.org>
parents:
diff changeset
96 defined because @key{ESC} is used to ``get out'' in many PC programs.
Dave Love <fx@gnu.org>
parents:
diff changeset
97 It can cancel a prefix argument, clear a selected region, or get out of
Dave Love <fx@gnu.org>
parents:
diff changeset
98 a Query Replace, like @kbd{C-g}. It can get out of the minibuffer or a
Dave Love <fx@gnu.org>
parents:
diff changeset
99 recursive edit, like @kbd{C-]}. It can also get out of splitting the
Dave Love <fx@gnu.org>
parents:
diff changeset
100 frame into multiple windows, like @kbd{C-x 1}. One thing it cannot do,
Dave Love <fx@gnu.org>
parents:
diff changeset
101 however, is stop a command that is running. That's because it executes
Dave Love <fx@gnu.org>
parents:
diff changeset
102 as an ordinary command, and Emacs doesn't notice it until it is ready
Dave Love <fx@gnu.org>
parents:
diff changeset
103 for a command.
Dave Love <fx@gnu.org>
parents:
diff changeset
104
Dave Love <fx@gnu.org>
parents:
diff changeset
105 @findex top-level
Dave Love <fx@gnu.org>
parents:
diff changeset
106 The command @kbd{M-x top-level} is equivalent to ``enough'' @kbd{C-]}
Dave Love <fx@gnu.org>
parents:
diff changeset
107 commands to get you out of all the levels of recursive edits that you
Dave Love <fx@gnu.org>
parents:
diff changeset
108 are in. @kbd{C-]} gets you out one level at a time, but @kbd{M-x
Dave Love <fx@gnu.org>
parents:
diff changeset
109 top-level} goes out all levels at once. Both @kbd{C-]} and @kbd{M-x
Dave Love <fx@gnu.org>
parents:
diff changeset
110 top-level} are like all other commands, and unlike @kbd{C-g}, in that
Dave Love <fx@gnu.org>
parents:
diff changeset
111 they take effect only when Emacs is ready for a command. @kbd{C-]} is
Dave Love <fx@gnu.org>
parents:
diff changeset
112 an ordinary key and has its meaning only because of its binding in the
Dave Love <fx@gnu.org>
parents:
diff changeset
113 keymap. @xref{Recursive Edit}.
Dave Love <fx@gnu.org>
parents:
diff changeset
114
Dave Love <fx@gnu.org>
parents:
diff changeset
115 @kbd{C-x u} (@code{undo}) is not strictly speaking a way of canceling
Dave Love <fx@gnu.org>
parents:
diff changeset
116 a command, but you can think of it as canceling a command that already
Dave Love <fx@gnu.org>
parents:
diff changeset
117 finished executing. @xref{Undo}.
Dave Love <fx@gnu.org>
parents:
diff changeset
118
Dave Love <fx@gnu.org>
parents:
diff changeset
119 @node Lossage, Bugs, Quitting, Top
Dave Love <fx@gnu.org>
parents:
diff changeset
120 @section Dealing with Emacs Trouble
Dave Love <fx@gnu.org>
parents:
diff changeset
121
Dave Love <fx@gnu.org>
parents:
diff changeset
122 This section describes various conditions in which Emacs fails to work
Dave Love <fx@gnu.org>
parents:
diff changeset
123 normally, and how to recognize them and correct them.
Dave Love <fx@gnu.org>
parents:
diff changeset
124
Dave Love <fx@gnu.org>
parents:
diff changeset
125 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
126 * DEL Gets Help:: What to do if @key{DEL} doesn't delete.
Dave Love <fx@gnu.org>
parents:
diff changeset
127 * Stuck Recursive:: `[...]' in mode line around the parentheses.
Dave Love <fx@gnu.org>
parents:
diff changeset
128 * Screen Garbled:: Garbage on the screen.
Dave Love <fx@gnu.org>
parents:
diff changeset
129 * Text Garbled:: Garbage in the text.
Dave Love <fx@gnu.org>
parents:
diff changeset
130 * Unasked-for Search:: Spontaneous entry to incremental search.
Dave Love <fx@gnu.org>
parents:
diff changeset
131 * Memory Full:: How to cope when you run out of memory.
Dave Love <fx@gnu.org>
parents:
diff changeset
132 * After a Crash:: Recovering editing in an Emacs session that crashed.
Dave Love <fx@gnu.org>
parents:
diff changeset
133 * Emergency Escape:: Emergency escape---
Dave Love <fx@gnu.org>
parents:
diff changeset
134 What to do if Emacs stops responding.
Dave Love <fx@gnu.org>
parents:
diff changeset
135 * Total Frustration:: When you are at your wits' end.
Dave Love <fx@gnu.org>
parents:
diff changeset
136 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
137
Dave Love <fx@gnu.org>
parents:
diff changeset
138 @node DEL Gets Help
Dave Love <fx@gnu.org>
parents:
diff changeset
139 @subsection If @key{DEL} Fails to Delete
Dave Love <fx@gnu.org>
parents:
diff changeset
140
Dave Love <fx@gnu.org>
parents:
diff changeset
141 If you find that @key{DEL} enters Help like @kbd{Control-h} instead of
Dave Love <fx@gnu.org>
parents:
diff changeset
142 deleting a character, your terminal is sending the wrong code for
Dave Love <fx@gnu.org>
parents:
diff changeset
143 @key{DEL}. You can work around this problem by changing the keyboard
Dave Love <fx@gnu.org>
parents:
diff changeset
144 translation table (@pxref{Keyboard Translations}).
Dave Love <fx@gnu.org>
parents:
diff changeset
145
Dave Love <fx@gnu.org>
parents:
diff changeset
146 @node Stuck Recursive
Dave Love <fx@gnu.org>
parents:
diff changeset
147 @subsection Recursive Editing Levels
Dave Love <fx@gnu.org>
parents:
diff changeset
148
Dave Love <fx@gnu.org>
parents:
diff changeset
149 Recursive editing levels are important and useful features of Emacs, but
Dave Love <fx@gnu.org>
parents:
diff changeset
150 they can seem like malfunctions to the user who does not understand them.
Dave Love <fx@gnu.org>
parents:
diff changeset
151
Dave Love <fx@gnu.org>
parents:
diff changeset
152 If the mode line has square brackets @samp{[@dots{}]} around the parentheses
Dave Love <fx@gnu.org>
parents:
diff changeset
153 that contain the names of the major and minor modes, you have entered a
Dave Love <fx@gnu.org>
parents:
diff changeset
154 recursive editing level. If you did not do this on purpose, or if you
Dave Love <fx@gnu.org>
parents:
diff changeset
155 don't understand what that means, you should just get out of the recursive
Dave Love <fx@gnu.org>
parents:
diff changeset
156 editing level. To do so, type @kbd{M-x top-level}. This is called getting
Dave Love <fx@gnu.org>
parents:
diff changeset
157 back to top level. @xref{Recursive Edit}.
Dave Love <fx@gnu.org>
parents:
diff changeset
158
Dave Love <fx@gnu.org>
parents:
diff changeset
159 @node Screen Garbled
Dave Love <fx@gnu.org>
parents:
diff changeset
160 @subsection Garbage on the Screen
Dave Love <fx@gnu.org>
parents:
diff changeset
161
Dave Love <fx@gnu.org>
parents:
diff changeset
162 If the data on the screen looks wrong, the first thing to do is see
Dave Love <fx@gnu.org>
parents:
diff changeset
163 whether the text is really wrong. Type @kbd{C-l}, to redisplay the
Dave Love <fx@gnu.org>
parents:
diff changeset
164 entire screen. If the screen appears correct after this, the problem
Dave Love <fx@gnu.org>
parents:
diff changeset
165 was entirely in the previous screen update. (Otherwise, see @ref{Text
Dave Love <fx@gnu.org>
parents:
diff changeset
166 Garbled}.)
Dave Love <fx@gnu.org>
parents:
diff changeset
167
Dave Love <fx@gnu.org>
parents:
diff changeset
168 Display updating problems often result from an incorrect termcap entry
Dave Love <fx@gnu.org>
parents:
diff changeset
169 for the terminal you are using. The file @file{etc/TERMS} in the Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
170 distribution gives the fixes for known problems of this sort.
Dave Love <fx@gnu.org>
parents:
diff changeset
171 @file{INSTALL} contains general advice for these problems in one of its
Dave Love <fx@gnu.org>
parents:
diff changeset
172 sections. Very likely there is simply insufficient padding for certain
Dave Love <fx@gnu.org>
parents:
diff changeset
173 display operations. To investigate the possibility that you have this sort
Dave Love <fx@gnu.org>
parents:
diff changeset
174 of problem, try Emacs on another terminal made by a different manufacturer.
Dave Love <fx@gnu.org>
parents:
diff changeset
175 If problems happen frequently on one kind of terminal but not another kind,
Dave Love <fx@gnu.org>
parents:
diff changeset
176 it is likely to be a bad termcap entry, though it could also be due to a
Dave Love <fx@gnu.org>
parents:
diff changeset
177 bug in Emacs that appears for terminals that have or that lack specific
Dave Love <fx@gnu.org>
parents:
diff changeset
178 features.
Dave Love <fx@gnu.org>
parents:
diff changeset
179
Dave Love <fx@gnu.org>
parents:
diff changeset
180 @node Text Garbled
Dave Love <fx@gnu.org>
parents:
diff changeset
181 @subsection Garbage in the Text
Dave Love <fx@gnu.org>
parents:
diff changeset
182
Dave Love <fx@gnu.org>
parents:
diff changeset
183 If @kbd{C-l} shows that the text is wrong, try undoing the changes to it
Dave Love <fx@gnu.org>
parents:
diff changeset
184 using @kbd{C-x u} until it gets back to a state you consider correct. Also
Dave Love <fx@gnu.org>
parents:
diff changeset
185 try @kbd{C-h l} to find out what command you typed to produce the observed
Dave Love <fx@gnu.org>
parents:
diff changeset
186 results.
Dave Love <fx@gnu.org>
parents:
diff changeset
187
Dave Love <fx@gnu.org>
parents:
diff changeset
188 If a large portion of text appears to be missing at the beginning or
Dave Love <fx@gnu.org>
parents:
diff changeset
189 end of the buffer, check for the word @samp{Narrow} in the mode line.
Dave Love <fx@gnu.org>
parents:
diff changeset
190 If it appears, the text you don't see is probably still present, but
Dave Love <fx@gnu.org>
parents:
diff changeset
191 temporarily off-limits. To make it accessible again, type @kbd{C-x n
Dave Love <fx@gnu.org>
parents:
diff changeset
192 w}. @xref{Narrowing}.
Dave Love <fx@gnu.org>
parents:
diff changeset
193
Dave Love <fx@gnu.org>
parents:
diff changeset
194 @node Unasked-for Search
Dave Love <fx@gnu.org>
parents:
diff changeset
195 @subsection Spontaneous Entry to Incremental Search
Dave Love <fx@gnu.org>
parents:
diff changeset
196
Dave Love <fx@gnu.org>
parents:
diff changeset
197 If Emacs spontaneously displays @samp{I-search:} at the bottom of the
Dave Love <fx@gnu.org>
parents:
diff changeset
198 screen, it means that the terminal is sending @kbd{C-s} and @kbd{C-q}
Dave Love <fx@gnu.org>
parents:
diff changeset
199 according to the poorly designed xon/xoff ``flow control'' protocol.
Dave Love <fx@gnu.org>
parents:
diff changeset
200
Dave Love <fx@gnu.org>
parents:
diff changeset
201 If this happens to you, your best recourse is to put the terminal in a
Dave Love <fx@gnu.org>
parents:
diff changeset
202 mode where it will not use flow control, or give it so much padding that
Dave Love <fx@gnu.org>
parents:
diff changeset
203 it will never send a @kbd{C-s}. (One way to increase the amount of
Dave Love <fx@gnu.org>
parents:
diff changeset
204 padding is to set the variable @code{baud-rate} to a larger value. Its
Dave Love <fx@gnu.org>
parents:
diff changeset
205 value is the terminal output speed, measured in the conventional units
Dave Love <fx@gnu.org>
parents:
diff changeset
206 of baud.)
Dave Love <fx@gnu.org>
parents:
diff changeset
207
Dave Love <fx@gnu.org>
parents:
diff changeset
208 @cindex flow control
Dave Love <fx@gnu.org>
parents:
diff changeset
209 @cindex xon-xoff
Dave Love <fx@gnu.org>
parents:
diff changeset
210 @findex enable-flow-control
Dave Love <fx@gnu.org>
parents:
diff changeset
211 If you don't succeed in turning off flow control, the next best thing
Dave Love <fx@gnu.org>
parents:
diff changeset
212 is to tell Emacs to cope with it. To do this, call the function
Dave Love <fx@gnu.org>
parents:
diff changeset
213 @code{enable-flow-control}.
Dave Love <fx@gnu.org>
parents:
diff changeset
214
Dave Love <fx@gnu.org>
parents:
diff changeset
215 @findex enable-flow-control-on
Dave Love <fx@gnu.org>
parents:
diff changeset
216 Typically there are particular terminal types with which you must use
Dave Love <fx@gnu.org>
parents:
diff changeset
217 flow control. You can conveniently ask for flow control on those
Dave Love <fx@gnu.org>
parents:
diff changeset
218 terminal types only, using @code{enable-flow-control-on}. For example,
Dave Love <fx@gnu.org>
parents:
diff changeset
219 if you find you must use flow control on VT-100 and H19 terminals, put
Dave Love <fx@gnu.org>
parents:
diff changeset
220 the following in your @file{.emacs} file:
Dave Love <fx@gnu.org>
parents:
diff changeset
221
Dave Love <fx@gnu.org>
parents:
diff changeset
222 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
223 (enable-flow-control-on "vt100" "h19")
Dave Love <fx@gnu.org>
parents:
diff changeset
224 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
225
Dave Love <fx@gnu.org>
parents:
diff changeset
226 When flow control is enabled, you must type @kbd{C-\} to get the
Dave Love <fx@gnu.org>
parents:
diff changeset
227 effect of a @kbd{C-s}, and type @kbd{C-^} to get the effect of a
Dave Love <fx@gnu.org>
parents:
diff changeset
228 @kbd{C-q}. (These aliases work by means of keyboard translations; see
Dave Love <fx@gnu.org>
parents:
diff changeset
229 @ref{Keyboard Translations}.)
Dave Love <fx@gnu.org>
parents:
diff changeset
230
Dave Love <fx@gnu.org>
parents:
diff changeset
231 @node Memory Full
Dave Love <fx@gnu.org>
parents:
diff changeset
232 @subsection Running out of Memory
Dave Love <fx@gnu.org>
parents:
diff changeset
233 @cindex memory full
Dave Love <fx@gnu.org>
parents:
diff changeset
234 @cindex out of memory
Dave Love <fx@gnu.org>
parents:
diff changeset
235
Dave Love <fx@gnu.org>
parents:
diff changeset
236 If you get the error message @samp{Virtual memory exceeded}, save your
Dave Love <fx@gnu.org>
parents:
diff changeset
237 modified buffers with @kbd{C-x s}. This method of saving them has the
Dave Love <fx@gnu.org>
parents:
diff changeset
238 smallest need for additional memory. Emacs keeps a reserve of memory
Dave Love <fx@gnu.org>
parents:
diff changeset
239 which it makes available when this error happens; that should be enough
Dave Love <fx@gnu.org>
parents:
diff changeset
240 to enable @kbd{C-x s} to complete its work.
Dave Love <fx@gnu.org>
parents:
diff changeset
241
Dave Love <fx@gnu.org>
parents:
diff changeset
242 Once you have saved your modified buffers, you can exit this Emacs job
Dave Love <fx@gnu.org>
parents:
diff changeset
243 and start another, or you can use @kbd{M-x kill-some-buffers} to free
Dave Love <fx@gnu.org>
parents:
diff changeset
244 space in the current Emacs job. If you kill buffers containing a
Dave Love <fx@gnu.org>
parents:
diff changeset
245 substantial amount of text, you can safely go on editing. Emacs refills
Dave Love <fx@gnu.org>
parents:
diff changeset
246 its memory reserve automatically when it sees sufficient free space
Dave Love <fx@gnu.org>
parents:
diff changeset
247 available, in case you run out of memory another time.
Dave Love <fx@gnu.org>
parents:
diff changeset
248
Dave Love <fx@gnu.org>
parents:
diff changeset
249 Do not use @kbd{M-x buffer-menu} to save or kill buffers when you run
Dave Love <fx@gnu.org>
parents:
diff changeset
250 out of memory, because the buffer menu needs a fair amount memory
Dave Love <fx@gnu.org>
parents:
diff changeset
251 itself, and the reserve supply may not be enough.
Dave Love <fx@gnu.org>
parents:
diff changeset
252
Dave Love <fx@gnu.org>
parents:
diff changeset
253 @node After a Crash
Dave Love <fx@gnu.org>
parents:
diff changeset
254 @subsection Recovery After a Crash
Dave Love <fx@gnu.org>
parents:
diff changeset
255
Dave Love <fx@gnu.org>
parents:
diff changeset
256 If Emacs or the computer crashes, you can recover the files you were
Dave Love <fx@gnu.org>
parents:
diff changeset
257 editing at the time of the crash from their auto-save files. To do
Dave Love <fx@gnu.org>
parents:
diff changeset
258 this, start Emacs again and type the command @kbd{M-x recover-session}.
Dave Love <fx@gnu.org>
parents:
diff changeset
259
Dave Love <fx@gnu.org>
parents:
diff changeset
260 This command initially displays a buffer which lists interrupted
Dave Love <fx@gnu.org>
parents:
diff changeset
261 session files, each with its date. You must choose which session to
Dave Love <fx@gnu.org>
parents:
diff changeset
262 recover from. Typically the one you want is the most recent one. Move
Dave Love <fx@gnu.org>
parents:
diff changeset
263 point to the one you choose, and type @kbd{C-c C-c}.
Dave Love <fx@gnu.org>
parents:
diff changeset
264
Dave Love <fx@gnu.org>
parents:
diff changeset
265 Then @code{recover-session} asks about each of the files that you were
Dave Love <fx@gnu.org>
parents:
diff changeset
266 editing during that session; it asks whether to recover that file. If
Dave Love <fx@gnu.org>
parents:
diff changeset
267 you answer @kbd{y} for a file, it shows the dates of that file and its
Dave Love <fx@gnu.org>
parents:
diff changeset
268 auto-save file, then asks once again whether to recover that file. For
Dave Love <fx@gnu.org>
parents:
diff changeset
269 the second question, you must confirm with @kbd{yes}. If you do, Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
270 visits the file but gets the text from the auto-save file.
Dave Love <fx@gnu.org>
parents:
diff changeset
271
Dave Love <fx@gnu.org>
parents:
diff changeset
272 When @code{recover-session} is done, the files you've chosen to
Dave Love <fx@gnu.org>
parents:
diff changeset
273 recover are present in Emacs buffers. You should then save them. Only
Dave Love <fx@gnu.org>
parents:
diff changeset
274 this---saving them---updates the files themselves.
Dave Love <fx@gnu.org>
parents:
diff changeset
275
Dave Love <fx@gnu.org>
parents:
diff changeset
276 @node Emergency Escape
Dave Love <fx@gnu.org>
parents:
diff changeset
277 @subsection Emergency Escape
Dave Love <fx@gnu.org>
parents:
diff changeset
278
Dave Love <fx@gnu.org>
parents:
diff changeset
279 Because at times there have been bugs causing Emacs to loop without
Dave Love <fx@gnu.org>
parents:
diff changeset
280 checking @code{quit-flag}, a special feature causes Emacs to be suspended
Dave Love <fx@gnu.org>
parents:
diff changeset
281 immediately if you type a second @kbd{C-g} while the flag is already set,
Dave Love <fx@gnu.org>
parents:
diff changeset
282 so you can always get out of GNU Emacs. Normally Emacs recognizes and
Dave Love <fx@gnu.org>
parents:
diff changeset
283 clears @code{quit-flag} (and quits!) quickly enough to prevent this from
Dave Love <fx@gnu.org>
parents:
diff changeset
284 happening. (On MS-DOS and compatible systems, type @kbd{C-@key{BREAK}}
Dave Love <fx@gnu.org>
parents:
diff changeset
285 twice.)
Dave Love <fx@gnu.org>
parents:
diff changeset
286
Dave Love <fx@gnu.org>
parents:
diff changeset
287 When you resume Emacs after a suspension caused by multiple @kbd{C-g}, it
Dave Love <fx@gnu.org>
parents:
diff changeset
288 asks two questions before going back to what it had been doing:
Dave Love <fx@gnu.org>
parents:
diff changeset
289
Dave Love <fx@gnu.org>
parents:
diff changeset
290 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
291 Auto-save? (y or n)
Dave Love <fx@gnu.org>
parents:
diff changeset
292 Abort (and dump core)? (y or n)
Dave Love <fx@gnu.org>
parents:
diff changeset
293 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
294
Dave Love <fx@gnu.org>
parents:
diff changeset
295 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
296 Answer each one with @kbd{y} or @kbd{n} followed by @key{RET}.
Dave Love <fx@gnu.org>
parents:
diff changeset
297
Dave Love <fx@gnu.org>
parents:
diff changeset
298 Saying @kbd{y} to @samp{Auto-save?} causes immediate auto-saving of all
Dave Love <fx@gnu.org>
parents:
diff changeset
299 modified buffers in which auto-saving is enabled.
Dave Love <fx@gnu.org>
parents:
diff changeset
300
Dave Love <fx@gnu.org>
parents:
diff changeset
301 Saying @kbd{y} to @samp{Abort (and dump core)?} causes an illegal instruction to be
Dave Love <fx@gnu.org>
parents:
diff changeset
302 executed, dumping core. This is to enable a wizard to figure out why Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
303 was failing to quit in the first place. Execution does not continue
Dave Love <fx@gnu.org>
parents:
diff changeset
304 after a core dump. If you answer @kbd{n}, execution does continue. With
Dave Love <fx@gnu.org>
parents:
diff changeset
305 luck, GNU Emacs will ultimately check @code{quit-flag} and quit normally.
Dave Love <fx@gnu.org>
parents:
diff changeset
306 If not, and you type another @kbd{C-g}, it is suspended again.
Dave Love <fx@gnu.org>
parents:
diff changeset
307
Dave Love <fx@gnu.org>
parents:
diff changeset
308 If Emacs is not really hung, just slow, you may invoke the double
Dave Love <fx@gnu.org>
parents:
diff changeset
309 @kbd{C-g} feature without really meaning to. Then just resume and answer
Dave Love <fx@gnu.org>
parents:
diff changeset
310 @kbd{n} to both questions, and you will arrive at your former state.
Dave Love <fx@gnu.org>
parents:
diff changeset
311 Presumably the quit you requested will happen soon.
Dave Love <fx@gnu.org>
parents:
diff changeset
312
Dave Love <fx@gnu.org>
parents:
diff changeset
313 The double-@kbd{C-g} feature is turned off when Emacs is running under
Dave Love <fx@gnu.org>
parents:
diff changeset
314 the X Window System, since you can use the window manager to kill Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
315 or to create another window and run another program.
Dave Love <fx@gnu.org>
parents:
diff changeset
316
Dave Love <fx@gnu.org>
parents:
diff changeset
317 On MS-DOS and compatible systems, the emergency escape feature is
Dave Love <fx@gnu.org>
parents:
diff changeset
318 sometimes unavailable, even if you press @kbd{C-@key{BREAK}} twice, when
Dave Love <fx@gnu.org>
parents:
diff changeset
319 some system call (MS-DOS or BIOS) hangs, or when Emacs is stuck in a
Dave Love <fx@gnu.org>
parents:
diff changeset
320 very tight endless loop (in C code, @strong{not} in Lisp code).
Dave Love <fx@gnu.org>
parents:
diff changeset
321
Dave Love <fx@gnu.org>
parents:
diff changeset
322 @node Total Frustration
Dave Love <fx@gnu.org>
parents:
diff changeset
323 @subsection Help for Total Frustration
Dave Love <fx@gnu.org>
parents:
diff changeset
324 @cindex Eliza
Dave Love <fx@gnu.org>
parents:
diff changeset
325 @cindex doctor
Dave Love <fx@gnu.org>
parents:
diff changeset
326
Dave Love <fx@gnu.org>
parents:
diff changeset
327 If using Emacs (or something else) becomes terribly frustrating and none
Dave Love <fx@gnu.org>
parents:
diff changeset
328 of the techniques described above solve the problem, Emacs can still help
Dave Love <fx@gnu.org>
parents:
diff changeset
329 you.
Dave Love <fx@gnu.org>
parents:
diff changeset
330
Dave Love <fx@gnu.org>
parents:
diff changeset
331 First, if the Emacs you are using is not responding to commands, type
Dave Love <fx@gnu.org>
parents:
diff changeset
332 @kbd{C-g C-g} to get out of it and then start a new one.
Dave Love <fx@gnu.org>
parents:
diff changeset
333
Dave Love <fx@gnu.org>
parents:
diff changeset
334 @findex doctor
Dave Love <fx@gnu.org>
parents:
diff changeset
335 Second, type @kbd{M-x doctor @key{RET}}.
Dave Love <fx@gnu.org>
parents:
diff changeset
336
Dave Love <fx@gnu.org>
parents:
diff changeset
337 The doctor will help you feel better. Each time you say something to
Dave Love <fx@gnu.org>
parents:
diff changeset
338 the doctor, you must end it by typing @key{RET} @key{RET}. This lets
Dave Love <fx@gnu.org>
parents:
diff changeset
339 the doctor know you are finished.
Dave Love <fx@gnu.org>
parents:
diff changeset
340
Dave Love <fx@gnu.org>
parents:
diff changeset
341 @node Bugs, Contributing, Lossage, Top
Dave Love <fx@gnu.org>
parents:
diff changeset
342 @section Reporting Bugs
Dave Love <fx@gnu.org>
parents:
diff changeset
343
Dave Love <fx@gnu.org>
parents:
diff changeset
344 @cindex bugs
Dave Love <fx@gnu.org>
parents:
diff changeset
345 Sometimes you will encounter a bug in Emacs. Although we cannot
Dave Love <fx@gnu.org>
parents:
diff changeset
346 promise we can or will fix the bug, and we might not even agree that it
Dave Love <fx@gnu.org>
parents:
diff changeset
347 is a bug, we want to hear about problems you encounter. Often we agree
Dave Love <fx@gnu.org>
parents:
diff changeset
348 they are bugs and want to fix them.
Dave Love <fx@gnu.org>
parents:
diff changeset
349
Dave Love <fx@gnu.org>
parents:
diff changeset
350 To make it possible for us to fix a bug, you must report it. In order
Dave Love <fx@gnu.org>
parents:
diff changeset
351 to do so effectively, you must know when and how to do it.
Dave Love <fx@gnu.org>
parents:
diff changeset
352
Dave Love <fx@gnu.org>
parents:
diff changeset
353 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
354 * Criteria: Bug Criteria. Have you really found a bug?
Dave Love <fx@gnu.org>
parents:
diff changeset
355 * Understanding Bug Reporting:: How to report a bug effectively.
Dave Love <fx@gnu.org>
parents:
diff changeset
356 * Checklist:: Steps to follow for a good bug report.
Dave Love <fx@gnu.org>
parents:
diff changeset
357 * Sending Patches:: How to send a patch for GNU Emacs.
Dave Love <fx@gnu.org>
parents:
diff changeset
358 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
359
Dave Love <fx@gnu.org>
parents:
diff changeset
360 @node Bug Criteria
Dave Love <fx@gnu.org>
parents:
diff changeset
361 @subsection When Is There a Bug
Dave Love <fx@gnu.org>
parents:
diff changeset
362
Dave Love <fx@gnu.org>
parents:
diff changeset
363 If Emacs executes an illegal instruction, or dies with an operating
Dave Love <fx@gnu.org>
parents:
diff changeset
364 system error message that indicates a problem in the program (as opposed to
Dave Love <fx@gnu.org>
parents:
diff changeset
365 something like ``disk full''), then it is certainly a bug.
Dave Love <fx@gnu.org>
parents:
diff changeset
366
Dave Love <fx@gnu.org>
parents:
diff changeset
367 If Emacs updates the display in a way that does not correspond to what is
Dave Love <fx@gnu.org>
parents:
diff changeset
368 in the buffer, then it is certainly a bug. If a command seems to do the
Dave Love <fx@gnu.org>
parents:
diff changeset
369 wrong thing but the problem corrects itself if you type @kbd{C-l}, it is a
Dave Love <fx@gnu.org>
parents:
diff changeset
370 case of incorrect display updating.
Dave Love <fx@gnu.org>
parents:
diff changeset
371
Dave Love <fx@gnu.org>
parents:
diff changeset
372 Taking forever to complete a command can be a bug, but you must make
Dave Love <fx@gnu.org>
parents:
diff changeset
373 certain that it was really Emacs's fault. Some commands simply take a
Dave Love <fx@gnu.org>
parents:
diff changeset
374 long time. Type @kbd{C-g} (@kbd{C-@key{BREAK}} on MS-DOS) and then @kbd{C-h l}
Dave Love <fx@gnu.org>
parents:
diff changeset
375 to see whether the input Emacs received was what you intended to type;
Dave Love <fx@gnu.org>
parents:
diff changeset
376 if the input was such that you @emph{know} it should have been processed
Dave Love <fx@gnu.org>
parents:
diff changeset
377 quickly, report a bug. If you don't know whether the command should
Dave Love <fx@gnu.org>
parents:
diff changeset
378 take a long time, find out by looking in the manual or by asking for
Dave Love <fx@gnu.org>
parents:
diff changeset
379 assistance.
Dave Love <fx@gnu.org>
parents:
diff changeset
380
Dave Love <fx@gnu.org>
parents:
diff changeset
381 If a command you are familiar with causes an Emacs error message in a
Dave Love <fx@gnu.org>
parents:
diff changeset
382 case where its usual definition ought to be reasonable, it is probably a
Dave Love <fx@gnu.org>
parents:
diff changeset
383 bug.
Dave Love <fx@gnu.org>
parents:
diff changeset
384
Dave Love <fx@gnu.org>
parents:
diff changeset
385 If a command does the wrong thing, that is a bug. But be sure you know
Dave Love <fx@gnu.org>
parents:
diff changeset
386 for certain what it ought to have done. If you aren't familiar with the
Dave Love <fx@gnu.org>
parents:
diff changeset
387 command, or don't know for certain how the command is supposed to work,
Dave Love <fx@gnu.org>
parents:
diff changeset
388 then it might actually be working right. Rather than jumping to
Dave Love <fx@gnu.org>
parents:
diff changeset
389 conclusions, show the problem to someone who knows for certain.
Dave Love <fx@gnu.org>
parents:
diff changeset
390
Dave Love <fx@gnu.org>
parents:
diff changeset
391 Finally, a command's intended definition may not be best for editing
Dave Love <fx@gnu.org>
parents:
diff changeset
392 with. This is a very important sort of problem, but it is also a matter of
Dave Love <fx@gnu.org>
parents:
diff changeset
393 judgment. Also, it is easy to come to such a conclusion out of ignorance
Dave Love <fx@gnu.org>
parents:
diff changeset
394 of some of the existing features. It is probably best not to complain
Dave Love <fx@gnu.org>
parents:
diff changeset
395 about such a problem until you have checked the documentation in the usual
Dave Love <fx@gnu.org>
parents:
diff changeset
396 ways, feel confident that you understand it, and know for certain that what
Dave Love <fx@gnu.org>
parents:
diff changeset
397 you want is not available. If you are not sure what the command is
Dave Love <fx@gnu.org>
parents:
diff changeset
398 supposed to do after a careful reading of the manual, check the index and
Dave Love <fx@gnu.org>
parents:
diff changeset
399 glossary for any terms that may be unclear.
Dave Love <fx@gnu.org>
parents:
diff changeset
400
Dave Love <fx@gnu.org>
parents:
diff changeset
401 If after careful rereading of the manual you still do not understand
Dave Love <fx@gnu.org>
parents:
diff changeset
402 what the command should do, that indicates a bug in the manual, which
Dave Love <fx@gnu.org>
parents:
diff changeset
403 you should report. The manual's job is to make everything clear to
Dave Love <fx@gnu.org>
parents:
diff changeset
404 people who are not Emacs experts---including you. It is just as
Dave Love <fx@gnu.org>
parents:
diff changeset
405 important to report documentation bugs as program bugs.
Dave Love <fx@gnu.org>
parents:
diff changeset
406
Dave Love <fx@gnu.org>
parents:
diff changeset
407 If the on-line documentation string of a function or variable disagrees
Dave Love <fx@gnu.org>
parents:
diff changeset
408 with the manual, one of them must be wrong; that is a bug.
Dave Love <fx@gnu.org>
parents:
diff changeset
409
Dave Love <fx@gnu.org>
parents:
diff changeset
410 @node Understanding Bug Reporting
Dave Love <fx@gnu.org>
parents:
diff changeset
411 @subsection Understanding Bug Reporting
Dave Love <fx@gnu.org>
parents:
diff changeset
412
Dave Love <fx@gnu.org>
parents:
diff changeset
413 @findex emacs-version
Dave Love <fx@gnu.org>
parents:
diff changeset
414 When you decide that there is a bug, it is important to report it and to
Dave Love <fx@gnu.org>
parents:
diff changeset
415 report it in a way which is useful. What is most useful is an exact
Dave Love <fx@gnu.org>
parents:
diff changeset
416 description of what commands you type, starting with the shell command to
Dave Love <fx@gnu.org>
parents:
diff changeset
417 run Emacs, until the problem happens.
Dave Love <fx@gnu.org>
parents:
diff changeset
418
Dave Love <fx@gnu.org>
parents:
diff changeset
419 The most important principle in reporting a bug is to report
Dave Love <fx@gnu.org>
parents:
diff changeset
420 @emph{facts}. Hypotheses and verbal descriptions are no substitute for
Dave Love <fx@gnu.org>
parents:
diff changeset
421 the detailed raw data. Reporting the facts is straightforward, but many
Dave Love <fx@gnu.org>
parents:
diff changeset
422 people strain to posit explanations and report them instead of the
Dave Love <fx@gnu.org>
parents:
diff changeset
423 facts. If the explanations are based on guesses about how Emacs is
Dave Love <fx@gnu.org>
parents:
diff changeset
424 implemented, they will be useless; meanwhile, lacking the facts, we will
Dave Love <fx@gnu.org>
parents:
diff changeset
425 have no real information about the bug.
Dave Love <fx@gnu.org>
parents:
diff changeset
426
Dave Love <fx@gnu.org>
parents:
diff changeset
427 For example, suppose that you type @kbd{C-x C-f /glorp/baz.ugh
Dave Love <fx@gnu.org>
parents:
diff changeset
428 @key{RET}}, visiting a file which (you know) happens to be rather large,
Dave Love <fx@gnu.org>
parents:
diff changeset
429 and Emacs displayed @samp{I feel pretty today}. The best way to report
Dave Love <fx@gnu.org>
parents:
diff changeset
430 the bug is with a sentence like the preceding one, because it gives all
Dave Love <fx@gnu.org>
parents:
diff changeset
431 the facts.
Dave Love <fx@gnu.org>
parents:
diff changeset
432
Dave Love <fx@gnu.org>
parents:
diff changeset
433 A bad way would be to assume that the problem is due to the size of
Dave Love <fx@gnu.org>
parents:
diff changeset
434 the file and say, ``I visited a large file, and Emacs displayed @samp{I
Dave Love <fx@gnu.org>
parents:
diff changeset
435 feel pretty today}.'' This is what we mean by ``guessing
Dave Love <fx@gnu.org>
parents:
diff changeset
436 explanations.'' The problem is just as likely to be due to the fact
Dave Love <fx@gnu.org>
parents:
diff changeset
437 that there is a @samp{z} in the file name. If this is so, then when we
Dave Love <fx@gnu.org>
parents:
diff changeset
438 got your report, we would try out the problem with some ``large file,''
Dave Love <fx@gnu.org>
parents:
diff changeset
439 probably with no @samp{z} in its name, and not see any problem. There
Dave Love <fx@gnu.org>
parents:
diff changeset
440 is no way in the world that we could guess that we should try visiting a
Dave Love <fx@gnu.org>
parents:
diff changeset
441 file with a @samp{z} in its name.
Dave Love <fx@gnu.org>
parents:
diff changeset
442
Dave Love <fx@gnu.org>
parents:
diff changeset
443 Alternatively, the problem might be due to the fact that the file starts
Dave Love <fx@gnu.org>
parents:
diff changeset
444 with exactly 25 spaces. For this reason, you should make sure that you
Dave Love <fx@gnu.org>
parents:
diff changeset
445 inform us of the exact contents of any file that is needed to reproduce the
Dave Love <fx@gnu.org>
parents:
diff changeset
446 bug. What if the problem only occurs when you have typed the @kbd{C-x C-a}
Dave Love <fx@gnu.org>
parents:
diff changeset
447 command previously? This is why we ask you to give the exact sequence of
Dave Love <fx@gnu.org>
parents:
diff changeset
448 characters you typed since starting the Emacs session.
Dave Love <fx@gnu.org>
parents:
diff changeset
449
Dave Love <fx@gnu.org>
parents:
diff changeset
450 You should not even say ``visit a file'' instead of @kbd{C-x C-f} unless
Dave Love <fx@gnu.org>
parents:
diff changeset
451 you @emph{know} that it makes no difference which visiting command is used.
Dave Love <fx@gnu.org>
parents:
diff changeset
452 Similarly, rather than saying ``if I have three characters on the line,''
Dave Love <fx@gnu.org>
parents:
diff changeset
453 say ``after I type @kbd{@key{RET} A B C @key{RET} C-p},'' if that is
Dave Love <fx@gnu.org>
parents:
diff changeset
454 the way you entered the text.@refill
Dave Love <fx@gnu.org>
parents:
diff changeset
455
Dave Love <fx@gnu.org>
parents:
diff changeset
456 So please don't guess any explanations when you report a bug. If you
Dave Love <fx@gnu.org>
parents:
diff changeset
457 want to actually @emph{debug} the problem, and report explanations that
Dave Love <fx@gnu.org>
parents:
diff changeset
458 are more than guesses, that is useful---but please include the facts as
Dave Love <fx@gnu.org>
parents:
diff changeset
459 well.
Dave Love <fx@gnu.org>
parents:
diff changeset
460
Dave Love <fx@gnu.org>
parents:
diff changeset
461 @node Checklist
Dave Love <fx@gnu.org>
parents:
diff changeset
462 @subsection Checklist for Bug Reports
Dave Love <fx@gnu.org>
parents:
diff changeset
463
Dave Love <fx@gnu.org>
parents:
diff changeset
464 @cindex reporting bugs
Dave Love <fx@gnu.org>
parents:
diff changeset
465 The best way to send a bug report is to mail it electronically to the
26021
4f5e4ec69f6a Add emacs-prestest-bug@gnu.org analogous to bug-gnu-emacs@gnu.org.
Gerd Moellmann <gerd@gnu.org>
parents: 25829
diff changeset
466 Emacs maintainers at @samp{bug-gnu-emacs@@gnu.org}, or to
4f5e4ec69f6a Add emacs-prestest-bug@gnu.org analogous to bug-gnu-emacs@gnu.org.
Gerd Moellmann <gerd@gnu.org>
parents: 25829
diff changeset
467 @samp{emacs-pretest-bug@@gnu.org} if you are pretesting an Emacs beta
4f5e4ec69f6a Add emacs-prestest-bug@gnu.org analogous to bug-gnu-emacs@gnu.org.
Gerd Moellmann <gerd@gnu.org>
parents: 25829
diff changeset
468 release. (If you want to suggest a change as an improvement, use the
4f5e4ec69f6a Add emacs-prestest-bug@gnu.org analogous to bug-gnu-emacs@gnu.org.
Gerd Moellmann <gerd@gnu.org>
parents: 25829
diff changeset
469 same address.)
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
470
Dave Love <fx@gnu.org>
parents:
diff changeset
471 If you'd like to read the bug reports, you can find them on the
Dave Love <fx@gnu.org>
parents:
diff changeset
472 newsgroup @samp{gnu.emacs.bug}; keep in mind, however, that as a
Dave Love <fx@gnu.org>
parents:
diff changeset
473 spectator you should not criticize anything about what you see there.
Dave Love <fx@gnu.org>
parents:
diff changeset
474 The purpose of bug reports is to give information to the Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
475 maintainers. Spectators are welcome only as long as they do not
Dave Love <fx@gnu.org>
parents:
diff changeset
476 interfere with this. In particular, some bug reports contain large
Dave Love <fx@gnu.org>
parents:
diff changeset
477 amounts of data; spectators should not complain about this.
Dave Love <fx@gnu.org>
parents:
diff changeset
478
Dave Love <fx@gnu.org>
parents:
diff changeset
479 Please do not post bug reports using netnews; mail is more reliable
Dave Love <fx@gnu.org>
parents:
diff changeset
480 than netnews about reporting your correct address, which we may need in
Dave Love <fx@gnu.org>
parents:
diff changeset
481 order to ask you for more information.
Dave Love <fx@gnu.org>
parents:
diff changeset
482
Dave Love <fx@gnu.org>
parents:
diff changeset
483 If you can't send electronic mail, then mail the bug report on paper
Dave Love <fx@gnu.org>
parents:
diff changeset
484 or machine-readable media to this address:
Dave Love <fx@gnu.org>
parents:
diff changeset
485
Dave Love <fx@gnu.org>
parents:
diff changeset
486 @format
Dave Love <fx@gnu.org>
parents:
diff changeset
487 GNU Emacs Bugs
Dave Love <fx@gnu.org>
parents:
diff changeset
488 Free Software Foundation
Dave Love <fx@gnu.org>
parents:
diff changeset
489 59 Temple Place, Suite 330
Dave Love <fx@gnu.org>
parents:
diff changeset
490 Boston, MA 02111-1307 USA
Dave Love <fx@gnu.org>
parents:
diff changeset
491 @end format
Dave Love <fx@gnu.org>
parents:
diff changeset
492
Dave Love <fx@gnu.org>
parents:
diff changeset
493 We do not promise to fix the bug; but if the bug is serious,
Dave Love <fx@gnu.org>
parents:
diff changeset
494 or ugly, or easy to fix, chances are we will want to.
Dave Love <fx@gnu.org>
parents:
diff changeset
495
Dave Love <fx@gnu.org>
parents:
diff changeset
496 @findex report-emacs-bug
Dave Love <fx@gnu.org>
parents:
diff changeset
497 A convenient way to send a bug report for Emacs is to use the command
Dave Love <fx@gnu.org>
parents:
diff changeset
498 @kbd{M-x report-emacs-bug}. This sets up a mail buffer (@pxref{Sending
Dave Love <fx@gnu.org>
parents:
diff changeset
499 Mail}) and automatically inserts @emph{some} of the essential
Dave Love <fx@gnu.org>
parents:
diff changeset
500 information. However, it cannot supply all the necessary information;
Dave Love <fx@gnu.org>
parents:
diff changeset
501 you should still read and follow the guidelines below, so you can enter
Dave Love <fx@gnu.org>
parents:
diff changeset
502 the other crucial information by hand before you send the message.
Dave Love <fx@gnu.org>
parents:
diff changeset
503
Dave Love <fx@gnu.org>
parents:
diff changeset
504 To enable maintainers to investigate a bug, your report
Dave Love <fx@gnu.org>
parents:
diff changeset
505 should include all these things:
Dave Love <fx@gnu.org>
parents:
diff changeset
506
Dave Love <fx@gnu.org>
parents:
diff changeset
507 @itemize @bullet
Dave Love <fx@gnu.org>
parents:
diff changeset
508 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
509 The version number of Emacs. Without this, we won't know whether there
Dave Love <fx@gnu.org>
parents:
diff changeset
510 is any point in looking for the bug in the current version of GNU
Dave Love <fx@gnu.org>
parents:
diff changeset
511 Emacs.
Dave Love <fx@gnu.org>
parents:
diff changeset
512
Dave Love <fx@gnu.org>
parents:
diff changeset
513 You can get the version number by typing @kbd{M-x emacs-version
Dave Love <fx@gnu.org>
parents:
diff changeset
514 @key{RET}}. If that command does not work, you probably have something
Dave Love <fx@gnu.org>
parents:
diff changeset
515 other than GNU Emacs, so you will have to report the bug somewhere
Dave Love <fx@gnu.org>
parents:
diff changeset
516 else.
Dave Love <fx@gnu.org>
parents:
diff changeset
517
Dave Love <fx@gnu.org>
parents:
diff changeset
518 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
519 The type of machine you are using, and the operating system name and
Dave Love <fx@gnu.org>
parents:
diff changeset
520 version number. @kbd{M-x emacs-version @key{RET}} provides this
Dave Love <fx@gnu.org>
parents:
diff changeset
521 information too. Copy its output from the @samp{*Messages*} buffer, so
Dave Love <fx@gnu.org>
parents:
diff changeset
522 that you get it all and get it accurately.
Dave Love <fx@gnu.org>
parents:
diff changeset
523
Dave Love <fx@gnu.org>
parents:
diff changeset
524 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
525 The operands given to the @code{configure} command when Emacs was
Dave Love <fx@gnu.org>
parents:
diff changeset
526 installed.
Dave Love <fx@gnu.org>
parents:
diff changeset
527
Dave Love <fx@gnu.org>
parents:
diff changeset
528 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
529 A complete list of any modifications you have made to the Emacs source.
Dave Love <fx@gnu.org>
parents:
diff changeset
530 (We may not have time to investigate the bug unless it happens in an
Dave Love <fx@gnu.org>
parents:
diff changeset
531 unmodified Emacs. But if you've made modifications and you don't tell
Dave Love <fx@gnu.org>
parents:
diff changeset
532 us, you are sending us on a wild goose chase.)
Dave Love <fx@gnu.org>
parents:
diff changeset
533
Dave Love <fx@gnu.org>
parents:
diff changeset
534 Be precise about these changes. A description in English is not
Dave Love <fx@gnu.org>
parents:
diff changeset
535 enough---send a context diff for them.
Dave Love <fx@gnu.org>
parents:
diff changeset
536
Dave Love <fx@gnu.org>
parents:
diff changeset
537 Adding files of your own, or porting to another machine, is a
Dave Love <fx@gnu.org>
parents:
diff changeset
538 modification of the source.
Dave Love <fx@gnu.org>
parents:
diff changeset
539
Dave Love <fx@gnu.org>
parents:
diff changeset
540 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
541 Details of any other deviations from the standard procedure for installing
Dave Love <fx@gnu.org>
parents:
diff changeset
542 GNU Emacs.
Dave Love <fx@gnu.org>
parents:
diff changeset
543
Dave Love <fx@gnu.org>
parents:
diff changeset
544 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
545 The complete text of any files needed to reproduce the bug.
Dave Love <fx@gnu.org>
parents:
diff changeset
546
Dave Love <fx@gnu.org>
parents:
diff changeset
547 If you can tell us a way to cause the problem without visiting any files,
Dave Love <fx@gnu.org>
parents:
diff changeset
548 please do so. This makes it much easier to debug. If you do need files,
Dave Love <fx@gnu.org>
parents:
diff changeset
549 make sure you arrange for us to see their exact contents. For example, it
Dave Love <fx@gnu.org>
parents:
diff changeset
550 can often matter whether there are spaces at the ends of lines, or a
Dave Love <fx@gnu.org>
parents:
diff changeset
551 newline after the last line in the buffer (nothing ought to care whether
Dave Love <fx@gnu.org>
parents:
diff changeset
552 the last line is terminated, but try telling the bugs that).
Dave Love <fx@gnu.org>
parents:
diff changeset
553
Dave Love <fx@gnu.org>
parents:
diff changeset
554 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
555 The precise commands we need to type to reproduce the bug.
Dave Love <fx@gnu.org>
parents:
diff changeset
556
Dave Love <fx@gnu.org>
parents:
diff changeset
557 @findex open-dribble-file
Dave Love <fx@gnu.org>
parents:
diff changeset
558 @cindex dribble file
Dave Love <fx@gnu.org>
parents:
diff changeset
559 The easy way to record the input to Emacs precisely is to write a
Dave Love <fx@gnu.org>
parents:
diff changeset
560 dribble file. To start the file, execute the Lisp expression
Dave Love <fx@gnu.org>
parents:
diff changeset
561
Dave Love <fx@gnu.org>
parents:
diff changeset
562 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
563 (open-dribble-file "~/dribble")
Dave Love <fx@gnu.org>
parents:
diff changeset
564 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
565
Dave Love <fx@gnu.org>
parents:
diff changeset
566 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
567 using @kbd{M-:} or from the @samp{*scratch*} buffer just after
Dave Love <fx@gnu.org>
parents:
diff changeset
568 starting Emacs. From then on, Emacs copies all your input to the
Dave Love <fx@gnu.org>
parents:
diff changeset
569 specified dribble file until the Emacs process is killed.
Dave Love <fx@gnu.org>
parents:
diff changeset
570
Dave Love <fx@gnu.org>
parents:
diff changeset
571 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
572 @findex open-termscript
Dave Love <fx@gnu.org>
parents:
diff changeset
573 @cindex termscript file
29107
203ba1f77b7b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 27729
diff changeset
574 @cindex @env{TERM} environment variable
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
575 For possible display bugs, the terminal type (the value of environment
29107
203ba1f77b7b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 27729
diff changeset
576 variable @env{TERM}), the complete termcap entry for the terminal from
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
577 @file{/etc/termcap} (since that file is not identical on all machines),
Dave Love <fx@gnu.org>
parents:
diff changeset
578 and the output that Emacs actually sent to the terminal.
Dave Love <fx@gnu.org>
parents:
diff changeset
579
Dave Love <fx@gnu.org>
parents:
diff changeset
580 The way to collect the terminal output is to execute the Lisp expression
Dave Love <fx@gnu.org>
parents:
diff changeset
581
Dave Love <fx@gnu.org>
parents:
diff changeset
582 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
583 (open-termscript "~/termscript")
Dave Love <fx@gnu.org>
parents:
diff changeset
584 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
585
Dave Love <fx@gnu.org>
parents:
diff changeset
586 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
587 using @kbd{M-:} or from the @samp{*scratch*} buffer just after
Dave Love <fx@gnu.org>
parents:
diff changeset
588 starting Emacs. From then on, Emacs copies all terminal output to the
Dave Love <fx@gnu.org>
parents:
diff changeset
589 specified termscript file as well, until the Emacs process is killed.
Dave Love <fx@gnu.org>
parents:
diff changeset
590 If the problem happens when Emacs starts up, put this expression into
Dave Love <fx@gnu.org>
parents:
diff changeset
591 your @file{.emacs} file so that the termscript file will be open when
Dave Love <fx@gnu.org>
parents:
diff changeset
592 Emacs displays the screen for the first time.
Dave Love <fx@gnu.org>
parents:
diff changeset
593
Dave Love <fx@gnu.org>
parents:
diff changeset
594 Be warned: it is often difficult, and sometimes impossible, to fix a
Dave Love <fx@gnu.org>
parents:
diff changeset
595 terminal-dependent bug without access to a terminal of the type that
Dave Love <fx@gnu.org>
parents:
diff changeset
596 stimulates the bug.@refill
Dave Love <fx@gnu.org>
parents:
diff changeset
597
Dave Love <fx@gnu.org>
parents:
diff changeset
598 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
599 A description of what behavior you observe that you believe is
Dave Love <fx@gnu.org>
parents:
diff changeset
600 incorrect. For example, ``The Emacs process gets a fatal signal,'' or,
Dave Love <fx@gnu.org>
parents:
diff changeset
601 ``The resulting text is as follows, which I think is wrong.''
Dave Love <fx@gnu.org>
parents:
diff changeset
602
Dave Love <fx@gnu.org>
parents:
diff changeset
603 Of course, if the bug is that Emacs gets a fatal signal, then one can't
Dave Love <fx@gnu.org>
parents:
diff changeset
604 miss it. But if the bug is incorrect text, the maintainer might fail to
Dave Love <fx@gnu.org>
parents:
diff changeset
605 notice what is wrong. Why leave it to chance?
Dave Love <fx@gnu.org>
parents:
diff changeset
606
Dave Love <fx@gnu.org>
parents:
diff changeset
607 Even if the problem you experience is a fatal signal, you should still
Dave Love <fx@gnu.org>
parents:
diff changeset
608 say so explicitly. Suppose something strange is going on, such as, your
Dave Love <fx@gnu.org>
parents:
diff changeset
609 copy of the source is out of sync, or you have encountered a bug in the
Dave Love <fx@gnu.org>
parents:
diff changeset
610 C library on your system. (This has happened!) Your copy might crash
Dave Love <fx@gnu.org>
parents:
diff changeset
611 and the copy here might not. If you @emph{said} to expect a crash, then
Dave Love <fx@gnu.org>
parents:
diff changeset
612 when Emacs here fails to crash, we would know that the bug was not
Dave Love <fx@gnu.org>
parents:
diff changeset
613 happening. If you don't say to expect a crash, then we would not know
Dave Love <fx@gnu.org>
parents:
diff changeset
614 whether the bug was happening---we would not be able to draw any
Dave Love <fx@gnu.org>
parents:
diff changeset
615 conclusion from our observations.
Dave Love <fx@gnu.org>
parents:
diff changeset
616
Dave Love <fx@gnu.org>
parents:
diff changeset
617 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
618 If the manifestation of the bug is an Emacs error message, it is
Dave Love <fx@gnu.org>
parents:
diff changeset
619 important to report the precise text of the error message, and a
Dave Love <fx@gnu.org>
parents:
diff changeset
620 backtrace showing how the Lisp program in Emacs arrived at the error.
Dave Love <fx@gnu.org>
parents:
diff changeset
621
Dave Love <fx@gnu.org>
parents:
diff changeset
622 To get the error message text accurately, copy it from the
Dave Love <fx@gnu.org>
parents:
diff changeset
623 @samp{*Messages*} buffer into the bug report. Copy all of it, not just
Dave Love <fx@gnu.org>
parents:
diff changeset
624 part.
Dave Love <fx@gnu.org>
parents:
diff changeset
625
Dave Love <fx@gnu.org>
parents:
diff changeset
626 To make a backtrace for the error, evaluate the Lisp expression
Dave Love <fx@gnu.org>
parents:
diff changeset
627 @code{(setq @w{debug-on-error t})} before the error happens (that is to
Dave Love <fx@gnu.org>
parents:
diff changeset
628 say, you must execute that expression and then make the bug happen).
Dave Love <fx@gnu.org>
parents:
diff changeset
629 This causes the error to run the Lisp debugger, which shows you a
Dave Love <fx@gnu.org>
parents:
diff changeset
630 backtrace. Copy the text of the debugger's backtrace into the bug
Dave Love <fx@gnu.org>
parents:
diff changeset
631 report.
Dave Love <fx@gnu.org>
parents:
diff changeset
632
Dave Love <fx@gnu.org>
parents:
diff changeset
633 This use of the debugger is possible only if you know how to make the
Dave Love <fx@gnu.org>
parents:
diff changeset
634 bug happen again. If you can't make it happen again, at least copy
Dave Love <fx@gnu.org>
parents:
diff changeset
635 the whole error message.
Dave Love <fx@gnu.org>
parents:
diff changeset
636
Dave Love <fx@gnu.org>
parents:
diff changeset
637 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
638 Check whether any programs you have loaded into the Lisp world,
Dave Love <fx@gnu.org>
parents:
diff changeset
639 including your @file{.emacs} file, set any variables that may affect the
Dave Love <fx@gnu.org>
parents:
diff changeset
640 functioning of Emacs. Also, see whether the problem happens in a
Dave Love <fx@gnu.org>
parents:
diff changeset
641 freshly started Emacs without loading your @file{.emacs} file (start
Dave Love <fx@gnu.org>
parents:
diff changeset
642 Emacs with the @code{-q} switch to prevent loading the init file). If
Dave Love <fx@gnu.org>
parents:
diff changeset
643 the problem does @emph{not} occur then, you must report the precise
Dave Love <fx@gnu.org>
parents:
diff changeset
644 contents of any programs that you must load into the Lisp world in order
Dave Love <fx@gnu.org>
parents:
diff changeset
645 to cause the problem to occur.
Dave Love <fx@gnu.org>
parents:
diff changeset
646
Dave Love <fx@gnu.org>
parents:
diff changeset
647 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
648 If the problem does depend on an init file or other Lisp programs that
Dave Love <fx@gnu.org>
parents:
diff changeset
649 are not part of the standard Emacs system, then you should make sure it
Dave Love <fx@gnu.org>
parents:
diff changeset
650 is not a bug in those programs by complaining to their maintainers
Dave Love <fx@gnu.org>
parents:
diff changeset
651 first. After they verify that they are using Emacs in a way that is
Dave Love <fx@gnu.org>
parents:
diff changeset
652 supposed to work, they should report the bug.
Dave Love <fx@gnu.org>
parents:
diff changeset
653
Dave Love <fx@gnu.org>
parents:
diff changeset
654 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
655 If you wish to mention something in the GNU Emacs source, show the line
Dave Love <fx@gnu.org>
parents:
diff changeset
656 of code with a few lines of context. Don't just give a line number.
Dave Love <fx@gnu.org>
parents:
diff changeset
657
Dave Love <fx@gnu.org>
parents:
diff changeset
658 The line numbers in the development sources don't match those in your
Dave Love <fx@gnu.org>
parents:
diff changeset
659 sources. It would take extra work for the maintainers to determine what
Dave Love <fx@gnu.org>
parents:
diff changeset
660 code is in your version at a given line number, and we could not be
Dave Love <fx@gnu.org>
parents:
diff changeset
661 certain.
Dave Love <fx@gnu.org>
parents:
diff changeset
662
Dave Love <fx@gnu.org>
parents:
diff changeset
663 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
664 Additional information from a C debugger such as GDB might enable
Dave Love <fx@gnu.org>
parents:
diff changeset
665 someone to find a problem on a machine which he does not have available.
Dave Love <fx@gnu.org>
parents:
diff changeset
666 If you don't know how to use GDB, please read the GDB manual---it is not
Dave Love <fx@gnu.org>
parents:
diff changeset
667 very long, and using GDB is easy. You can find the GDB distribution,
Dave Love <fx@gnu.org>
parents:
diff changeset
668 including the GDB manual in online form, in most of the same places you
Dave Love <fx@gnu.org>
parents:
diff changeset
669 can find the Emacs distribution. To run Emacs under GDB, you should
Dave Love <fx@gnu.org>
parents:
diff changeset
670 switch to the @file{src} subdirectory in which Emacs was compiled, then
Dave Love <fx@gnu.org>
parents:
diff changeset
671 do @samp{gdb emacs}. It is important for the directory @file{src} to be
Dave Love <fx@gnu.org>
parents:
diff changeset
672 current so that GDB will read the @file{.gdbinit} file in this
Dave Love <fx@gnu.org>
parents:
diff changeset
673 directory.
Dave Love <fx@gnu.org>
parents:
diff changeset
674
Dave Love <fx@gnu.org>
parents:
diff changeset
675 However, you need to think when you collect the additional information
Dave Love <fx@gnu.org>
parents:
diff changeset
676 if you want it to show what causes the bug.
Dave Love <fx@gnu.org>
parents:
diff changeset
677
Dave Love <fx@gnu.org>
parents:
diff changeset
678 @cindex backtrace for bug reports
Dave Love <fx@gnu.org>
parents:
diff changeset
679 For example, many people send just a backtrace, but that is not very
Dave Love <fx@gnu.org>
parents:
diff changeset
680 useful by itself. A simple backtrace with arguments often conveys
Dave Love <fx@gnu.org>
parents:
diff changeset
681 little about what is happening inside GNU Emacs, because most of the
Dave Love <fx@gnu.org>
parents:
diff changeset
682 arguments listed in the backtrace are pointers to Lisp objects. The
Dave Love <fx@gnu.org>
parents:
diff changeset
683 numeric values of these pointers have no significance whatever; all that
Dave Love <fx@gnu.org>
parents:
diff changeset
684 matters is the contents of the objects they point to (and most of the
Dave Love <fx@gnu.org>
parents:
diff changeset
685 contents are themselves pointers).
Dave Love <fx@gnu.org>
parents:
diff changeset
686
Dave Love <fx@gnu.org>
parents:
diff changeset
687 @findex debug_print
Dave Love <fx@gnu.org>
parents:
diff changeset
688 To provide useful information, you need to show the values of Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
689 objects in Lisp notation. Do this for each variable which is a Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
690 object, in several stack frames near the bottom of the stack. Look at
Dave Love <fx@gnu.org>
parents:
diff changeset
691 the source to see which variables are Lisp objects, because the debugger
Dave Love <fx@gnu.org>
parents:
diff changeset
692 thinks of them as integers.
Dave Love <fx@gnu.org>
parents:
diff changeset
693
Dave Love <fx@gnu.org>
parents:
diff changeset
694 To show a variable's value in Lisp syntax, first print its value, then
Dave Love <fx@gnu.org>
parents:
diff changeset
695 use the user-defined GDB command @code{pr} to print the Lisp object in
Dave Love <fx@gnu.org>
parents:
diff changeset
696 Lisp syntax. (If you must use another debugger, call the function
Dave Love <fx@gnu.org>
parents:
diff changeset
697 @code{debug_print} with the object as an argument.) The @code{pr}
Dave Love <fx@gnu.org>
parents:
diff changeset
698 command is defined by the file @file{.gdbinit}, and it works only if you
Dave Love <fx@gnu.org>
parents:
diff changeset
699 are debugging a running process (not with a core dump).
Dave Love <fx@gnu.org>
parents:
diff changeset
700
Dave Love <fx@gnu.org>
parents:
diff changeset
701 To make Lisp errors stop Emacs and return to GDB, put a breakpoint at
Dave Love <fx@gnu.org>
parents:
diff changeset
702 @code{Fsignal}.
Dave Love <fx@gnu.org>
parents:
diff changeset
703
27729
75463d908406 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 26021
diff changeset
704 For a short listing of Lisp functions running, type the GDB
75463d908406 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 26021
diff changeset
705 command @code{xbacktrace}.
75463d908406 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 26021
diff changeset
706
75463d908406 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 26021
diff changeset
707 If you want to examine Lisp function arguments, move up the stack, and
75463d908406 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 26021
diff changeset
708 each time you get to a frame for the function @code{Ffuncall}, type
75463d908406 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 26021
diff changeset
709 these GDB commands:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
710
Dave Love <fx@gnu.org>
parents:
diff changeset
711 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
712 p *args
Dave Love <fx@gnu.org>
parents:
diff changeset
713 pr
Dave Love <fx@gnu.org>
parents:
diff changeset
714 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
715
Dave Love <fx@gnu.org>
parents:
diff changeset
716 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
717 To print the first argument that the function received, use these
Dave Love <fx@gnu.org>
parents:
diff changeset
718 commands:
Dave Love <fx@gnu.org>
parents:
diff changeset
719
Dave Love <fx@gnu.org>
parents:
diff changeset
720 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
721 p args[1]
Dave Love <fx@gnu.org>
parents:
diff changeset
722 pr
Dave Love <fx@gnu.org>
parents:
diff changeset
723 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
724
Dave Love <fx@gnu.org>
parents:
diff changeset
725 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
726 You can print the other arguments likewise. The argument @code{nargs}
Dave Love <fx@gnu.org>
parents:
diff changeset
727 of @code{Ffuncall} says how many arguments @code{Ffuncall} received;
Dave Love <fx@gnu.org>
parents:
diff changeset
728 these include the Lisp function itself and the arguments for that
Dave Love <fx@gnu.org>
parents:
diff changeset
729 function.
Dave Love <fx@gnu.org>
parents:
diff changeset
730
Dave Love <fx@gnu.org>
parents:
diff changeset
731 The file @file{.gdbinit} defines several other commands that are useful
Dave Love <fx@gnu.org>
parents:
diff changeset
732 for examining the data types and contents of Lisp objects. Their names
Dave Love <fx@gnu.org>
parents:
diff changeset
733 begin with @samp{x}. These commands work at a lower level than
Dave Love <fx@gnu.org>
parents:
diff changeset
734 @code{pr}, and are less convenient, but they may work even when
Dave Love <fx@gnu.org>
parents:
diff changeset
735 @code{pr} does not, such as when debugging a core dump or when Emacs has
Dave Love <fx@gnu.org>
parents:
diff changeset
736 had a fatal signal.
Dave Love <fx@gnu.org>
parents:
diff changeset
737
Dave Love <fx@gnu.org>
parents:
diff changeset
738 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
739 If the symptom of the bug is that Emacs fails to respond, don't assume
Dave Love <fx@gnu.org>
parents:
diff changeset
740 Emacs is ``hung''---it may instead be in an infinite loop. To find out
Dave Love <fx@gnu.org>
parents:
diff changeset
741 which, make the problem happen under GDB and stop Emacs once it is not
Dave Love <fx@gnu.org>
parents:
diff changeset
742 responding. (If Emacs is using X Windows directly, you can stop Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
743 by typing @kbd{C-z} at the GDB job.) Then try stepping with
Dave Love <fx@gnu.org>
parents:
diff changeset
744 @samp{step}. If Emacs is hung, the @samp{step} command won't return.
Dave Love <fx@gnu.org>
parents:
diff changeset
745 If it is looping, @samp{step} will return.
Dave Love <fx@gnu.org>
parents:
diff changeset
746
Dave Love <fx@gnu.org>
parents:
diff changeset
747 If this shows Emacs is hung in a system call, stop it again and examine
Dave Love <fx@gnu.org>
parents:
diff changeset
748 the arguments of the call. In your bug report, state exactly where in
Dave Love <fx@gnu.org>
parents:
diff changeset
749 the source the system call is, and what the arguments are.
Dave Love <fx@gnu.org>
parents:
diff changeset
750
Dave Love <fx@gnu.org>
parents:
diff changeset
751 If Emacs is in an infinite loop, please determine where the loop starts
Dave Love <fx@gnu.org>
parents:
diff changeset
752 and ends. The easiest way to do this is to use the GDB command
Dave Love <fx@gnu.org>
parents:
diff changeset
753 @samp{finish}. Each time you use it, Emacs resumes execution until it
Dave Love <fx@gnu.org>
parents:
diff changeset
754 exits one stack frame. Keep typing @samp{finish} until it doesn't
Dave Love <fx@gnu.org>
parents:
diff changeset
755 return---that means the infinite loop is in the stack frame which you
Dave Love <fx@gnu.org>
parents:
diff changeset
756 just tried to finish.
Dave Love <fx@gnu.org>
parents:
diff changeset
757
Dave Love <fx@gnu.org>
parents:
diff changeset
758 Stop Emacs again, and use @samp{finish} repeatedly again until you get
Dave Love <fx@gnu.org>
parents:
diff changeset
759 @emph{back to} that frame. Then use @samp{next} to step through that
Dave Love <fx@gnu.org>
parents:
diff changeset
760 frame. By stepping, you will see where the loop starts and ends. Also
Dave Love <fx@gnu.org>
parents:
diff changeset
761 please examine the data being used in the loop and try to determine why
Dave Love <fx@gnu.org>
parents:
diff changeset
762 the loop does not exit when it should. Include all of this information
Dave Love <fx@gnu.org>
parents:
diff changeset
763 in your bug report.
Dave Love <fx@gnu.org>
parents:
diff changeset
764 @end itemize
Dave Love <fx@gnu.org>
parents:
diff changeset
765
Dave Love <fx@gnu.org>
parents:
diff changeset
766 Here are some things that are not necessary in a bug report:
Dave Love <fx@gnu.org>
parents:
diff changeset
767
Dave Love <fx@gnu.org>
parents:
diff changeset
768 @itemize @bullet
Dave Love <fx@gnu.org>
parents:
diff changeset
769 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
770 A description of the envelope of the bug---this is not necessary for a
Dave Love <fx@gnu.org>
parents:
diff changeset
771 reproducible bug.
Dave Love <fx@gnu.org>
parents:
diff changeset
772
Dave Love <fx@gnu.org>
parents:
diff changeset
773 Often people who encounter a bug spend a lot of time investigating
Dave Love <fx@gnu.org>
parents:
diff changeset
774 which changes to the input file will make the bug go away and which
Dave Love <fx@gnu.org>
parents:
diff changeset
775 changes will not affect it.
Dave Love <fx@gnu.org>
parents:
diff changeset
776
Dave Love <fx@gnu.org>
parents:
diff changeset
777 This is often time-consuming and not very useful, because the way we
Dave Love <fx@gnu.org>
parents:
diff changeset
778 will find the bug is by running a single example under the debugger with
Dave Love <fx@gnu.org>
parents:
diff changeset
779 breakpoints, not by pure deduction from a series of examples. You might
Dave Love <fx@gnu.org>
parents:
diff changeset
780 as well save time by not searching for additional examples.
Dave Love <fx@gnu.org>
parents:
diff changeset
781
Dave Love <fx@gnu.org>
parents:
diff changeset
782 Of course, if you can find a simpler example to report @emph{instead} of
Dave Love <fx@gnu.org>
parents:
diff changeset
783 the original one, that is a convenience. Errors in the output will be
Dave Love <fx@gnu.org>
parents:
diff changeset
784 easier to spot, running under the debugger will take less time, etc.
Dave Love <fx@gnu.org>
parents:
diff changeset
785
Dave Love <fx@gnu.org>
parents:
diff changeset
786 However, simplification is not vital; if you can't do this or don't have
Dave Love <fx@gnu.org>
parents:
diff changeset
787 time to try, please report the bug with your original test case.
Dave Love <fx@gnu.org>
parents:
diff changeset
788
Dave Love <fx@gnu.org>
parents:
diff changeset
789 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
790 A system-call trace of Emacs execution.
Dave Love <fx@gnu.org>
parents:
diff changeset
791
Dave Love <fx@gnu.org>
parents:
diff changeset
792 System-call traces are very useful for certain special kinds of
Dave Love <fx@gnu.org>
parents:
diff changeset
793 debugging, but in most cases they give little useful information. It is
Dave Love <fx@gnu.org>
parents:
diff changeset
794 therefore strange that many people seem to think that @emph{the} way to
Dave Love <fx@gnu.org>
parents:
diff changeset
795 report information about a crash is to send a system-call trace. Perhaps
Dave Love <fx@gnu.org>
parents:
diff changeset
796 this is a habit formed from experience debugging programs that don't
Dave Love <fx@gnu.org>
parents:
diff changeset
797 have source code or debugging symbols.
Dave Love <fx@gnu.org>
parents:
diff changeset
798
Dave Love <fx@gnu.org>
parents:
diff changeset
799 In most programs, a backtrace is normally far, far more informative than
Dave Love <fx@gnu.org>
parents:
diff changeset
800 a system-call trace. Even in Emacs, a simple backtrace is generally
Dave Love <fx@gnu.org>
parents:
diff changeset
801 more informative, though to give full information you should supplement
Dave Love <fx@gnu.org>
parents:
diff changeset
802 the backtrace by displaying variable values and printing them as Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
803 objects with @code{pr} (see above).
Dave Love <fx@gnu.org>
parents:
diff changeset
804
Dave Love <fx@gnu.org>
parents:
diff changeset
805 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
806 A patch for the bug.
Dave Love <fx@gnu.org>
parents:
diff changeset
807
Dave Love <fx@gnu.org>
parents:
diff changeset
808 A patch for the bug is useful if it is a good one. But don't omit the
Dave Love <fx@gnu.org>
parents:
diff changeset
809 other information that a bug report needs, such as the test case, on the
Dave Love <fx@gnu.org>
parents:
diff changeset
810 assumption that a patch is sufficient. We might see problems with your
Dave Love <fx@gnu.org>
parents:
diff changeset
811 patch and decide to fix the problem another way, or we might not
Dave Love <fx@gnu.org>
parents:
diff changeset
812 understand it at all. And if we can't understand what bug you are
Dave Love <fx@gnu.org>
parents:
diff changeset
813 trying to fix, or why your patch should be an improvement, we mustn't
Dave Love <fx@gnu.org>
parents:
diff changeset
814 install it.
Dave Love <fx@gnu.org>
parents:
diff changeset
815
Dave Love <fx@gnu.org>
parents:
diff changeset
816 @ifinfo
Dave Love <fx@gnu.org>
parents:
diff changeset
817 @xref{Sending Patches}, for guidelines on how to make it easy for us to
Dave Love <fx@gnu.org>
parents:
diff changeset
818 understand and install your patches.
Dave Love <fx@gnu.org>
parents:
diff changeset
819 @end ifinfo
Dave Love <fx@gnu.org>
parents:
diff changeset
820
Dave Love <fx@gnu.org>
parents:
diff changeset
821 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
822 A guess about what the bug is or what it depends on.
Dave Love <fx@gnu.org>
parents:
diff changeset
823
Dave Love <fx@gnu.org>
parents:
diff changeset
824 Such guesses are usually wrong. Even experts can't guess right about
Dave Love <fx@gnu.org>
parents:
diff changeset
825 such things without first using the debugger to find the facts.
Dave Love <fx@gnu.org>
parents:
diff changeset
826 @end itemize
Dave Love <fx@gnu.org>
parents:
diff changeset
827
Dave Love <fx@gnu.org>
parents:
diff changeset
828 @node Sending Patches
Dave Love <fx@gnu.org>
parents:
diff changeset
829 @subsection Sending Patches for GNU Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
830
Dave Love <fx@gnu.org>
parents:
diff changeset
831 @cindex sending patches for GNU Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
832 @cindex patches, sending
Dave Love <fx@gnu.org>
parents:
diff changeset
833 If you would like to write bug fixes or improvements for GNU Emacs,
Dave Love <fx@gnu.org>
parents:
diff changeset
834 that is very helpful. When you send your changes, please follow these
Dave Love <fx@gnu.org>
parents:
diff changeset
835 guidelines to make it easy for the maintainers to use them. If you
Dave Love <fx@gnu.org>
parents:
diff changeset
836 don't follow these guidelines, your information might still be useful,
Dave Love <fx@gnu.org>
parents:
diff changeset
837 but using it will take extra work. Maintaining GNU Emacs is a lot of
Dave Love <fx@gnu.org>
parents:
diff changeset
838 work in the best of circumstances, and we can't keep up unless you do
Dave Love <fx@gnu.org>
parents:
diff changeset
839 your best to help.
Dave Love <fx@gnu.org>
parents:
diff changeset
840
Dave Love <fx@gnu.org>
parents:
diff changeset
841 @itemize @bullet
Dave Love <fx@gnu.org>
parents:
diff changeset
842 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
843 Send an explanation with your changes of what problem they fix or what
Dave Love <fx@gnu.org>
parents:
diff changeset
844 improvement they bring about. For a bug fix, just include a copy of the
Dave Love <fx@gnu.org>
parents:
diff changeset
845 bug report, and explain why the change fixes the bug.
Dave Love <fx@gnu.org>
parents:
diff changeset
846
Dave Love <fx@gnu.org>
parents:
diff changeset
847 (Referring to a bug report is not as good as including it, because then
Dave Love <fx@gnu.org>
parents:
diff changeset
848 we will have to look it up, and we have probably already deleted it if
Dave Love <fx@gnu.org>
parents:
diff changeset
849 we've already fixed the bug.)
Dave Love <fx@gnu.org>
parents:
diff changeset
850
Dave Love <fx@gnu.org>
parents:
diff changeset
851 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
852 Always include a proper bug report for the problem you think you have
Dave Love <fx@gnu.org>
parents:
diff changeset
853 fixed. We need to convince ourselves that the change is right before
Dave Love <fx@gnu.org>
parents:
diff changeset
854 installing it. Even if it is correct, we might have trouble
Dave Love <fx@gnu.org>
parents:
diff changeset
855 understanding it if we don't have a way to reproduce the problem.
Dave Love <fx@gnu.org>
parents:
diff changeset
856
Dave Love <fx@gnu.org>
parents:
diff changeset
857 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
858 Include all the comments that are appropriate to help people reading the
Dave Love <fx@gnu.org>
parents:
diff changeset
859 source in the future understand why this change was needed.
Dave Love <fx@gnu.org>
parents:
diff changeset
860
Dave Love <fx@gnu.org>
parents:
diff changeset
861 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
862 Don't mix together changes made for different reasons.
Dave Love <fx@gnu.org>
parents:
diff changeset
863 Send them @emph{individually}.
Dave Love <fx@gnu.org>
parents:
diff changeset
864
Dave Love <fx@gnu.org>
parents:
diff changeset
865 If you make two changes for separate reasons, then we might not want to
Dave Love <fx@gnu.org>
parents:
diff changeset
866 install them both. We might want to install just one. If you send them
Dave Love <fx@gnu.org>
parents:
diff changeset
867 all jumbled together in a single set of diffs, we have to do extra work
Dave Love <fx@gnu.org>
parents:
diff changeset
868 to disentangle them---to figure out which parts of the change serve
Dave Love <fx@gnu.org>
parents:
diff changeset
869 which purpose. If we don't have time for this, we might have to ignore
Dave Love <fx@gnu.org>
parents:
diff changeset
870 your changes entirely.
Dave Love <fx@gnu.org>
parents:
diff changeset
871
Dave Love <fx@gnu.org>
parents:
diff changeset
872 If you send each change as soon as you have written it, with its own
Dave Love <fx@gnu.org>
parents:
diff changeset
873 explanation, then two changes never get tangled up, and we can consider
Dave Love <fx@gnu.org>
parents:
diff changeset
874 each one properly without any extra work to disentangle them.
Dave Love <fx@gnu.org>
parents:
diff changeset
875
Dave Love <fx@gnu.org>
parents:
diff changeset
876 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
877 Send each change as soon as that change is finished. Sometimes people
Dave Love <fx@gnu.org>
parents:
diff changeset
878 think they are helping us by accumulating many changes to send them all
Dave Love <fx@gnu.org>
parents:
diff changeset
879 together. As explained above, this is absolutely the worst thing you
Dave Love <fx@gnu.org>
parents:
diff changeset
880 could do.
Dave Love <fx@gnu.org>
parents:
diff changeset
881
Dave Love <fx@gnu.org>
parents:
diff changeset
882 Since you should send each change separately, you might as well send it
Dave Love <fx@gnu.org>
parents:
diff changeset
883 right away. That gives us the option of installing it immediately if it
Dave Love <fx@gnu.org>
parents:
diff changeset
884 is important.
Dave Love <fx@gnu.org>
parents:
diff changeset
885
Dave Love <fx@gnu.org>
parents:
diff changeset
886 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
887 Use @samp{diff -c} to make your diffs. Diffs without context are hard
Dave Love <fx@gnu.org>
parents:
diff changeset
888 to install reliably. More than that, they are hard to study; we must
Dave Love <fx@gnu.org>
parents:
diff changeset
889 always study a patch to decide whether we want to install it. Unidiff
Dave Love <fx@gnu.org>
parents:
diff changeset
890 format is better than contextless diffs, but not as easy to read as
Dave Love <fx@gnu.org>
parents:
diff changeset
891 @samp{-c} format.
Dave Love <fx@gnu.org>
parents:
diff changeset
892
Dave Love <fx@gnu.org>
parents:
diff changeset
893 If you have GNU diff, use @samp{diff -c -F'^[_a-zA-Z0-9$]+ *('} when
Dave Love <fx@gnu.org>
parents:
diff changeset
894 making diffs of C code. This shows the name of the function that each
Dave Love <fx@gnu.org>
parents:
diff changeset
895 change occurs in.
Dave Love <fx@gnu.org>
parents:
diff changeset
896
Dave Love <fx@gnu.org>
parents:
diff changeset
897 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
898 Avoid any ambiguity as to which is the old version and which is the new.
Dave Love <fx@gnu.org>
parents:
diff changeset
899 Please make the old version the first argument to diff, and the new
Dave Love <fx@gnu.org>
parents:
diff changeset
900 version the second argument. And please give one version or the other a
Dave Love <fx@gnu.org>
parents:
diff changeset
901 name that indicates whether it is the old version or your new changed
Dave Love <fx@gnu.org>
parents:
diff changeset
902 one.
Dave Love <fx@gnu.org>
parents:
diff changeset
903
Dave Love <fx@gnu.org>
parents:
diff changeset
904 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
905 Write the change log entries for your changes. This is both to save us
Dave Love <fx@gnu.org>
parents:
diff changeset
906 the extra work of writing them, and to help explain your changes so we
Dave Love <fx@gnu.org>
parents:
diff changeset
907 can understand them.
Dave Love <fx@gnu.org>
parents:
diff changeset
908
Dave Love <fx@gnu.org>
parents:
diff changeset
909 The purpose of the change log is to show people where to find what was
Dave Love <fx@gnu.org>
parents:
diff changeset
910 changed. So you need to be specific about what functions you changed;
Dave Love <fx@gnu.org>
parents:
diff changeset
911 in large functions, it's often helpful to indicate where within the
Dave Love <fx@gnu.org>
parents:
diff changeset
912 function the change was.
Dave Love <fx@gnu.org>
parents:
diff changeset
913
Dave Love <fx@gnu.org>
parents:
diff changeset
914 On the other hand, once you have shown people where to find the change,
Dave Love <fx@gnu.org>
parents:
diff changeset
915 you need not explain its purpose in the change log. Thus, if you add a
Dave Love <fx@gnu.org>
parents:
diff changeset
916 new function, all you need to say about it is that it is new. If you
Dave Love <fx@gnu.org>
parents:
diff changeset
917 feel that the purpose needs explaining, it probably does---but put the
Dave Love <fx@gnu.org>
parents:
diff changeset
918 explanation in comments in the code. It will be more useful there.
Dave Love <fx@gnu.org>
parents:
diff changeset
919
Dave Love <fx@gnu.org>
parents:
diff changeset
920 Please read the @file{ChangeLog} files in the @file{src} and @file{lisp}
Dave Love <fx@gnu.org>
parents:
diff changeset
921 directories to see what sorts of information to put in, and to learn the
Dave Love <fx@gnu.org>
parents:
diff changeset
922 style that we use. If you would like your name to appear in the header
Dave Love <fx@gnu.org>
parents:
diff changeset
923 line, showing who made the change, send us the header line.
Dave Love <fx@gnu.org>
parents:
diff changeset
924 @xref{Change Log}.
Dave Love <fx@gnu.org>
parents:
diff changeset
925
Dave Love <fx@gnu.org>
parents:
diff changeset
926 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
927 When you write the fix, keep in mind that we can't install a change that
Dave Love <fx@gnu.org>
parents:
diff changeset
928 would break other systems. Please think about what effect your change
Dave Love <fx@gnu.org>
parents:
diff changeset
929 will have if compiled on another type of system.
Dave Love <fx@gnu.org>
parents:
diff changeset
930
Dave Love <fx@gnu.org>
parents:
diff changeset
931 Sometimes people send fixes that @emph{might} be an improvement in
Dave Love <fx@gnu.org>
parents:
diff changeset
932 general---but it is hard to be sure of this. It's hard to install
Dave Love <fx@gnu.org>
parents:
diff changeset
933 such changes because we have to study them very carefully. Of course,
Dave Love <fx@gnu.org>
parents:
diff changeset
934 a good explanation of the reasoning by which you concluded the change
Dave Love <fx@gnu.org>
parents:
diff changeset
935 was correct can help convince us.
Dave Love <fx@gnu.org>
parents:
diff changeset
936
Dave Love <fx@gnu.org>
parents:
diff changeset
937 The safest changes are changes to the configuration files for a
Dave Love <fx@gnu.org>
parents:
diff changeset
938 particular machine. These are safe because they can't create new bugs
Dave Love <fx@gnu.org>
parents:
diff changeset
939 on other machines.
Dave Love <fx@gnu.org>
parents:
diff changeset
940
Dave Love <fx@gnu.org>
parents:
diff changeset
941 Please help us keep up with the workload by designing the patch in a
Dave Love <fx@gnu.org>
parents:
diff changeset
942 form that is clearly safe to install.
Dave Love <fx@gnu.org>
parents:
diff changeset
943 @end itemize
Dave Love <fx@gnu.org>
parents:
diff changeset
944
Dave Love <fx@gnu.org>
parents:
diff changeset
945 @node Contributing, Service, Bugs, Top
Dave Love <fx@gnu.org>
parents:
diff changeset
946 @section Contributing to Emacs Development
Dave Love <fx@gnu.org>
parents:
diff changeset
947
Dave Love <fx@gnu.org>
parents:
diff changeset
948 If you would like to help pretest Emacs releases to assure they work
Dave Love <fx@gnu.org>
parents:
diff changeset
949 well, or if you would like to work on improving Emacs, please contact
29107
203ba1f77b7b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 27729
diff changeset
950 the maintainers at @email{bug-gnu-emacs@@gnu.org}. A pretester
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
951 should be prepared to investigate bugs as well as report them. If you'd
Dave Love <fx@gnu.org>
parents:
diff changeset
952 like to work on improving Emacs, please ask for suggested projects or
Dave Love <fx@gnu.org>
parents:
diff changeset
953 suggest your own ideas.
Dave Love <fx@gnu.org>
parents:
diff changeset
954
Dave Love <fx@gnu.org>
parents:
diff changeset
955 If you have already written an improvement, please tell us about it. If
Dave Love <fx@gnu.org>
parents:
diff changeset
956 you have not yet started work, it is useful to contact
29107
203ba1f77b7b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 27729
diff changeset
957 @email{bug-gnu-emacs@@gnu.org} before you start; it might be
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
958 possible to suggest ways to make your extension fit in better with the
Dave Love <fx@gnu.org>
parents:
diff changeset
959 rest of Emacs.
Dave Love <fx@gnu.org>
parents:
diff changeset
960
Dave Love <fx@gnu.org>
parents:
diff changeset
961 @node Service, Command Arguments, Contributing, Top
Dave Love <fx@gnu.org>
parents:
diff changeset
962 @section How To Get Help with GNU Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
963
Dave Love <fx@gnu.org>
parents:
diff changeset
964 If you need help installing, using or changing GNU Emacs, there are two
Dave Love <fx@gnu.org>
parents:
diff changeset
965 ways to find it:
Dave Love <fx@gnu.org>
parents:
diff changeset
966
Dave Love <fx@gnu.org>
parents:
diff changeset
967 @itemize @bullet
Dave Love <fx@gnu.org>
parents:
diff changeset
968 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
969 Send a message to the mailing list
29107
203ba1f77b7b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 27729
diff changeset
970 @email{help-gnu-emacs@@gnu.org}, or post your request on
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
971 newsgroup @code{gnu.emacs.help}. (This mailing list and newsgroup
Dave Love <fx@gnu.org>
parents:
diff changeset
972 interconnect, so it does not matter which one you use.)
Dave Love <fx@gnu.org>
parents:
diff changeset
973
Dave Love <fx@gnu.org>
parents:
diff changeset
974 @item
Dave Love <fx@gnu.org>
parents:
diff changeset
975 Look in the service directory for someone who might help you for a fee.
Dave Love <fx@gnu.org>
parents:
diff changeset
976 The service directory is found in the file named @file{etc/SERVICE} in the
Dave Love <fx@gnu.org>
parents:
diff changeset
977 Emacs distribution.
Dave Love <fx@gnu.org>
parents:
diff changeset
978 @end itemize