*compilation* buffer uses a major mode called Compilation mode. Compilation mode turns each error message in the buffer into a hyperlink; you can move point to it and type
RET, or click on it with the mouse (see Mouse References), to visit the locus of the error message in a separate window. The locus is the specific position in a file where that error occurred.
The appearance of the
*compilation* buffer can be controlled by customizing the faces which are used to highlight parts of the
*compilation* buffer, e.g.,
compilation-warning, for error and warning messages respectively. Note that since those faces inherit from the
warning faces, it is also possible to customize the parent face directly instead.
M-x customize-group RET compilation to see the entire list of customization variables and faces.
If you change the variable
compilation-auto-jump-to-first-error to a non-
nil value, Emacs automatically visits the locus of the first error message that appears in the
Compilation mode provides the following additional commands. These commands can also be used in
*grep* buffers, where the hyperlinks are search matches rather than error messages (see Grep Searching).
Visit the locus of the next error message or match (
Visit the locus of the previous error message or match (
Move point to the next error message or match, without visiting its locus (
Move point to the previous error message or match, without visiting its locus (
Move point to the next error message or match occurring in a different file (
Move point to the previous error message or match occurring in a different file (
Toggle Next Error Follow minor mode, which makes cursor motion in the compilation buffer produce automatic source display.
Re-run the last command whose output is shown in the
Select a buffer to be used by next invocation of
To visit errors sequentially, type
C-x ` (
next-error), or equivalently
M-g M-n or
M-g n. This command can be invoked from any buffer, not just a Compilation mode buffer. The first time you invoke it after a compilation, it visits the locus of the first error message. Each subsequent
M-g M-n visits the next error, in a similar fashion. If you visit a specific error with
RET or a mouse click in the
*compilation* buffer, subsequent
M-g M-n commands advance from there. When
M-g M-n finds no more error messages to visit, it signals an error.
C-u M-g M-n starts again from the beginning of the compilation buffer, and visits the first locus.
M-g M-p or
M-g p (
previous-error) iterates through errors in the opposite direction.
previous-error commands don’t just act on the errors or matches listed in
*grep* buffers; they also know how to iterate through error or match lists produced by other commands, such as
M-x occur (see Other Repeating Search). If the current buffer contains error messages or matches, these commands will iterate through them; otherwise, Emacs looks for a buffer containing error messages or matches amongst the windows of the selected frame (if the variable
next-error-find-buffer-function is customized to the value
next-error-buffer-on-selected-frame), then for a buffer used previously by
previous-error, and finally all other buffers. Any buffer these commands iterate through that is not currently displayed in a window will be displayed. You can use the
next-error-select-buffer command to switch to a different buffer to be used by the subsequent invocation of
By default, the
previous-error commands skip less important messages. The variable
compilation-skip-threshold controls this. The default value, 1, means to skip anything less important than a warning. A value of 2 means to skip anything less important than an error, while 0 means not to skip any messages.
When Emacs visits the locus of an error message, it momentarily highlights the relevant source line. The duration of this highlight is determined by the variable
next-error-highlight for the locus in the selected buffer, and
next-error-highlight-no-select for the locus in non-selected buffers.
*compilation* buffer is shown in a window with a left fringe (see Fringes), the locus-visiting commands put an arrow in the fringe, pointing to the current error message. If the window has no left fringe, such as on a text terminal, these commands scroll the window so that the current message is at the top of the window. If you change the variable
t, a visible arrow is inserted before column zero instead. If you change the variable to an integer value
n, these commands scroll the window so that the current error message is
n lines from the top, whether or not there is a fringe; the default value,
nil, gives the behavior described above.
To parse messages from the compiler, Compilation mode uses the variable
compilation-error-regexp-alist which lists various error message formats and tells Emacs how to extract the locus from each. A similar variable,
grep-regexp-alist, tells Emacs how to parse output from a
grep command (see Grep Searching).
Compilation mode also defines the keys
DEL to scroll by screenfuls;
compilation-previous-error) to move to the next or previous error message; and
compilation-previous-file) to move to the next or previous error message for a different source file.
You can type
C-c C-f to toggle Next Error Follow mode. In this minor mode, ordinary cursor motion in the compilation buffer automatically updates the source buffer, i.e., moving the cursor over an error message causes the locus of that error to be displayed.
The features of Compilation mode are also available in a minor mode called Compilation Minor mode. This lets you parse error messages in any buffer, not just a normal compilation output buffer. Type
M-x compilation-minor-mode to enable the minor mode. For instance, in an Rlogin buffer (see Remote Host), Compilation minor mode automatically accesses remote source files by FTP (see File Names).