123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- @iftex
- @chapter Correcting Mistakes (Yours or Emacs's)
- If you type an Emacs command you did not intend, the results are often
- mysterious. This chapter discusses how you can undo your mistake or
- recover from a mysterious situation. Emacs bugs and system crashes are
- also considered.
- @end iftex
- @node Quitting, Lossage, Customization, Top
- @section Quitting and Aborting
- @cindex quitting
- @table @kbd
- @item C-g
- Quit. Cancel running or partially typed command.
- @item C-]
- Abort innermost recursive editing level and cancel the command which
- invoked it (@code{abort-recursive-edit}).
- @item M-x top-level
- Abort all recursive editing levels that are currently executing.
- @item C-x u
- Cancel an already-executed command, usually (@code{undo}).
- @end table
- There are two ways of cancelling commands which are not finished
- executing: @dfn{quitting} with @kbd{C-g}, and @dfn{aborting} with @kbd{C-]}
- or @kbd{M-x top-level}. Quitting is cancelling a partially typed command
- or one which is already running. Aborting is getting out of a recursive
- editing level and cancelling the command that invoked the recursive edit.
- @cindex quitting
- @kindex C-g
- Quitting with @kbd{C-g} is used for getting rid of a partially typed
- command or a numeric argument that you don't want. It also stops a
- running command in the middle in a relatively safe way, so you can use
- it if you accidentally start executing a command that takes a long
- time. In particular, it is safe to quit out of killing; either your
- text will @var{all} still be there, or it will @var{all} be in the kill
- ring (or maybe both). Quitting an incremental search does special
- things documented under searching; in general, it may take two
- successive @kbd{C-g} characters to get out of a search. @kbd{C-g} works
- by setting the variable @code{quit-flag} to @code{t} the instant
- @kbd{C-g} is typed; Emacs Lisp checks this variable frequently and quits
- if it is non-@code{nil}. @kbd{C-g} is only actually executed as a
- command if it is typed while Emacs is waiting for input.
- If you quit twice in a row before the first @kbd{C-g} is recognized, you
- activate the ``emergency escape'' feature and return to the shell.
- @xref{Emergency Escape}.
- @cindex recursive editing level
- @cindex editing level, recursive
- @cindex aborting
- @findex abort-recursive-edit
- @kindex C-]
- You can use @kbd{C-]} (@code{abort-recursive-edit}) to get out
- of a recursive editing level and cancel the command which invoked it.
- Quitting with @kbd{C-g} does not do this, and could not do this because it
- is used to cancel a partially typed command @i{within} the recursive
- editing level. Both operations are useful. For example, if you are in the
- Emacs debugger (@pxref{Lisp Debug}) and have typed @kbd{C-u 8} to enter a
- numeric argument, you can cancel that argument with @kbd{C-g} and remain in
- the debugger.
- @findex top-level
- The command @kbd{M-x top-level} is equivalent to ``enough'' @kbd{C-]}
- commands to get you out of all the levels of recursive edits that you are
- in. @kbd{C-]} only gets you out one level at a time, but @kbd{M-x top-level}
- goes out all levels at once. Both @kbd{C-]} and @kbd{M-x top-level} are
- like all other commands and unlike @kbd{C-g} in that they are effective
- only when Emacs is ready for a command. @kbd{C-]} is an ordinary key and
- has its meaning only because of its binding in the keymap.
- @xref{Recursive Edit}.
- @kbd{C-x u} (@code{undo}) is not strictly speaking a way of cancelling a
- command, but you can think of it as cancelling a command already finished
- executing. @xref{Undo}.
- @node Lossage, Bugs, Quitting, Top
- @section Dealing With Emacs Trouble
- This section describes various conditions in which Emacs fails to work,
- and how to recognize them and correct them.
- @menu
- * Stuck Recursive:: `[...]' in mode line around the parentheses.
- * Screen Garbled:: Garbage on the screen.
- * Text Garbled:: Garbage in the text.
- * Unasked-for Search:: Spontaneous entry to incremental search.
- * Emergency Escape:: Emergency escape---
- What to do if Emacs stops responding.
- * Total Frustration:: When you are at your wits' end.
- @end menu
- @node Stuck Recursive, Screen Garbled, Lossage, Lossage
- @subsection Recursive Editing Levels
- Recursive editing levels are important and useful features of Emacs, but
- they can seem like malfunctions to the user who does not understand them.
- If the mode line has square brackets @samp{[@dots{}]} around the parentheses
- that contain the names of the major and minor modes, you have entered a
- recursive editing level. If you did not do this on purpose, or if you
- don't understand what that means, you should just get out of the recursive
- editing level. To do so, type @kbd{M-x top-level}. This is called getting
- back to top level. @xref{Recursive Edit}.
- @node Screen Garbled, Text Garbled, Stuck Recursive, Lossage
- @subsection Garbage on the Screen
- If the data on the screen looks wrong, the first thing to do is see
- whether the text is actually wrong. Type @kbd{C-l}, to redisplay the
- entire screen. If the text appears correct after this, the problem was
- entirely in the previous screen update.
- Display updating problems often result from an incorrect termcap entry
- for the terminal you are using. The file @file{etc/TERMS} in the Emacs
- distribution gives the fixes for known problems of this sort.
- @file{INSTALL} contains general advice for these problems in one of its
- sections. Very likely there is simply insufficient padding for certain
- display operations. To investigate the possibility that you have this
- sort of problem, try Emacs on another terminal made by a different
- manufacturer. If problems happen frequently on one kind of terminal but
- not another kind, the real problem is likely to be a bad termcap entry,
- though it could also be due to a bug in Emacs that appears for terminals
- that have or lack specific features.
- @node Text Garbled, Unasked-for Search, Screen Garbled, Lossage
- @subsection Garbage in the Text
- If @kbd{C-l} shows that the text is wrong, try undoing the changes to it
- using @kbd{C-x u} until it gets back to a state you consider correct. Also
- try @kbd{C-h l} to find out what command you typed to produce the observed
- results.
- If a large portion of text appears to be missing at the beginning or
- end of the buffer, check for the word @samp{Narrow} in the mode line.
- If it appears, the text is still present, but marked off-limits.
- To make it visible again, type @kbd{C-x n w}. @xref{Narrowing}.
- @node Unasked-for Search, Emergency Escape, Text Garbled, Lossage
- @subsection Spontaneous Entry to Incremental Search
- If Emacs spontaneously displays @samp{I-search:} at the bottom of the
- screen, it means that the terminal is sending @kbd{C-s} and @kbd{C-q}
- according to the poorly designed xon/xoff ``flow control'' protocol. You
- should try to prevent this by putting the terminal in a mode where it will
- not use flow control, or by giving it enough padding that it will never send a
- @kbd{C-s}. If that cannot be done, you must tell Emacs to expect flow
- control to be used, until you can get a properly designed terminal.
- Information on how to do these things can be found in the file
- @file{INSTALL} in the Emacs distribution.
- @node Emergency Escape, Total Frustration, Unasked-for Search, Lossage
- @subsection Emergency Escape
- Because at times there have been bugs causing Emacs to loop without
- checking @code{quit-flag}, a special feature causes Emacs to be suspended
- immediately if you type a second @kbd{C-g} while the flag is already set,
- so you can always get out of XEmacs. Normally Emacs recognizes and
- clears @code{quit-flag} (and quits!) quickly enough to prevent this from
- happening.
- When you resume Emacs after a suspension caused by multiple @kbd{C-g}, it
- asks two questions before going back to what it had been doing:
- @example
- Auto-save? (y or n)
- Abort (and dump core)? (y or n)
- @end example
- @noindent
- Answer each one with @kbd{y} or @kbd{n} followed by @key{RET}.
- Saying @kbd{y} to @samp{Auto-save?} causes immediate auto-saving of all
- modified buffers in which auto-saving is enabled.
- Saying @kbd{y} to @samp{Abort (and dump core)?} causes an illegal
- instruction to be executed, dumping core. This is to enable a wizard to
- figure out why Emacs was failing to quit in the first place. Execution
- does not continue after a core dump. If you answer @kbd{n}, execution
- does continue. With luck, Emacs will ultimately check
- @code{quit-flag} and quit normally. If not, and you type another
- @kbd{C-g}, it is suspended again.
- If Emacs is not really hung, but is just being slow, you may invoke
- the double @kbd{C-g} feature without really meaning to. In that case,
- simply resume and answer @kbd{n} to both questions, and you will arrive
- at your former state. Presumably the quit you requested will happen
- soon.
- The double-@kbd{C-g} feature may be turned off when Emacs is running under
- a window system, since the window system always enables you to kill Emacs
- or to create another window and run another program.
- @node Total Frustration,, Emergency Escape, Lossage
- @subsection Help for Total Frustration
- @cindex Eliza
- @cindex doctor
- If using Emacs (or something else) becomes terribly frustrating and none
- of the techniques described above solve the problem, Emacs can still help
- you.
- First, if the Emacs you are using is not responding to commands, type
- @kbd{C-g C-g} to get out of it and then start a new one.
- @findex doctor
- Second, type @kbd{M-x doctor @key{RET}}.
- The doctor will make you feel better. Each time you say something to
- the doctor, you must end it by typing @key{RET} @key{RET}. This lets the
- doctor know you are finished.
- @node Bugs,, Lossage, Top
- @section Reporting Bugs
- @cindex bugs
- Sometimes you will encounter a bug in Emacs. Although we cannot promise
- we can or will fix the bug, and we might not even agree that it is a bug,
- we want to hear about bugs you encounter in case we do want to fix them.
- To make it possible for us to fix a bug, you must report it. In order
- to do so effectively, you must know when and how to do it.
- @subsection When Is There a Bug
- If Emacs executes an illegal instruction, or dies with an operating
- system error message that indicates a problem in the program (as opposed to
- something like ``disk full''), then it is certainly a bug.
- If Emacs updates the display in a way that does not correspond to what is
- in the buffer, then it is certainly a bug. If a command seems to do the
- wrong thing but the problem corrects itself if you type @kbd{C-l}, it is a
- case of incorrect display updating.
- Taking forever to complete a command can be a bug, but you must make
- certain that it was really Emacs's fault. Some commands simply take a long
- time. Type @kbd{C-g} and then @kbd{C-h l} to see whether the input Emacs
- received was what you intended to type; if the input was such that you
- @var{know} it should have been processed quickly, report a bug. If you
- don't know whether the command should take a long time, find out by looking
- in the manual or by asking for assistance.
- If a command you are familiar with causes an Emacs error message in a
- case where its usual definition ought to be reasonable, it is probably a
- bug.
- If a command does the wrong thing, that is a bug. But be sure you know
- for certain what it ought to have done. If you aren't familiar with the
- command, or don't know for certain how the command is supposed to work,
- then it might actually be working right. Rather than jumping to
- conclusions, show the problem to someone who knows for certain.
- Finally, a command's intended definition may not be best for editing
- with. This is a very important sort of problem, but it is also a matter of
- judgment. Also, it is easy to come to such a conclusion out of ignorance
- of some of the existing features. It is probably best not to complain
- about such a problem until you have checked the documentation in the usual
- ways, feel confident that you understand it, and know for certain that what
- you want is not available. If you are not sure what the command is
- supposed to do after a careful reading of the manual, check the index and
- glossary for any terms that may be unclear. If you still do not
- understand, this indicates a bug in the manual. The manual's job is to
- make everything clear. It is just as important to report documentation
- bugs as program bugs.
- If the online documentation string of a function or variable disagrees
- with the manual, one of them must be wrong, so report the bug.
- @subsection How to Report a Bug
- @findex emacs-version
- When you decide that there is a bug, it is important to report it and to
- report it in a way which is useful. What is most useful is an exact
- description of what commands you type, starting with the shell command to
- run Emacs, until the problem happens. Always include the version number
- of Emacs that you are using; type @kbd{M-x emacs-version} to print this.
- The most important principle in reporting a bug is to report @var{facts},
- not hypotheses or categorizations. It is always easier to report the facts,
- but people seem to prefer to strain to posit explanations and report
- them instead. If the explanations are based on guesses about how Emacs is
- implemented, they will be useless; we will have to try to figure out what
- the facts must have been to lead to such speculations. Sometimes this is
- impossible. But in any case, it is unnecessary work for us.
- For example, suppose that you type @kbd{C-x C-f /glorp/baz.ugh
- @key{RET}}, visiting a file which (you know) happens to be rather large,
- and Emacs prints out @samp{I feel pretty today}. The best way to report
- the bug is with a sentence like the preceding one, because it gives all the
- facts and nothing but the facts.
- Do not assume that the problem is due to the size of the file and say,
- ``When I visit a large file, Emacs prints out @samp{I feel pretty today}.''
- This is what we mean by ``guessing explanations''. The problem is just as
- likely to be due to the fact that there is a @samp{z} in the file name. If
- this is so, then when we got your report, we would try out the problem with
- some ``large file'', probably with no @samp{z} in its name, and not find
- anything wrong. There is no way in the world that we could guess that we
- should try visiting a file with a @samp{z} in its name.
- Alternatively, the problem might be due to the fact that the file starts
- with exactly 25 spaces. For this reason, you should make sure that you
- inform us of the exact contents of any file that is needed to reproduce the
- bug. What if the problem only occurs when you have typed the @kbd{C-x a l}
- command previously? This is why we ask you to give the exact sequence of
- characters you typed since starting to use Emacs.
- You should not even say ``visit a file'' instead of @kbd{C-x C-f} unless
- you @i{know} that it makes no difference which visiting command is used.
- Similarly, rather than saying ``if I have three characters on the line,''
- say ``after I type @kbd{@key{RET} A B C @key{RET} C-p},'' if that is
- the way you entered the text.@refill
- If you are not in Fundamental mode when the problem occurs, you should
- say what mode you are in.
- If the manifestation of the bug is an Emacs error message, it is
- important to report not just the text of the error message but a backtrace
- showing how the Lisp program in Emacs arrived at the error. To make the
- backtrace, you must execute the Lisp expression
- @code{(setq @w{debug-on-error t})} before the error happens (that is to
- say, you must execute that expression and then make the bug happen). This
- causes the Lisp debugger to run (@pxref{Lisp Debug}). The debugger's
- backtrace can be copied as text into the bug report. This use of the
- debugger is possible only if you know how to make the bug happen again. Do
- note the error message the first time the bug happens, so if you can't make
- it happen again, you can report at least that.
- Check whether any programs you have loaded into the Lisp world, including
- your init file, set any variables that may affect the functioning of
- Emacs. @xref{Init File}. Also, see whether the problem happens in a
- freshly started Emacs without loading your init file (start Emacs with
- the @code{-q} switch to prevent loading the init file). If the problem
- does @var{not} occur then, it is essential that we know the contents of
- any programs that you must load into the Lisp world in order to cause
- the problem to occur.
- If the problem does depend on an init file or other Lisp programs that
- are not part of the standard Emacs system, then you should make sure it is
- not a bug in those programs by complaining to their maintainers first.
- After they verify that they are using Emacs in a way that is supposed to
- work, they should report the bug.
- If you can tell us a way to cause the problem without visiting any files,
- please do so. This makes it much easier to debug. If you do need files,
- make sure you arrange for us to see their exact contents. For example, it
- can often matter whether there are spaces at the ends of lines, or a
- newline after the last line in the buffer (nothing ought to care whether
- the last line is terminated, but tell that to the bugs).
- @findex open-dribble-file
- @cindex dribble file
- The easy way to record the input to Emacs precisely is to write a
- dribble file; execute the Lisp expression:
- @example
- (open-dribble-file "~/dribble")
- @end example
- @noindent
- using @kbd{Meta-@key{ESC}} or from the @samp{*scratch*} buffer just after starting
- Emacs. From then on, all Emacs input will be written in the specified
- dribble file until the Emacs process is killed.
- @findex open-termscript
- @cindex termscript file
- For possible display bugs, it is important to report the terminal type
- (the value of environment variable @code{TERM}), the complete termcap entry
- for the terminal from @file{/etc/termcap} (since that file is not identical
- on all machines), and the output that Emacs actually sent to the terminal.
- The way to collect this output is to execute the Lisp expression:
- @example
- (open-termscript "~/termscript")
- @end example
- @noindent using @kbd{Meta-@key{ESC}} or from the @samp{*scratch*} buffer
- just after starting Emacs. From then on, all output from Emacs to the
- terminal will be written in the specified termscript file as well, until
- the Emacs process is killed. If the problem happens when Emacs starts
- up, put this expression into your init file so that the termscript file
- will be open when Emacs displays the screen for the first time.
- @xref{Init File}. Be warned: it is often difficult, and sometimes
- impossible, to fix a terminal-dependent bug without access to a terminal
- of the type that stimulates the bug.@refill
- The newsgroup @samp{comp.emacs.xemacs} may be used for bug reports,
- other discussions and requests for assistance.
- If you don't have access to this newgroup, you can subscribe to the
- mailing list version: the newsgroup is bidirectionally gatewayed into
- the mailing list @samp{xemacs@@xemacs.org}.
- To be added or removed from this mailing list, send mail to
- @samp{xemacs-request@@xemacs.org}. Do not send requests for addition
- to the mailing list itself.
- The mailing lists and newsgroups are archived on our anonymous FTP server,
- @samp{ftp.xemacs.org}, and at various other archive sites around the net. You
- should also check the @samp{FAQ} in @samp{/pub/xemacs} on our anonymous
- FTP server. It provides some introductory information and help for initial
- configuration problems.
|