manpagez: man pages & more
info emacs
Home | html | info | man
[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.2 Compilation Mode

The ‘*compilation*’ buffer uses a special major mode, Compilation mode, whose main feature is to provide a convenient way to visit the source line corresponding to an error message. These commands are also available in other special buffers that list locations in files, including those made by M-x grep and M-x occur.

M-g M-n
M-g n
C-x `

Visit the locus of the next error message or match.

M-g M-p
M-g p

Visit the locus of the previous error message or match.


Visit the locus of the error message that point is on. This command is used in the compilation buffer.


Visit the locus of the error message that you click on.


Find and highlight the locus of the next error message, without selecting the source buffer.


Find and highlight the locus of the previous error message, without selecting the source buffer.


Move point to the next error for a different file than the current one.


Move point to the previous error for a different file than the current one.

C-c C-f

Toggle Next Error Follow minor mode, which makes cursor motion in the compilation buffer produce automatic source display.

You can visit the source for any particular error message by moving point in the ‘*compilation*’ buffer to that error message and typing <RET> (compile-goto-error). Alternatively, you can click Mouse-2 on the error message; you need not switch to the ‘*compilation*’ buffer first.

To parse the compiler error messages sequentially, type C-x ` (next-error). The character following the C-x is the backquote or “grave accent,” not the single-quote. This command is available in all buffers, not just in ‘*compilation*’; it displays the next error message at the top of one window and source location of the error in another window. It also temporarily highlights the relevant source line, for a period controlled by the variable next-error-highlight.

The first time C-x ` is used after the start of a compilation, it moves to the first error's location. Subsequent uses of C-x ` advance down to subsequent errors. If you visit a specific error message with <RET> or Mouse-2, subsequent C-x ` commands advance from there. When C-x ` gets to the end of the buffer and finds no more error messages to visit, it fails and signals an Emacs error. C-u C-x ` starts scanning from the beginning of the compilation buffer, and goes to the first error's location.

By default, C-x ` skips less important messages. The variable compilation-skip-threshold controls this. If its value is 2, C-x ` skips anything less than error, 1 skips anything less than warning, and 0 doesn't skip any messages. The default is 1.

When the window has a left fringe, an arrow in the fringe points to the current message in the compilation buffer. The variable compilation-context-lines controls the number of lines of leading context to display before the current message. Going to an error message location scrolls the ‘*compilation*’ buffer to put the message that far down from the top. The value nil is special: if there's a left fringe, the window doesn't scroll at all if the message is already visible. If there is no left fringe, nil means display the message at the top of the window.

If you're not in the compilation buffer when you run next-error, Emacs will look for a buffer that contains error messages. First, it looks for one displayed in the selected frame, then for one that previously had next-error called on it, and then at the current buffer. Finally, Emacs looks at all the remaining buffers. next-error signals an error if it can't find any such buffer.

To parse messages from the compiler, Compilation mode uses the variable compilation-error-regexp-alist which lists various formats of error messages and tells Emacs how to extract the source file and the line number from the text of a message. If your compiler isn't supported, you can tailor Compilation mode to it by adding elements to that list. A similar variable grep-regexp-alist tells Emacs how to parse output of a grep command.

Compilation mode also redefines the keys <SPC> and <DEL> to scroll by screenfuls, and M-n (compilation-next-error) and M-p (compilation-previous-error) to move to the next or previous error message. You can also use M-{ (compilation-next-file and M-} (compilation-previous-file) to move up or down to an 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. For instance, moving the cursor to the next error message causes the location of that error to be displayed immediately.

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. This defines the keys <RET> and Mouse-2, as in the Compilation major mode.

Compilation minor mode works in any buffer, as long as the contents are in a format that it understands. In an Rlogin buffer (see section Remote Host Shell), Compilation minor mode automatically accesses remote source files by FTP (see section File Names).

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]
© 2000-2024
Individual documents may contain additional copyright information.