subprocesses; to work around this lack, @kbd{M-x compile} runs the
compilation command synchronously on MS-DOS. As a consequence, you must
wait until the command finishes before you can do anything else in
-Emacs. @xref{MS-DOS}.
+Emacs. @xref{MS-DOS,,,emacs-xtra,Specialized Emacs Features}.
@node Grep Searching
@section Searching with Grep under Emacs
@table @kbd
@item M-x grep
+@item M-x lgrep
Run @code{grep} asynchronously under Emacs, with matching lines
listed in the buffer named @samp{*grep*}.
@item M-x grep-find
@itemx M-x find-grep
+@itemx M-x rgrep
Run @code{grep} via @code{find}, with user-specified arguments, and
collect output in the buffer named @samp{*grep*}.
@item M-x kill-grep
@code{grep}, so as to search every file in a directory tree. See also
the @code{find-grep-dired} command, in @ref{Dired and Find}.
+@findex lgrep
+@findex rgrep
+ The commands @kbd{M-x lgrep} (local grep) and @kbd{M-x rgrep}
+(recursive grep) are more user-friendly versions of @code{grep} and
+@code{grep-find}, which prompt separately for the regular expression
+to match, the files to search, and the base directory for the search
+(rgrep only). Case sensitivitivy of the search is controlled by the
+current value of @code{case-fold-search}.
+
+These commands build the shell commands based on the variables
+@code{grep-template} (for @code{lgrep}) and @code{grep-find-template}
+(for @code{rgrep}).
+
+The files to search can use aliases defined in the variable
+@code{grep-files-aliases}.
+
+Subdirectories listed in the variable
+@code{grep-find-ignored-directories} such as those typically used by
+various version control systems, like CVS and arch, are automatically
+skipped by @code{rgrep}.
+
@node Flymake
@section Finding Syntax Errors On The Fly
@cindex checking syntax
@kindex C-c C-f @r{(GUD)}
@itemx C-x C-a C-f
@findex gud-finish
-Run the program until the selected stack frame returns or
+Run the program until the selected stack frame returns or
stops for some other reason (@code{gud-finish}).
@item C-x C-a C-j
The name of the current source file. If the current buffer is the GUD
buffer, then the ``current source file'' is the file that the program
stopped in.
-@c This said, ``the name of the file the program counter was in at the last breakpoint.''
-@c But I suspect it is really the last stop file.
@item %l
The number of the current source line. If the current buffer is the GUD
stopped in.
@item %e
-The text of the C lvalue or function-call expression at or adjacent to point.
+In transient-mark-mode the text in the region, if it is active.
+Otherwise the text of the C lvalue or function-call expression at or
+adjacent to point.
@item %a
The text of the hexadecimal address at or adjacent to point.
If you don't use @samp{%p} in the command string, the command you define
ignores any numeric argument.
+
+@item %d
+The name of the directory of the current source file.
+
+@item %c
+Fully qualified class name derived from the expression surrounding point
+(jdb only).
@end table
@node GDB Graphical Interface
@cindex Watching expressions in GDB
@findex gud-watch
+@kindex C-x C-a C-w @r{(GUD)}
If you want to see how a variable changes each time your program
stops, move point into the variable name and click on the watch icon
-in the tool bar (@code{gud-watch}).
+in the tool bar (@code{gud-watch}) or type @kbd{C-x C-a C-w}. If you
+specify a prefix argument, you can enter the variable name in the
+minibuffer.
Each watch expression is displayed in the speedbar. Complex data
types, such as arrays, structures and unions are represented in a tree
format. Leaves and simple data types show the name of the expression
and its value and, when the speedbar frame is selected, display the
type as a tooltip. Higher levels show the name, type and address
-value for pointers and just the name and type otherwise.
+value for pointers and just the name and type otherwise. Root expressions
+also display the frame address as a tooltip to help identify the frame
+in which they were defined.
To expand or contract a complex data type, click @kbd{Mouse-2}
on the tag to the left of the expression.
+@kindex D @r{(GDB speedbar)}
@findex gdb-var-delete
To delete a complex watch expression, move point to the root
expression in the speedbar and type @kbd{D} (@code{gdb-var-delete}).
@vindex gdb-use-colon-colon-notation
If the variable @code{gdb-use-colon-colon-notation} is
non-@code{nil}, Emacs uses the @samp{@var{function}::@var{variable}}
-format to display variables in the speedbar. Since this does not work
-for variables defined in compound statements, the default value is
-@code{nil}.
+format. This allows the user to display watch expressions which share
+the same variable name. The default value is @code{nil}.
@vindex gdb-speedbar-auto-raise
To automatically raise the speedbar every time the display of watch