]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve "Bugs" in the Emacs manual
authorEli Zaretskii <eliz@gnu.org>
Thu, 23 Mar 2023 13:33:04 +0000 (15:33 +0200)
committerEli Zaretskii <eliz@gnu.org>
Thu, 23 Mar 2023 13:33:04 +0000 (15:33 +0200)
* doc/emacs/trouble.texi (Bugs, Known Problems)
(Understanding Bug Reporting, Checklist, Sending Patches)
(Contributing, Coding Standards): Improve wording, structure,
markup, and indexing.  (Bug#62320)

doc/emacs/trouble.texi

index e168514fcb9cd5c69ad559200942c221e4ad1d14..ded9d02cf542fe33739399feeb6860562c5c0c82 100644 (file)
@@ -496,8 +496,43 @@ Customization}.
   If you think you have found a bug in Emacs, please report it.  We
 cannot promise to fix it, or always to agree that it is a bug, but we
 certainly want to hear about it.  The same applies for new features
-you would like to see added.  The following sections will help you to
-construct an effective bug report.
+you would like to see added.  This section will help you to determine
+whether you found a bug, and if so, construct an effective bug report.
+
+The general procedure when you find something that could be a bug is
+as follows:
+
+@itemize @bullet
+@item
+See if what you found is a known problem or a bug that was already
+reported and/or fixed.  @xref{Known Problems}, where you will find how
+to look for known problems and bugs.
+
+@item
+If you are unsure whether the behavior you see is a bug, see @ref{Bug
+Criteria}, which tells what we consider as clear bugs in Emacs.
+
+@item
+Once you decide you found a bug, see @ref{Understanding Bug
+Reporting}, which helps you in describing what you see in the most
+efficient manner, making our job of reproducing the issue and
+investigating it easier.
+
+@item
+Next, see @ref{Checklist, Checklist for Bug Reports}, where we
+describe in detail how to submit a bug report and what information to
+include in it.  In a nutshell, you submit a bug report via electronic
+mail using the Emacs command @code{report-emacs-bug}, which assists
+you in doing so.  Submitting a bug report starts the process of
+investigating and fixing the bug, where you will receive copies of
+email messages discussing the bug, in which we might ask you to
+provide more information, test possible fixes, etc.
+
+@item
+Finally, if you want to propose specific changes to Emacs, whether to
+fix a bug, add a new feature, or improve our documentation, please see
+@ref{Sending Patches}, for details about submitting such changes.
+@end itemize
 
 @menu
 * Known Problems::               How to read about known problems and bugs.
@@ -509,9 +544,10 @@ construct an effective bug report.
 
 @node Known Problems
 @subsection Reading Existing Bug Reports and Known Problems
+@cindex known bugs and problems
 
-  Before reporting a bug, if at all possible please check to see if it
-is already known about.  Indeed, it may already have been fixed in a
+  Before reporting a bug, if at all possible, please check to see if
+we already know about it.  Indeed, it may already have been fixed in a
 later release of Emacs, or in the development version.  Here is a list
 of the main places you can read about known issues:
 
@@ -519,20 +555,26 @@ of the main places you can read about known issues:
 @item
 The @file{etc/PROBLEMS} file; type @kbd{C-h C-p} to read it.  This
 file contains a list of particularly well-known issues that have been
-encountered in compiling, installing and running Emacs.  Often, there
-are suggestions for workarounds and solutions.
+encountered in compiling, installing and running Emacs, with special
+emphasis on issues caused by other software that cannot be easily
+solved in Emacs.  Often, you will find there suggestions for
+workarounds and solutions.
 
 @cindex bug tracker
+@cindex issue tracker
+@cindex search known bugs
 @item
-The GNU Bug Tracker at @url{https://debbugs.gnu.org}.  Emacs bugs are
-filed in the tracker under the @samp{emacs} package.  The tracker
-records information about the status of each bug, the initial bug
-report, and the follow-up messages by the bug reporter and Emacs
-developers.  You can search for bugs by subject, severity, and other
-criteria.
+The GNU Bug Tracker at @url{https://debbugs.gnu.org}.  Emacs bugs and
+issues are filed in the tracker under the @samp{emacs} package.  The
+tracker records information about the status of each bug, the initial
+bug report, and the follow-up messages by the bug reporter and Emacs
+developers who participate in discussing and fixing the bug.  You can
+search for bugs by subject, severity, and other criteria.  For more
+complex search criteria, use
+@url{https://debbugs.gnu.org/cgi/search.cgi}.
 
 @cindex debbugs package
-Instead of browsing the bug tracker as a webpage, you can browse it
+Instead of browsing the bug tracker as a web page, you can browse it
 from Emacs using the @code{debbugs} package, which can be downloaded
 via the Package Menu (@pxref{Packages}).  This package provides the
 command @kbd{M-x debbugs-gnu} to list bugs, and @kbd{M-x
@@ -558,14 +600,14 @@ used, and is mainly of historical interest.  At one time, it was used
 for bug reports in development (i.e., not yet released) versions of
 Emacs.  You can read the archives for 2003 to mid 2007 at
 @url{https://lists.gnu.org/r/emacs-pretest-bug/}.  Nowadays,
-it is an alias for @samp{bug-gnu-emacs}.
+email messages sent to this list are redirected to
+@samp{bug-gnu-emacs}.
 
 @item
 The @samp{emacs-devel} mailing list.  Sometimes people report bugs to
 this mailing list.  This is not the main purpose of the list, however,
 and it is much better to send bug reports to the bug list.  You should
 not feel obliged to read this list before reporting a bug.
-
 @end itemize
 
 
@@ -628,20 +670,21 @@ to begin by reporting them to the package developers.
 
 @node Understanding Bug Reporting
 @subsection Understanding Bug Reporting
-@cindex bug reporting
+@cindex bug reporting, principles
 @cindex report an Emacs bug, how to
 
-  When you decide that there is a bug, it is important to report it
+  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.
+command to run Emacs, until the problem happens, and the effects
+produced by typing those commands.
 
   The most important principle in reporting a bug is to report
 @emph{facts}.  Hypotheses and verbal descriptions are no substitute
 for the detailed raw data.  Reporting the facts is straightforward,
 but many people strain to posit explanations and report them instead
 of the facts.  If the explanations are based on guesses about how
-Emacs is implemented, they will be useless; meanwhile, lacking the
+Emacs is implemented, they night not be useful; meanwhile, lacking the
 facts, we will have no real information about the bug.  If you want to
 actually @emph{debug} the problem, and report explanations that are
 more than guesses, that is useful---but please include the raw facts
@@ -661,19 +704,23 @@ problem.  There is no way we could guess that we should try visiting a
 file with a @samp{z} in its name.
 
   You should not even say ``visit a file'' instead of @kbd{C-x C-f}.
-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.
+That's because a file can be visited in more than one way, and there's
+no certainty that all of them reproduce the problem.  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---that is, tell us about the text which in
+your case produced the problem.
 
   If possible, try quickly to reproduce the bug by invoking Emacs with
 @command{emacs -Q} (so that Emacs starts with no initial
 customizations; @pxref{Initial Options}), and repeating the steps that
 you took to trigger the bug.  If you can reproduce the bug this way,
-that rules out bugs in your personal customizations.  Then your bug
-report should begin by stating that you started Emacs with
-@command{emacs -Q}, followed by the exact sequence of steps for
-reproducing the bug.  If possible, inform us of the exact contents of
-any file that is needed to reproduce the bug.
+that rules out bugs in your personal customizations and makes the bug
+much easier to reproduce.  Then your bug report should begin by
+stating that you started Emacs with @command{emacs -Q}, followed by
+the exact sequence of steps for reproducing the bug.  If possible,
+inform us of the exact contents of any file that is needed to
+reproduce the bug.
 
   Some bugs are not reproducible from @command{emacs -Q}; some are not
 easily reproducible at all.  In that case, you should report what you
@@ -687,6 +734,7 @@ separate bug report for each.
 @subsection Checklist for Bug Reports
 @cindex checklist before reporting a bug
 @cindex bug reporting, checklist
+@cindex report bugs in Emacs
 
   Before reporting a bug, first try to see if the problem has already
 been reported (@pxref{Known Problems}).
@@ -706,7 +754,7 @@ information; you should still read and follow the guidelines below, so
 you can enter the other crucial information by hand before you send
 the message.  You may feel that some of the information inserted by
 @kbd{M-x report-emacs-bug} is not relevant, but unless you are
-absolutely sure it is best to leave it, so that the developers can
+absolutely sure, it is best to leave it, so that the developers can
 decide for themselves.
 
 When you have finished writing your report, type @kbd{C-c C-c} and it
@@ -721,24 +769,26 @@ If you cannot send mail from inside Emacs, you can copy the
 text of your report to your normal mail client (if your system
 supports it, you can type @kbd{C-c M-i} to have Emacs do this for you)
 and send it to that address.  Or you can simply send an email to that
-address describing the problem.
+address describing the problem, including the necessary information
+mentioned below.
 
 If you want to submit code to Emacs (to fix a problem or implement a
 new feature), the easiest way to do this is to send a patch to the
-Emacs issue tracker.  This is done with the @kbd{M-x
-submit-emacs-patch} command, and works much the same as when reporting
-bugs.
+Emacs issue tracker.  Use the @kbd{M-x submit-emacs-patch} command for
+that, which works much the same as when reporting bugs; @pxref{Sending
+Patches}.
 
 In any case, your report will be sent to the @samp{bug-gnu-emacs}
 mailing list, and stored in the GNU Bug Tracker at
 @url{https://debbugs.gnu.org}.  Please include a valid reply email
 address, in case we need to ask you for more information about your
 report.  Submissions are moderated, so there may be a delay before
-your report appears.
+your report actually appears on the tracker.
 
 You do not need to know how the GNU Bug Tracker works in order to
-report a bug, but if you want to, you can read the tracker's online
-documentation to see the various features you can use.
+report a bug, but if you want to, you can read the tracker's
+@uref{https://debbugs.gnu.org/Advanced.html, online documentation} to
+see the various features you can use.
 
 All mail sent to the @samp{bug-gnu-emacs} mailing list is also
 gatewayed to the @samp{gnu.emacs.bug} newsgroup.  The reverse is also
@@ -749,55 +799,43 @@ tracker.
 
 If your data is more than 500,000 bytes, please don't include it
 directly in the bug report; instead, offer to send it on request, or
-make it available online and say where.
+make it available online and say where.  Large attachments are best
+sent compressed.
 
 The GNU Bug Tracker will assign a bug number to your report; please
-use it in the following discussions.
+use it in the following discussions, keeping the bug address in the
+list of recipients, so that the bug discussion is recorded by the
+tracker.  The bug address will look like
+@samp{@var{nnnnn}@@debbugs.gnu.org}, where @var{nnnnn} is the bug
+number.
 
   To enable maintainers to investigate a bug, your report
 should include all these things:
 
 @itemize @bullet
 @item
-The version number of Emacs.  Without this, we won't know whether there is any
-point in looking for the bug in the current version of GNU Emacs.
-
-@findex emacs-version
-@kbd{M-x report-emacs-bug} includes this information automatically,
-but if you are not using that command for your report you can get the
-version number by typing @kbd{M-x emacs-version @key{RET}}.  If that
-command does not work, you probably have something other than GNU
-Emacs, so you will have to report the bug somewhere else.
-
-@item
-The type of machine you are using, and the operating system name and
-version number (again, automatically included by @w{@kbd{M-x
-report-emacs-bug}}).  @w{@kbd{M-x emacs-version @key{RET}}} provides
-this information too.  Copy its output from the @file{*Messages*}
-buffer, so that you get it all and get it accurately, or use
-@w{@kbd{C-u M-x emacs-version @key{RET}}} to insert the version
-information into the current buffer.
-
-@item
-The operands given to the @code{configure} command when Emacs was
-installed (automatically included by @kbd{M-x report-emacs-bug}).
-
-@item
-A complete list of any modifications you have made to the Emacs source.
-(We may not have time to investigate the bug unless it happens in an
-unmodified Emacs.  But if you've made modifications and you don't tell
-us, you are sending us on a wild goose chase.)
+A description of what behavior you observe that you believe is
+incorrect.  For example, ``The Emacs process gets a fatal signal'', or,
+``The resulting text is as follows, which I think is wrong.''
 
-Be precise about these changes.  A description in English is not
-enough---send a unified context diff for them.
+Of course, if the bug is that Emacs gets a fatal signal, then one can't
+miss it.  But if the bug is incorrect text, the maintainer might fail to
+notice what is wrong.  Why leave it to chance?
 
-Adding files of your own, or porting to another machine, is a
-modification of the source.
+Even if the problem you experience is a fatal signal, you should still
+say so explicitly.  Suppose something strange is going on, such as, your
+copy of the source is out of sync, or you have encountered a bug in the
+C library on your system.  (This has happened!)  Your copy might crash
+and the copy here might not.  If you @emph{said} to expect a crash, then
+when Emacs here fails to crash, we would know that the bug was not
+happening.  If you don't say to expect a crash, then we would not know
+whether the bug was happening---we would not be able to draw any
+conclusion from our observations.
 
-@item
-Details of any other deviations from the standard procedure for installing
-GNU Emacs.
+Usually, description of the behavior and of the way to reproduce the
+problem needs to specify one or more of the following aspects:
 
+@itemize @minus
 @item
 The complete text of any files needed to reproduce the bug.
 
@@ -824,6 +862,47 @@ file until the Emacs process is killed.  Be aware that sensitive
 information (such as passwords) may end up recorded in the dribble
 file.
 
+@item
+If the bug is that the Emacs Manual or the Emacs Lisp Reference Manual
+fails to describe the actual behavior of Emacs, or that the text is
+confusing, copy in the text from the manual which you think is
+at fault.  If the section is small, just the section name is enough.
+
+@item
+If the manifestation of the bug is an Emacs error message, it is
+important to report the precise text of the error message, and a
+backtrace showing how the Lisp program in Emacs arrived at the error.
+
+To get the error message text accurately, copy it from the
+@file{*Messages*} buffer into the bug report.  Copy all of it, not just
+part.
+
+@item
+Check whether any programs you have loaded into the Lisp world,
+including your initialization file, set any variables that may affect
+the functioning of Emacs.  Also, see whether the problem happens in a
+freshly started Emacs without loading your initialization file (start
+Emacs with the @code{-Q} switch to prevent loading the init files).
+If the problem does @emph{not} occur then, you must report the precise
+contents of any programs that you must load into the Lisp world in
+order to cause the problem to occur.
+
+@item
+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.
+
+@item
+If you wish to mention something in the GNU Emacs source, show the line
+of code with a few lines of context.  Don't just give a line number.
+
+The line numbers in the development sources don't match those in your
+sources.  It would take extra work for the maintainers to determine what
+code is in your version at a given line number, and we could not be
+certain.
+
 @item
 @findex open-termscript
 @cindex termscript file
@@ -834,27 +913,70 @@ 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 the terminal output is to execute the Lisp expression
+The way to collect the terminal output is to invoke the command
+@kbd{M-x open-termscript} just after starting Emacs; it will prompt
+you for the name of the file where to record all terminal output until
+the Emacs process is killed.  If the problem happens when Emacs starts
+up, put the Lisp expression
 
 @example
 (open-termscript "~/termscript")
 @end example
 
 @noindent
-using @kbd{M-:} or from the @file{*scratch*} buffer just after
-starting Emacs.  From then on, Emacs copies all terminal output to 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 Emacs initialization file so that the termscript file will be
-open when Emacs displays the screen for the first time.
+into your Emacs initialization file so that the termscript file will
+be open when Emacs displays the screen for the first time.
 
 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.
+@end itemize
+
+@item
+The version number of Emacs.  Without this, we won't know whether there is any
+point in looking for the bug in the current version of GNU Emacs.
+
+@findex emacs-version
+@kbd{M-x report-emacs-bug} includes this information automatically,
+but if you are not using that command for your report you can get the
+version number by typing @kbd{M-x emacs-version @key{RET}}.  If that
+command does not work, you probably have something other than GNU
+Emacs, so you will have to report the bug somewhere else.
+
+@item
+The type of machine you are using, and the operating system name and
+version number (again, automatically included by @w{@kbd{M-x
+report-emacs-bug}}).  @w{@kbd{M-x emacs-version @key{RET}}} provides
+this information too.  Copy its output from the @file{*Messages*}
+buffer, so that you get it all and get it accurately, or use
+@w{@kbd{C-u M-x emacs-version @key{RET}}} to insert the version
+information into the current buffer.
+
+@item
+The command-line arguments given to the @code{configure} command when
+Emacs was built (automatically included by @kbd{M-x
+report-emacs-bug}).
+
+@item
+A complete list of any modifications you have made to the Emacs source.
+(We may not have time to investigate the bug unless it happens in an
+unmodified Emacs.  But if you've made modifications and you don't tell
+us, you are sending us on a wild goose chase.)
+
+Be precise about these changes.  A description in English is not
+enough---send a unified context diff for them.
+
+Adding files of your own, or porting to another machine, is a
+modification of the source.
+
+@item
+Details of any other deviations from the standard procedure for installing
+GNU Emacs.
 
 @item
 If non-@acronym{ASCII} text or internationalization is relevant, the locale that
-was current when you started Emacs.  On GNU/Linux and Unix systems, or
+was current when you started Emacs.   This is automatically included by @kbd{M-x
+report-emacs-bug}; alternatively, on GNU/Linux and Unix systems, or
 if you use a POSIX-style shell such as Bash, you can use this shell
 command to view the relevant values:
 
@@ -863,64 +985,102 @@ echo LC_ALL=$LC_ALL LC_COLLATE=$LC_COLLATE LC_CTYPE=$LC_CTYPE \
   LC_MESSAGES=$LC_MESSAGES LC_TIME=$LC_TIME LANG=$LANG
 @end smallexample
 
-Alternatively, use the @command{locale} command, if your system has it,
+You can also use the @command{locale} command, if your system has it,
 to display your locale settings.
+@end itemize
 
-You can use the @kbd{M-!} command to execute these commands from
-Emacs, and then copy the output from the @file{*Messages*} buffer into
-the bug report.  Alternatively, @kbd{M-x getenv @key{RET} LC_ALL
-@key{RET}} will display the value of @code{LC_ALL} in the echo area, and
-you can copy its output from the @file{*Messages*} buffer.
+Here are some things that are not necessary in a bug report:
 
+@itemize @bullet
 @item
-A description of what behavior you observe that you believe is
-incorrect.  For example, ``The Emacs process gets a fatal signal'', or,
-``The resulting text is as follows, which I think is wrong.''
+A description of the envelope of the bug---this is not necessary for a
+reproducible bug.
 
-Of course, if the bug is that Emacs gets a fatal signal, then one can't
-miss it.  But if the bug is incorrect text, the maintainer might fail to
-notice what is wrong.  Why leave it to chance?
+Often people who encounter a bug spend a lot of time investigating
+which changes to the input file will make the bug go away and which
+changes will not affect it.
 
-Even if the problem you experience is a fatal signal, you should still
-say so explicitly.  Suppose something strange is going on, such as, your
-copy of the source is out of sync, or you have encountered a bug in the
-C library on your system.  (This has happened!)  Your copy might crash
-and the copy here might not.  If you @emph{said} to expect a crash, then
-when Emacs here fails to crash, we would know that the bug was not
-happening.  If you don't say to expect a crash, then we would not know
-whether the bug was happening---we would not be able to draw any
-conclusion from our observations.
+This is often time-consuming and not very useful, because the way we
+will find the bug is by running a single example under the debugger
+with breakpoints, not by pure deduction from a series of examples.
+You might as well save time by not searching for additional examples.
+It is better to send the bug report right away, go back to editing,
+and find another bug to report.
+
+Of course, if you can find a simpler example to report @emph{instead} of
+the original one, that is a convenience.  Errors in the output will be
+easier to spot, running under the debugger will take less time, etc.
+
+However, simplification is not vital; if you can't do this or don't have
+time to try, please report the bug with your original test case.
 
 @item
-If the bug is that the Emacs Manual or the Emacs Lisp Reference Manual
-fails to describe the actual behavior of Emacs, or that the text is
-confusing, copy in the text from the manual which you think is
-at fault.  If the section is small, just the section name is enough.
+A core dump file.
+
+Debugging the core dump might be useful, but it can only be done on
+your machine, with your Emacs executable.  Therefore, sending the core
+dump file to the Emacs maintainers won't be useful.  Above all, don't
+include the core file in an email bug report!  Such a large message
+can be extremely inconvenient.
 
 @item
-If the manifestation of the bug is an Emacs error message, it is
-important to report the precise text of the error message, and a
-backtrace showing how the Lisp program in Emacs arrived at the error.
+A system-call trace of Emacs execution.
 
-To get the error message text accurately, copy it from the
-@file{*Messages*} buffer into the bug report.  Copy all of it, not just
-part.
+System-call traces are very useful for certain special kinds of
+debugging, but in most cases they give little useful information.  It is
+therefore strange that many people seem to think that @emph{the} way to
+report information about a crash is to send a system-call trace.  Perhaps
+this is a habit formed from experience debugging programs that don't
+have source code or debugging symbols.
+
+In most programs, a backtrace is normally far, far more informative than
+a system-call trace.  Even in Emacs, a simple backtrace is generally
+more informative, though to give full information you should supplement
+the backtrace by displaying variable values and printing them as Lisp
+objects with @code{pr} (see above).
+
+@item
+A patch for the bug.
+
+A patch for the bug is useful if it is a good one.  But don't omit the
+other information that a bug report needs, such as the test case, on
+the assumption that a patch is sufficient.  We might see problems with
+your patch and decide to fix the problem another way, or we might not
+understand it at all.  And if we can't understand what bug you are
+trying to fix, or why your patch should be an improvement, we mustn't
+install it.  @xref{Sending Patches}, for guidelines on how to make it
+easy for us to understand and install your patches.
+
+@item
+A guess about what the bug is or what it depends on.
+
+Such guesses are usually wrong.  Even experts can't guess right about
+such things without first using the debugger to find the facts.
+@end itemize
+
+If you are willing to debug Emacs and provide additional information
+about the bug, here is some useful advice:
 
 @findex toggle-debug-on-error
 @pindex Edebug
-To make a backtrace for the error, use @kbd{M-x toggle-debug-on-error}
-before the error happens (that is to say, you must give that command
-and then make the bug happen).  This causes the error to start the Lisp
-debugger, which shows you a backtrace.  Copy the text of the
-debugger's backtrace into the bug report.  @xref{Edebug,, Edebug,
-elisp, the Emacs Lisp Reference Manual}, for information on debugging
-Emacs Lisp programs with the Edebug package.
+@itemize
+@item
+If the bug manifests itself as an error message, try providing a Lisp
+backtrace for the error.  To make a backtrace for the error, use
+@kbd{M-x toggle-debug-on-error} before the error happens (that is to
+say, you must give that command and then make the bug happen).  This
+causes the error to start the Lisp debugger, which shows you a
+backtrace.  Copy the text of the debugger's backtrace into the bug
+report.  @xref{Edebug,, Edebug, elisp, the Emacs Lisp Reference
+Manual}, for information on debugging Emacs Lisp programs with the
+Edebug package.
 
 This use of the debugger is possible only if you know how to make the
 bug happen again.  If you can't make it happen again, at least copy
 the whole error message.
 
 @vindex debug-on-quit
+@item
 If Emacs appears to be stuck in an infinite loop or in a very long
 operation, typing @kbd{C-g} with the variable @code{debug-on-quit}
 non-@code{nil} will start the Lisp debugger and show a backtrace.
@@ -933,32 +1093,6 @@ If you cannot get Emacs to respond to @kbd{C-g} (e.g., because
 specified by @code{debug-on-event} (default SIGUSR2) from outside
 Emacs to cause it to enter the debugger.
 
-@item
-Check whether any programs you have loaded into the Lisp world,
-including your initialization file, set any variables that may affect
-the functioning of Emacs.  Also, see whether the problem happens in a
-freshly started Emacs without loading your initialization file (start
-Emacs with the @code{-Q} switch to prevent loading the init files).
-If the problem does @emph{not} occur then, you must report the precise
-contents of any programs that you must load into the Lisp world in
-order to cause the problem to occur.
-
-@item
-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.
-
-@item
-If you wish to mention something in the GNU Emacs source, show the line
-of code with a few lines of context.  Don't just give a line number.
-
-The line numbers in the development sources don't match those in your
-sources.  It would take extra work for the maintainers to determine what
-code is in your version at a given line number, and we could not be
-certain.
-
 @item
 Additional information from a C debugger such as GDB might enable
 someone to find a problem on a machine which he does not have available.
@@ -967,9 +1101,10 @@ very long, and using GDB is easy.  You can find the GDB distribution,
 including the GDB manual in online form, in most of the same places you
 can find the Emacs distribution.  To run Emacs under GDB, you should
 switch to the @file{src} subdirectory in which Emacs was compiled, then
-do @samp{gdb emacs}.  It is important for the directory @file{src} to be
+type @kbd{gdb ./emacs}.  It is important for the directory @file{src} to be
 current so that GDB will read the @file{.gdbinit} file in this
-directory.
+directory.  (You can also tell GDB to read that file from inside GDB,
+by typing @kbd{source ./.gdbinit}.)
 
 However, you need to think when you collect the additional information
 if you want it to show what causes the bug.
@@ -1000,8 +1135,8 @@ are debugging a running process (not with a core dump).
 To make Lisp errors stop Emacs and return to GDB, put a breakpoint at
 @code{Fsignal}.
 
-For a short listing of Lisp functions running, type the GDB
-command @code{xbacktrace}.
+For a backtrace of Lisp functions running, type the GDB command
+@code{xbacktrace}.
 
 The file @file{.gdbinit} defines several other commands that are useful
 for examining the data types and contents of Lisp objects.  Their names
@@ -1021,79 +1156,6 @@ To find the file @file{etc/DEBUG} in your Emacs installation, use the
 directory name stored in the variable @code{data-directory}.
 @end itemize
 
-Here are some things that are not necessary in a bug report:
-
-@itemize @bullet
-@item
-A description of the envelope of the bug---this is not necessary for a
-reproducible bug.
-
-Often people who encounter a bug spend a lot of time investigating
-which changes to the input file will make the bug go away and which
-changes will not affect it.
-
-This is often time-consuming and not very useful, because the way we
-will find the bug is by running a single example under the debugger
-with breakpoints, not by pure deduction from a series of examples.
-You might as well save time by not searching for additional examples.
-It is better to send the bug report right away, go back to editing,
-and find another bug to report.
-
-Of course, if you can find a simpler example to report @emph{instead} of
-the original one, that is a convenience.  Errors in the output will be
-easier to spot, running under the debugger will take less time, etc.
-
-However, simplification is not vital; if you can't do this or don't have
-time to try, please report the bug with your original test case.
-
-@item
-A core dump file.
-
-Debugging the core dump might be useful, but it can only be done on
-your machine, with your Emacs executable.  Therefore, sending the core
-dump file to the Emacs maintainers won't be useful.  Above all, don't
-include the core file in an email bug report!  Such a large message
-can be extremely inconvenient.
-
-@item
-A system-call trace of Emacs execution.
-
-System-call traces are very useful for certain special kinds of
-debugging, but in most cases they give little useful information.  It is
-therefore strange that many people seem to think that @emph{the} way to
-report information about a crash is to send a system-call trace.  Perhaps
-this is a habit formed from experience debugging programs that don't
-have source code or debugging symbols.
-
-In most programs, a backtrace is normally far, far more informative than
-a system-call trace.  Even in Emacs, a simple backtrace is generally
-more informative, though to give full information you should supplement
-the backtrace by displaying variable values and printing them as Lisp
-objects with @code{pr} (see above).
-
-@item
-A patch for the bug.
-
-A patch for the bug is useful if it is a good one.  But don't omit the
-other information that a bug report needs, such as the test case, on the
-assumption that a patch is sufficient.  We might see problems with your
-patch and decide to fix the problem another way, or we might not
-understand it at all.  And if we can't understand what bug you are
-trying to fix, or why your patch should be an improvement, we mustn't
-install it.
-
-@ifnottex
-@xref{Sending Patches}, for guidelines on how to make it easy for us to
-understand and install your patches.
-@end ifnottex
-
-@item
-A guess about what the bug is or what it depends on.
-
-Such guesses are usually wrong.  Even experts can't guess right about
-such things without first using the debugger to find the facts.
-@end itemize
-
 @node Sending Patches
 @subsection Sending Patches for GNU Emacs
 
@@ -1108,26 +1170,29 @@ work in the best of circumstances, and we can't keep up unless you do
 your best to help.
 
 Every patch must have several pieces of information before we
-can properly evaluate it.
-
-When you have all these pieces, bundle them up in a mail message and
-send it to the developers.  Sending it to
-@email{bug-gnu-emacs@@gnu.org} (which is the bug/feature list) is
-recommended, because that list is coupled to a tracking system that
-makes it easier to locate patches.  If your patch is not complete and
-you think it needs more discussion, you might want to send it to
-@email{emacs-devel@@gnu.org} instead.  If you revise your patch,
-send it as a followup to the initial topic.
-
-We prefer to get the patches as plain text, either inline (be careful
-your mail client does not change line breaks) or as MIME attachments.
+can properly evaluate it.  They are described below.
+
+When you have all these pieces, use the @kbd{M-x submit-emacs-patch}
+command to send the patch.  The command will prompt you for the
+Subject of the patch and a patch file.  It will then create and
+display a Message mode buffer with the patch file as an attachment,
+display the buffer, and let you explain more about the patch and add
+any other information as requested below.  When you are done, type
+@kbd{C-c C-c} to send the patch via email to the developers.  It will
+be sent to the GNU Bug Tracker at @url{https://debbugs.gnu.org}.  The
+tracker will assign a number to your submission, just like it does
+with bug reports.  The developers will usually respond, perhaps asking
+you for more details or any additional information, so be sure to
+include a valid reply email address.
+
+Here's what we ask you to provide as part of your patch submissions:
 
 @itemize @bullet
 @item
-Include an explanation with your changes of what problem they fix or what
-improvement they bring about.
+An explanation of what problem you are fixing or what improvement will
+the patches bring about:
 
-@itemize
+@itemize @minus
 @item
 For a fix for an existing bug, it is
 best to reply to the relevant discussion on the @samp{bug-gnu-emacs}
@@ -1140,26 +1205,28 @@ implementation.
 
 @item
 For a new bug, include a proper bug report for the problem you think
-you have fixed.  We need to convince ourselves that the change is
-right before installing it.  Even if it is correct, we might have
-trouble understanding it if we don't have a way to reproduce the
-problem.
+you have fixed; @pxref{Checklist, Checklist for Bug Reports}.  We need
+to convince ourselves that the change is right before installing it.
+Even if it is correct, we might have trouble understanding it if we
+don't have a way to reproduce the problem it tries to fix.
 @end itemize
 
 @item
-Include all the comments that are appropriate to help people reading the
-source in the future understand why this change was needed.
+Include in your code changes all the comments that are appropriate to
+help people reading the source in the future understand why this
+change was needed.
 
 @item
 Don't mix together changes made for different reasons.
 Send them @emph{individually}.
 
-If you make two changes for separate reasons, then we might not want to
-install them both.  We might want to install just one.  If you send them
-all jumbled together in a single set of diffs, we have to do extra work
-to disentangle them---to figure out which parts of the change serve
-which purpose.  If we don't have time for this, we might have to ignore
-your changes entirely.
+If you make two changes for separate reasons, then we might not want
+to install them both.  We might want to install just one, or install
+each one in a different versions of Emacs.  If you send them all
+jumbled together in a single set of diffs, we have to do extra work to
+disentangle them---to figure out which parts of the change serve which
+purpose.  If we don't have time for this, we might have to postpone
+inclusion of your patches for a long time.
 
 If you send each change as soon as you have written it, with its own
 explanation, then two changes never get tangled up, and we can consider
@@ -1176,52 +1243,46 @@ right away.  That gives us the option of installing it immediately if it
 is important.
 
 @item
-The patch itself.
-
-Use @samp{diff -u} to make your diffs.  Diffs without context are hard
-to install reliably.  More than that, they are hard to study; we must
-always study a patch to decide whether we want to install it.  Context
-format is better than contextless diffs, but we prefer the unified
-format.
-
-If you have GNU diff, use @samp{diff -u -F'^[_a-zA-Z0-9$]\+ *('} when
-making diffs of C code.  This shows the name of the function that each
-change occurs in.
+The patch itself.  This can be produced in one of the following ways:
 
+@itemize @minus
+@item
 If you are using the Emacs repository, make sure your copy is
 up-to-date (e.g., with @code{git pull}).  You can commit your changes
 to a private branch and generate a patch from the master version by
-using @code{git format-patch master}. Or you can leave your changes
-uncommitted and use @code{git diff}.
+using @code{git format-patch master}.  (This is the preferred method,
+as it makes our job of applying the patch easier.)  Or you can leave
+your changes uncommitted and use @code{git diff}, as described below.
 
 @item
-Avoid any ambiguity as to which is the old version and which is the new.
-Please make the old version the first argument to diff, and the new
-version the second argument.  And please give one version or the other a
-name that indicates whether it is the old version or your new changed
-one.
+Use @kbd{diff -u} to make your diffs.  If you have GNU diff, use
+@w{@kbd{diff -u -F'^[_a-zA-Z0-9$]\+ *('}} when making diffs of C code.
+This shows the name of the function that each change occurs in.
+
+When producing the diffs, avoid any ambiguity as to which is the old
+version and which is the new.  Please make the old version the first
+argument to diff, and the new version the second argument.  And please
+give one version or the other a name that indicates whether it is the
+old version or your new changed one.
+@end itemize
 
 @item
 Write the commit log entries for your changes.  This is both to save us
 the extra work of writing them, and to help explain your changes so we
 can understand them.
 
-The purpose of the commit log is to show people where to find what was
-changed.  So you need to be specific about what functions you changed;
-in large functions, it's often helpful to indicate where within the
-function the change was.
-
-On the other hand, once you have shown people where to find the change,
-you need not explain its purpose in the change log.  Thus, if you add a
-new function, all you need to say about it is that it is new.  If you
-feel that the purpose needs explaining, it probably does---but put the
-explanation in comments in the code.  It will be more useful there.
-
-Please look at the commit log entries of recent commits to see what
-sorts of information to put in, and to learn the style that we use.
-Note that, unlike some other projects, we do require commit logs for
-documentation, i.e., Texinfo files.
-@xref{Change Log},
+The purpose of the commit log is to explain the rationale of the
+changes, the way the modified code solves whatever problems your patch
+is trying to fix, and also show people where to find what was changed.
+So you need to be specific about what functions you changed and why.
+For the details about our style and requirements for good commit log
+messages, please see the ``Commit messages'' section of the file
+@file{CONTRIBUTE} in the Emacs source tree.
+
+Please also look at the commit log entries of recent commits to see
+what sorts of information to put in, and to learn the style that we
+use.  Note that, unlike some other projects, we do require commit logs
+for documentation, i.e., Texinfo files.  @xref{Change Log},
 @ifset WWW_GNU_ORG
 see
 @url{https://www.gnu.org/prep/standards/html_node/Change-Log-Concepts.html},
@@ -1232,7 +1293,7 @@ Change Log Concepts, standards, GNU Coding Standards}.
 @item
 When you write the fix, keep in mind that we can't install a change that
 would break other systems.  Please think about what effect your change
-will have if compiled on another type of system.
+will have if compiled and/or used on another type of system.
 
 Sometimes people send fixes that @emph{might} be an improvement in
 general---but it is hard to be sure of this.  It's hard to install
@@ -1240,9 +1301,10 @@ such changes because we have to study them very carefully.  Of course,
 a good explanation of the reasoning by which you concluded the change
 was correct can help convince us.
 
-The safest changes are changes to the configuration files for a
-particular machine.  These are safe because they can't create new bugs
-on other machines.
+The safest changes are changes to the files or portions of files that
+are only used for a particular machine or a particular system.  These
+are safe because they can't create new bugs on other machines or
+systems.
 
 Please help us keep up with the workload by designing the patch in a
 form that is clearly safe to install.
@@ -1259,7 +1321,7 @@ There are many ways to contribute to Emacs:
 
 @itemize
 @item
-find and report bugs; @xref{Bugs}.
+find and report bugs; @pxref{Bugs}.
 
 @item
 answer questions on the Emacs user mailing list
@@ -1326,15 +1388,15 @@ before you start; it might be possible to suggest ways to make your
 extension fit in better with the rest of Emacs.
 
 When implementing a feature, please follow the Emacs coding standards;
-@xref{Coding Standards}. In addition, non-trivial contributions
-require a copyright assignment to the FSF; @xref{Copyright Assignment}.
+@pxref{Coding Standards}.  In addition, substantial contributions
+require a copyright assignment to the FSF; @pxref{Copyright Assignment}.
 
 The development version of Emacs can be downloaded from the
 repository where it is actively maintained by a group of developers.
 See the Emacs project page
 @url{https://savannah.gnu.org/projects/emacs/} for access details.
 
-It is important to write your patch based on the current working
+It is important to write your patches based on the current working
 version.  If you start from an older version, your patch may be
 outdated (so that maintainers will have a hard time applying it), or
 changes in Emacs may have made your patch unnecessary.  After you have
@@ -1397,7 +1459,7 @@ the Emacs Lisp Reference Manual
 
 @node Coding Standards
 @subsection Coding Standards
-@cindex coding standards
+@cindex coding standards for Emacs submissions
 
 Contributed code should follow the GNU Coding Standards
 @url{https://www.gnu.org/prep/standards/}. This may also be available
@@ -1432,10 +1494,6 @@ to be included in Emacs.
 @item
 Remove all trailing whitespace in all source and text files.
 
-@item
-Emacs has no convention on whether to use tabs in source code; please
-don't change whitespace in the files you edit.
-
 @item
 Use @code{?\s} instead of @code{? } in Lisp code for a space character.
 
@@ -1455,7 +1513,7 @@ packages stored in GNU ELPA, we require that the copyright be assigned
 to the FSF@.  For the reasons behind this, see
 @url{https://www.gnu.org/licenses/why-assign.html}.
 
-Copyright assignment is a simple process.  Residents of some countries
+Copyright assignment is a simple process.  Residents of many countries
 can do it entirely electronically.  We can help you get started,
 including sending you the forms you should fill, and answer any
 questions you may have (or point you to the people with the answers),