*** empty log message ***
[bpt/emacs.git] / man / display.texi
CommitLineData
802b0ea7 1@c This is part of the Emacs manual.
b8f3a9e3
GM
2@c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997, 2000, 2001
3@c Free Software Foundation, Inc.
6bf7aab6
DL
4@c See file emacs.texi for copying conditions.
5@node Display, Search, Registers, Top
6@chapter Controlling the Display
7
8 Since only part of a large buffer fits in the window, Emacs tries to
9show a part that is likely to be interesting. Display-control commands
10allow you to specify which part of the text you want to see, and how to
11display it.
12
13@menu
b8f3a9e3
GM
14* Faces:: How to change the display style using faces.
15* Font Lock:: Minor mode for syntactic highlighting using faces.
16* Highlight Changes:: Using colors to show where you changed the buffer.
17* Highlight Interactively:: Tell Emacs what text to highlight.
18* Trailing Whitespace:: Showing possibly-spurious trailing whitespace.
6bf7aab6
DL
19* Scrolling:: Moving text up and down in a window.
20* Horizontal Scrolling:: Moving text left and right in a window.
21* Follow Mode:: Follow mode lets two windows scroll as one.
22* Selective Display:: Hiding lines with lots of indentation.
23* Optional Mode Line:: Optional mode line display features.
24* Text Display:: How text characters are normally displayed.
e598186c 25* Display Custom:: Information on variables for customizing display.
099bfef9 26* Cursor Display:: Features for displaying the cursor.
6bf7aab6
DL
27@end menu
28
b8f3a9e3
GM
29@node Faces
30@section Using Multiple Typefaces
31@cindex faces
32
306da12e
RS
33 Emacs supports using multiple styles of displaying characters. Each
34style is called a @dfn{face}. Each face can specify various @dfn{face
35attributes}, such as the font family, the height, weight and slant of
36the characters, the foreground and background color, and underlining
37or overlining. A face does not have to specify all of these
38attributes; often it inherits many of them from another face.
39
40 On a window system, all the Emacs face attributes are meaningful.
41On a character terminal, only some of them work. Some character
42terminals support inverse video, bold, and underline attributes; some
43support colors. Character terminals generally do not support changing
44the height and width or the font family.
c1b45553 45
6bb2ed9b
EZ
46 Features which rely on text in multiple faces (such as Font Lock mode)
47will also work on non-windowed terminals that can display more than one
48face, whether by colors or underlining and emboldening. This includes
49the console on GNU/Linux, an @code{xterm} which supports colors, the
50MS-DOS display (@pxref{MS-DOS}), and the MS-Windows version invoked with
51the @option{-nw} option. Emacs determines automatically whether the
52terminal has this capability.
b8f3a9e3 53
0073fd65
RS
54 You control the appearance of a part of the text in the buffer by
55specifying the face or faces to use for it. The style of display used
56for any given character is determined by combining the attributes of
57all the applicable faces specified for that character. Any attribute
0ec1f115 58that isn't specified by these faces is taken from the @code{default} face,
04d0b662 59whose attributes reflect the default settings of the frame itself.
b8f3a9e3
GM
60
61 Enriched mode, the mode for editing formatted text, includes several
0073fd65
RS
62commands and menus for specifying faces for text in the buffer.
63@xref{Format Faces}, for how to specify the font for text in the
64buffer. @xref{Format Colors}, for how to specify the foreground and
65background color.
b8f3a9e3
GM
66
67@cindex face colors, setting
68@findex set-face-foreground
69@findex set-face-background
0073fd65
RS
70 To alter the appearance of a face, use the customization buffer.
71@xref{Face Customization}. You can also use X resources to specify
186e9bcc 72attributes of particular faces (@pxref{Resources}). Alternatively,
0073fd65
RS
73you can change the foreground and background colors of a specific face
74with @kbd{M-x set-face-foreground} and @kbd{M-x set-face-background}.
75These commands prompt in the minibuffer for a face name and a color
76name, with completion, and then set that face to use the specified
3ae02d92
EZ
77color. Changing the colors of the @code{default} face also changes
78the foreground and background colors on all frames, both existing and
79those to be created in the future. (You can also set foreground and
80background colors for the current frame only; see @ref{Frame
81Parameters}.)
0073fd65
RS
82
83 Emacs 21 can correctly display variable-width fonts, but Emacs
84commands that calculate width and indentation do not know how to
85calculate variable widths. This can sometimes lead to incorrect
86results when you use variable-width fonts. In particular, indentation
87commands can give inconsistent results, so we recommend you avoid
88variable-width fonts for editing program source code. Filling will
89sometimes make lines too long or too short. We plan to address these
90issues in future Emacs versions.
b8f3a9e3
GM
91
92@findex list-faces-display
93 To see what faces are currently defined, and what they look like, type
94@kbd{M-x list-faces-display}. It's possible for a given face to look
95different in different frames; this command shows the appearance in the
04d0b662 96frame in which you type it. Here's a list of the standard defined
b8f3a9e3
GM
97faces:
98
99@table @code
100@item default
101This face is used for ordinary text that doesn't specify any other face.
102@item mode-line
b9e58bf2
EZ
103This face is used for the mode line of the currently selected window.
104By default, it's drawn with shadows for a ``raised'' effect on window
105systems, and drawn as the inverse of the default face on non-windowed
106terminals. @xref{Display Custom}.
107@item mode-line-inactive
108Like @code{mode-line}, but used for mode lines of the windows other
109than the selected one (if @code{mode-line-in-non-selected-windows} is
ac6875fc
RS
110non-@code{nil}). This face inherits from @code{mode-line}, so changes
111in that face affect mode lines in all windows.
b8f3a9e3
GM
112@item header-line
113Similar to @code{mode-line} for a window's header line. Most modes
114don't use the header line, but the Info mode does.
3094ad7a
EZ
115@item minibuffer-prompt
116This face is used for the prompt strings displayed in the minibuffer.
b8f3a9e3
GM
117@item highlight
118This face is used for highlighting portions of text, in various modes.
119For example, mouse-sensitive text is highlighted using this face.
120@item isearch
121This face is used for highlighting Isearch matches.
122@item isearch-lazy-highlight-face
123This face is used for lazy highlighting of Isearch matches other than
124the current one.
125@item region
126This face is used for displaying a selected region (when Transient Mark
127mode is enabled---see below).
128@item secondary-selection
129This face is used for displaying a secondary X selection (@pxref{Secondary
130Selection}).
131@item bold
132This face uses a bold variant of the default font, if it has one.
133@item italic
134This face uses an italic variant of the default font, if it has one.
135@item bold-italic
136This face uses a bold italic variant of the default font, if it has one.
137@item underline
138This face underlines text.
139@item fixed-pitch
140The basic fixed-pitch face.
141@item fringe
142@cindex fringe
143The face for the fringes to the left and right of windows on graphic
144displays. (The fringes are the narrow portions of the Emacs frame
940627fe 145between the text area and the window's right and left borders.)
b8f3a9e3
GM
146@item scroll-bar
147This face determines the visual appearance of the scroll bar.
148@item border
149This face determines the color of the frame border.
150@item cursor
151This face determines the color of the cursor.
152@item mouse
153This face determines the color of the mouse pointer.
154@item tool-bar
155This is the basic tool-bar face. No text appears in the tool bar, but the
156colors of this face affect the appearance of tool bar icons.
157@item tooltip
158This face is used for tooltips.
159@item menu
160This face determines the colors and font of Emacs's menus. Setting the
161font of LessTif/Motif menus is currently not supported; attempts to set
162the font are ignored in this case.
163@item trailing-whitespace
164The face for highlighting trailing whitespace when
86354bc0 165@code{show-trailing-whitespace} is non-nil; see @ref{Trailing Whitespace}.
b8f3a9e3
GM
166@item variable-pitch
167The basic variable-pitch face.
168@end table
169
170@cindex @code{region} face
171 When Transient Mark mode is enabled, the text of the region is
172highlighted when the mark is active. This uses the face named
173@code{region}; you can control the style of highlighting by changing the
174style of this face (@pxref{Face Customization}). @xref{Transient Mark},
175for more information about Transient Mark mode and activation and
176deactivation of the mark.
177
178 One easy way to use faces is to turn on Font Lock mode. This minor
179mode, which is always local to a particular buffer, arranges to
180choose faces according to the syntax of the text you are editing. It
181can recognize comments and strings in most languages; in several
182languages, it can also recognize and properly highlight various other
183important constructs. @xref{Font Lock}, for more information about
184Font Lock mode and syntactic highlighting.
185
186 You can print out the buffer with the highlighting that appears
187on your screen using the command @code{ps-print-buffer-with-faces}.
188@xref{PostScript}.
189
190@node Font Lock
191@section Font Lock mode
192@cindex Font Lock mode
193@cindex mode, Font Lock
194@cindex syntax highlighting and coloring
195
196 Font Lock mode is a minor mode, always local to a particular
197buffer, which highlights (or ``fontifies'') using various faces
198according to the syntax of the text you are editing. It can
199recognize comments and strings in most languages; in several
200languages, it can also recognize and properly highlight various other
201important constructs---for example, names of functions being defined
202or reserved keywords.
203
204@findex font-lock-mode
205@findex turn-on-font-lock
206 The command @kbd{M-x font-lock-mode} turns Font Lock mode on or off
207according to the argument, and toggles the mode when it has no argument.
208The function @code{turn-on-font-lock} unconditionally enables Font Lock
209mode. This is useful in mode-hook functions. For example, to enable
210Font Lock mode whenever you edit a C file, you can do this:
211
212@example
213(add-hook 'c-mode-hook 'turn-on-font-lock)
214@end example
215
216@findex global-font-lock-mode
217@vindex global-font-lock-mode
218 To turn on Font Lock mode automatically in all modes which support
219it, customize the user option @code{global-font-lock-mode} or use the
220function @code{global-font-lock-mode} in your @file{.emacs} file, like
221this:
222
223@example
224(global-font-lock-mode 1)
225@end example
226
227 Font Lock mode uses several specifically named faces to do its job,
228including @code{font-lock-string-face}, @code{font-lock-comment-face},
229and others. The easiest way to find them all is to use completion
230on the face name in @code{set-face-foreground}.
231
232 To change the colors or the fonts used by Font Lock mode to fontify
233different parts of text, just change these faces. There are
234two ways to do it:
235
236@itemize @bullet
237@item
238Invoke @kbd{M-x set-face-foreground} or @kbd{M-x set-face-background}
239to change the colors of a particular face used by Font Lock.
240@xref{Faces}. The command @kbd{M-x list-faces-display} displays all
241the faces currently known to Emacs, including those used by Font Lock.
242
243@item
244Customize the faces interactively with @kbd{M-x customize-face}, as
245described in @ref{Face Customization}.
246@end itemize
247
248 To get the full benefit of Font Lock mode, you need to choose a
249default font which has bold, italic, and bold-italic variants; or else
250you need to have a color or gray-scale screen.
251
252@vindex font-lock-maximum-decoration
253 The variable @code{font-lock-maximum-decoration} specifies the
254preferred level of fontification, for modes that provide multiple
255levels. Level 1 is the least amount of fontification; some modes
256support levels as high as 3. The normal default is ``as high as
257possible.'' You can specify an integer, which applies to all modes, or
258you can specify different numbers for particular major modes; for
259example, to use level 1 for C/C++ modes, and the default level
260otherwise, use this:
261
262@example
263(setq font-lock-maximum-decoration
264 '((c-mode . 1) (c++-mode . 1)))
265@end example
266
267@vindex font-lock-maximum-size
268 Fontification can be too slow for large buffers, so you can suppress
269it. The variable @code{font-lock-maximum-size} specifies a buffer size,
270beyond which buffer fontification is suppressed.
271
272@c @w is used below to prevent a bad page-break.
273@vindex font-lock-beginning-of-syntax-function
e07e854d
EZ
274@cindex incorrect fontification
275@cindex parenthesis in column zero and fontification
276@cindex brace in column zero and fontification
b8f3a9e3
GM
277 Comment and string fontification (or ``syntactic'' fontification)
278relies on analysis of the syntactic structure of the buffer text. For
0ec1f115 279the sake of speed, some modes, including C mode and Lisp mode,
04d0b662
RS
280rely on a special convention: an open-parenthesis or open-brace in the
281leftmost column always defines the @w{beginning} of a defun, and is
ee6038a6 282thus always outside any string or comment. (@xref{Left Margin
9048ad82 283Paren}.) If you don't follow this convention, Font Lock mode can
ee6038a6
RS
284misfontify the text that follows an open-parenthesis or open-brace in
285the leftmost column that is inside a string or comment.
b8f3a9e3 286
6bb2ed9b 287@cindex slow display during scrolling
b8f3a9e3
GM
288 The variable @code{font-lock-beginning-of-syntax-function} (always
289buffer-local) specifies how Font Lock mode can find a position
290guaranteed to be outside any comment or string. In modes which use the
291leftmost column parenthesis convention, the default value of the variable
292is @code{beginning-of-defun}---that tells Font Lock mode to use the
293convention. If you set this variable to @code{nil}, Font Lock no longer
294relies on the convention. This avoids incorrect results, but the price
295is that, in some cases, fontification for a changed text must rescan
6bb2ed9b
EZ
296buffer text from the beginning of the buffer. This can considerably
297slow down redisplay while scrolling, particularly if you are close to
298the end of a large buffer.
b8f3a9e3
GM
299
300@findex font-lock-add-keywords
301 Font Lock highlighting patterns already exist for many modes, but you
302may want to fontify additional patterns. You can use the function
303@code{font-lock-add-keywords}, to add your own highlighting patterns for
304a particular mode. For example, to highlight @samp{FIXME:} words in C
305comments, use this:
306
307@example
308(font-lock-add-keywords
309 'c-mode
310 '(("\\<\\(FIXME\\):" 1 font-lock-warning-face t)))
311@end example
312
4063fff3
EZ
313@findex font-lock-remove-keywords
314 To remove keywords from the font-lock highlighting patterns, use the
315function @code{font-lock-remove-keywords}.
316
3be9b0ca
EZ
317@cindex just-in-time (JIT) font-lock
318@cindex background syntax highlighting
319 Fontifying large buffers can take a long time. To avoid large
320delays when a file is visited, Emacs fontifies only the visible
321portion of a buffer. As you scroll through the buffer, each portion
322that becomes visible is fontified as soon as it is displayed. The
323parts of the buffer that are not displayed are fontified
324``stealthily'', in the background, i.e.@: when Emacs is idle. You can
325control this background fontification, called @dfn{Just-In-Time}, or
326@dfn{JIT} Font Lock, by customizing various options in the
327customization group @samp{jit-lock}. @xref{Specific Customization}.
328
b8f3a9e3
GM
329@node Highlight Changes
330@section Highlight Changes Mode
331
332@findex highlight-changes-mode
333 Use @kbd{M-x highlight-changes-mode} to enable a minor mode
334that uses faces (colors, typically) to indicate which parts of
335the buffer were changed most recently.
336
337@node Highlight Interactively
338@section Interactive Highlighting by Matching
339@cindex highlighting by matching
340@cindex interactive highlighting
341
342 It is sometimes useful to highlight the strings that match a certain
343regular expression. For example, you might wish to see all the
344references to a certain variable in a program source file, or highlight
345certain parts in a voluminous output of some program, or make certain
346cliches stand out in an article.
347
348@findex hi-lock-mode
349 Use the @kbd{M-x hi-lock-mode} command to turn on a minor mode that
350allows you to specify regular expressions of the text to be
351highlighted. Hi-lock mode works like Font Lock (@pxref{Font Lock}),
352except that it lets you specify explicitly what parts of text to
353highlight. You control Hi-lock mode with these commands:
354
355@table @kbd
356@item C-x w h @var{regexp} @key{RET} @var{face} @key{RET}
357@kindex C-x w h
358@findex highlight-regexp
359Highlight text that matches
360@var{regexp} using face @var{face} (@code{highlight-regexp}).
361By using this command more than once, you can highlight various
362parts of the text in different ways.
363
364@item C-x w r @var{regexp} @key{RET}
365@kindex C-x w r
366@findex unhighlight-regexp
367Unhighlight @var{regexp} (@code{unhighlight-regexp}). You must enter
368one of the regular expressions currently specified for highlighting.
04d0b662 369(You can use completion, or choose from a menu, to enter one of them
b8f3a9e3
GM
370conveniently.)
371
372@item C-x w l @var{regexp} @key{RET} @var{face} @key{RET}
373@kindex C-x w l
374@findex highlight-lines-matching-regexp
375@cindex lines, highlighting
376@cindex highlighting lines of text
04d0b662 377Highlight entire lines containing a match for @var{regexp}, using face
b8f3a9e3
GM
378@var{face} (@code{highlight-lines-matching-regexp}).
379
380@item C-x w b
381@kindex C-x w b
382@findex hi-lock-write-interactive-patterns
383Insert all the current highlighting regexp/face pairs into the buffer
384at point, with comment delimiters to prevent them from changing your
385program. This key binding runs the
386@code{hi-lock-write-interactive-patterns} command.
387
388These patterns will be read the next time you visit the file while
389Hi-lock mode is enabled, or whenever you use the @kbd{M-x
390hi-lock-find-patterns} command.
391
392@item C-x w i
393@kindex C-x w i
394@findex hi-lock-find-patterns
395@vindex hi-lock-exclude-modes
396Re-read regexp/face pairs in the current buffer
397(@code{hi-lock-write-interactive-patterns}). The list of pairs is
398found no matter where in the buffer it may be.
399
400This command does nothing if the major mode is a member of the list
401@code{hi-lock-exclude-modes}.
402@end table
403
404@node Trailing Whitespace
405@section Trailing Whitespace
406
407@cindex trailing whitespace
408@cindex whitespace, trailing
409@vindex show-trailing-whitespace
410 It is easy to leave unnecessary spaces at the end of a line without
411realizing it. In most cases, this @dfn{trailing whitespace} has no
412effect, but there are special circumstances where it matters.
413
86354bc0
EZ
414 You can make trailing whitespace visible on the screen by setting the
415buffer-local variable @code{show-trailing-whitespace} to @code{t}. Then
416Emacs displays trailing whitespace in the face
417@code{trailing-whitespace}.
b8f3a9e3
GM
418
419 Trailing whitespace is defined as spaces or tabs at the end of a
420line. But trailing whitespace is not displayed specially if point is
421at the end of the line containing the whitespace. (Doing that looks
422ugly while you are typing in new text, and the location of point is
423enough in that case to show you that the spaces are present.)
424
617f8101
EZ
425@findex delete-trailing-whitespace
426 To delete all trailing whitespace within the current buffer's
427restriction (@pxref{Narrowing}), type @kbd{M-x
428delete-trailing-whitespace @key{RET}}. (This command does not remove
429the form-feed characters.)
430
b8f3a9e3
GM
431@vindex indicate-empty-lines
432@vindex default-indicate-empty-lines
433@cindex empty lines
c3f34075 434@cindex fringes, and empty line indication
b8f3a9e3
GM
435 Emacs can indicate empty lines at the end of the buffer with a
436special bitmap on the left fringe of the window. To enable this
437feature, set the buffer-local variable @code{indicate-empty-lines} to
438a non-@code{nil} value. The default value of this variable is
439controlled by the variable @code{default-indicate-empty-lines};
440by setting that variable, you can enable or disable this feature
c3f34075
EZ
441for all new buffers. (This feature currently doesn't work on
442character terminals.)
b8f3a9e3 443
6bf7aab6
DL
444@node Scrolling
445@section Scrolling
446
447 If a buffer contains text that is too large to fit entirely within a
448window that is displaying the buffer, Emacs shows a contiguous portion of
449the text. The portion shown always contains point.
450
451@cindex scrolling
452 @dfn{Scrolling} means moving text up or down in the window so that
453different parts of the text are visible. Scrolling forward means that text
454moves up, and new text appears at the bottom. Scrolling backward moves
455text down and new text appears at the top.
456
457 Scrolling happens automatically if you move point past the bottom or top
458of the window. You can also explicitly request scrolling with the commands
459in this section.
460
461@table @kbd
462@item C-l
463Clear screen and redisplay, scrolling the selected window to center
464point vertically within it (@code{recenter}).
465@item C-v
466Scroll forward (a windowful or a specified number of lines) (@code{scroll-up}).
467@item @key{NEXT}
04d0b662 468@itemx @key{PAGEDOWN}
6bf7aab6
DL
469Likewise, scroll forward.
470@item M-v
471Scroll backward (@code{scroll-down}).
472@item @key{PRIOR}
04d0b662 473@itemx @key{PAGEUP}
6bf7aab6
DL
474Likewise, scroll backward.
475@item @var{arg} C-l
476Scroll so point is on line @var{arg} (@code{recenter}).
477@item C-M-l
478Scroll heuristically to bring useful information onto the screen
479(@code{reposition-window}).
480@end table
481
482@kindex C-l
483@findex recenter
484 The most basic scrolling command is @kbd{C-l} (@code{recenter}) with
485no argument. It clears the entire screen and redisplays all windows.
486In addition, it scrolls the selected window so that point is halfway
487down from the top of the window.
488
489@kindex C-v
490@kindex M-v
491@kindex NEXT
492@kindex PRIOR
04d0b662
RS
493@kindex PAGEDOWN
494@kindex PAGEUP
6bf7aab6
DL
495@findex scroll-up
496@findex scroll-down
6bf7aab6 497@vindex next-screen-context-lines
04d0b662
RS
498 To read the buffer a windowful at a time, use @kbd{C-v}
499(@code{scroll-up}) with no argument. This scrolls forward by nearly
500the whole window height. The effect is to take the two lines at the
501bottom of the window and put them at the top, followed by nearly a
502whole windowful of lines that were not previously visible. If point
503was in the text that scrolled off the top, it ends up at the new top
504of the window.
505
0ec1f115
RS
506 @kbd{M-v} (@code{scroll-down}) with no argument scrolls backward in
507a similar way, also with overlap. The number of lines of overlap
508across a @kbd{C-v} or @kbd{M-v} is controlled by the variable
04d0b662
RS
509@code{next-screen-context-lines}; by default, it is 2. The function
510keys @key{NEXT} and @key{PRIOR}, or @key{PAGEDOWN} and @key{PAGEUP},
511are equivalent to @kbd{C-v} and @kbd{M-v}.
512
513 The commands @kbd{C-v} and @kbd{M-v} with a numeric argument scroll
514the text in the selected window up or down a few lines. @kbd{C-v}
515with an argument moves the text and point up, together, that many
516lines; it brings the same number of new lines into view at the bottom
517of the window. @kbd{M-v} with numeric argument scrolls the text
518downward, bringing that many new lines into view at the top of the
519window. @kbd{C-v} with a negative argument is like @kbd{M-v} and vice
520versa.
521
522 The names of scroll commands are based on the direction that the
523text moves in the window. Thus, the command to scroll forward is
524called @code{scroll-up} because it moves the text upward on the
525screen. The keys @key{PAGEDOWN} and @key{PAGEUP} derive their names
526and customary meanings from a different convention that developed
527elsewhere; hence the strange result that @key{PAGEDOWN} runs
528@code{scroll-up}.
6bf7aab6
DL
529
530@vindex scroll-preserve-screen-position
531 Some users like the full-screen scroll commands to keep point at the
532same screen line. To enable this behavior, set the variable
533@code{scroll-preserve-screen-position} to a non-@code{nil} value. This
534mode is convenient for browsing through a file by scrolling by
535screenfuls; if you come back to the screen where you started, point goes
536back to the line where it started. However, this mode is inconvenient
537when you move to the next screen in order to move point to the text
538there.
539
540 Another way to do scrolling is with @kbd{C-l} with a numeric argument.
541@kbd{C-l} does not clear the screen when given an argument; it only scrolls
542the selected window. With a positive argument @var{n}, it repositions text
543to put point @var{n} lines down from the top. An argument of zero puts
544point on the very top line. Point does not move with respect to the text;
545rather, the text and point move rigidly on the screen. @kbd{C-l} with a
546negative argument puts point that many lines from the bottom of the window.
547For example, @kbd{C-u - 1 C-l} puts point on the bottom line, and @kbd{C-u
04d0b662
RS
548- 5 C-l} puts it five lines from the bottom. @kbd{C-u C-l} scrolls to put
549point at the center (vertically) of the selected window.
6bf7aab6
DL
550
551@kindex C-M-l
552@findex reposition-window
553 The @kbd{C-M-l} command (@code{reposition-window}) scrolls the current
554window heuristically in a way designed to get useful information onto
555the screen. For example, in a Lisp file, this command tries to get the
556entire current defun onto the screen if possible.
557
558@vindex scroll-conservatively
04d0b662
RS
559 Scrolling happens automatically when point moves out of the visible
560portion of the text. Normally, automatic scrolling centers point
561vertically within the window. However, if you set
562@code{scroll-conservatively} to a small number @var{n}, then if you
563move point just a little off the screen---less than @var{n}
564lines---then Emacs scrolls the text just far enough to bring point
565back on screen. By default, @code{scroll-conservatively} is 0.
6bf7aab6 566
6dd5e8cc
EZ
567@cindex aggressive scrolling
568@vindex scroll-up-aggressively
569@vindex scroll-down-aggressively
e598186c
RS
570 When the window does scroll by a longer distance, you can control
571how aggressively it scrolls, by setting the variables
572@code{scroll-up-aggressively} and @code{scroll-down-aggressively}.
573The value of @code{scroll-up-aggressively} should be either
574@code{nil}, or a fraction @var{f} between 0 and 1. A fraction
575specifies where on the screen to put point when scrolling upward.
576More precisely, when a window scrolls up because point is above the
577window start, the new start position is chosen to put point @var{f}
578part of the window height from the top. The larger @var{f}, the more
579aggressive the scrolling.
580
581 @code{nil}, which is the default, scrolls to put point at the center.
582So it is equivalent to .5.
583
584 Likewise, @code{scroll-down-aggressively} is used for scrolling
585down. The value, @var{f}, specifies how far point should be placed
586from the bottom of the window; thus, as with
587@code{scroll-up-aggressively}, a larger value is more aggressive.
6dd5e8cc 588
6bf7aab6
DL
589@vindex scroll-margin
590 The variable @code{scroll-margin} restricts how close point can come
591to the top or bottom of a window. Its value is a number of screen
592lines; if point comes within that many lines of the top or bottom of the
593window, Emacs recenters the window. By default, @code{scroll-margin} is
5940.
595
596@node Horizontal Scrolling
597@section Horizontal Scrolling
598@cindex horizontal scrolling
599
600 @dfn{Horizontal scrolling} means shifting all the lines sideways
e598186c 601within a window---so that some of the text near the left margin is not
04d0b662 602displayed at all. Emacs does this automatically in any window that
e598186c
RS
603uses line truncation rather than continuation: whenever point moves
604off the left or right edge of the screen, Emacs scrolls the buffer
605horizontally to make point visible.
606
607 When a window has been scrolled horizontally, text lines are truncated
608rather than continued (@pxref{Continuation Lines}), with a @samp{$}
609appearing in the first column when there is text truncated to the left,
610and in the last column when there is text truncated to the right.
611
612 You can use these commands to do explicit horizontal scrolling.
6bf7aab6
DL
613
614@table @kbd
615@item C-x <
616Scroll text in current window to the left (@code{scroll-left}).
617@item C-x >
618Scroll to the right (@code{scroll-right}).
619@end table
620
6bf7aab6
DL
621@kindex C-x <
622@kindex C-x >
623@findex scroll-left
624@findex scroll-right
625 The command @kbd{C-x <} (@code{scroll-left}) scrolls the selected
626window to the left by @var{n} columns with argument @var{n}. This moves
627part of the beginning of each line off the left edge of the window.
628With no argument, it scrolls by almost the full width of the window (two
629columns less, to be precise).
630
631 @kbd{C-x >} (@code{scroll-right}) scrolls similarly to the right. The
632window cannot be scrolled any farther to the right once it is displayed
633normally (with each line starting at the window's left margin);
634attempting to do so has no effect. This means that you don't have to
635calculate the argument precisely for @w{@kbd{C-x >}}; any sufficiently large
636argument will restore the normal display.
637
e598186c
RS
638 If you scroll a window horizontally by hand, that sets a lower bound
639for automatic horizontal scrolling. Automatic scrolling will continue
97357fc9 640to scroll the window, but never farther to the right than the amount
e598186c 641you previously set by @code{scroll-left}.
6bf7aab6 642
e598186c
RS
643@vindex automatic-hscrolling
644 To disable automatic horizontal scrolling, set the variable
645@code{automatic-hscrolling} to @code{nil}.
03ff8aab 646
6bf7aab6
DL
647@node Follow Mode
648@section Follow Mode
649@cindex Follow mode
650@cindex mode, Follow
fd3d3075
RS
651@findex follow-mode
652@cindex windows, synchronizing
653@cindex synchronizing windows
6bf7aab6
DL
654
655 @dfn{Follow mode} is a minor mode that makes two windows showing the
656same buffer scroll as one tall ``virtual window.'' To use Follow mode,
657go to a frame with just one window, split it into two side-by-side
658windows using @kbd{C-x 3}, and then type @kbd{M-x follow-mode}. From
659then on, you can edit the buffer in either of the two windows, or scroll
660either one; the other window follows it.
661
8f399c9b
RS
662 In Follow mode, if you move point outside the portion visible in one
663window and into the portion visible in the other window, that selects
664the other window---again, treating the two as if they were parts of
665one large window.
666
6bf7aab6
DL
667 To turn off Follow mode, type @kbd{M-x follow-mode} a second time.
668
669@node Selective Display
670@section Selective Display
4946337d 671@cindex selective display
6bf7aab6
DL
672@findex set-selective-display
673@kindex C-x $
674
675 Emacs has the ability to hide lines indented more than a certain number
676of columns (you specify how many columns). You can use this to get an
677overview of a part of a program.
678
679 To hide lines, type @kbd{C-x $} (@code{set-selective-display}) with a
680numeric argument @var{n}. Then lines with at least @var{n} columns of
681indentation disappear from the screen. The only indication of their
682presence is that three dots (@samp{@dots{}}) appear at the end of each
683visible line that is followed by one or more hidden ones.
684
685 The commands @kbd{C-n} and @kbd{C-p} move across the hidden lines as
686if they were not there.
687
688 The hidden lines are still present in the buffer, and most editing
689commands see them as usual, so you may find point in the middle of the
690hidden text. When this happens, the cursor appears at the end of the
691previous line, after the three dots. If point is at the end of the
692visible line, before the newline that ends it, the cursor appears before
693the three dots.
694
695 To make all lines visible again, type @kbd{C-x $} with no argument.
696
697@vindex selective-display-ellipses
698 If you set the variable @code{selective-display-ellipses} to
699@code{nil}, the three dots do not appear at the end of a line that
700precedes hidden lines. Then there is no visible indication of the
701hidden lines. This variable becomes local automatically when set.
702
703@node Optional Mode Line
704@section Optional Mode Line Features
705
e598186c
RS
706@cindex line number display
707@cindex display of line number
6bf7aab6
DL
708@findex line-number-mode
709 The current line number of point appears in the mode line when Line
710Number mode is enabled. Use the command @kbd{M-x line-number-mode} to
711turn this mode on and off; normally it is on. The line number appears
712before the buffer percentage @var{pos}, with the letter @samp{L} to
713indicate what it is. @xref{Minor Modes}, for more information about
714minor modes and about how to use this command.
715
43f971ab
EZ
716@cindex narrowing, and line number display
717 If you have narrowed the buffer (@pxref{Narrowing}), the displayed
718line number is relative to the accessible portion of the buffer.
719
6bf7aab6
DL
720@vindex line-number-display-limit
721 If the buffer is very large (larger than the value of
722@code{line-number-display-limit}), then the line number doesn't appear.
723Emacs doesn't compute the line number when the buffer is large, because
43f971ab
EZ
724that would be too slow. Set it to @code{nil} to remove the limit.
725
726@vindex line-number-display-limit-width
727 Line-number computation can also be slow if the lines in the buffer
728are too long. For this reason, Emacs normally doesn't display line
729numbers if the average width, in characters, of lines near point is
730larger than the value of the variable
731@code{line-number-display-limit-width}. The default value is 200
732characters.
6bf7aab6
DL
733
734@cindex Column Number mode
735@cindex mode, Column Number
736@findex column-number-mode
737 You can also display the current column number by turning on Column
738Number mode. It displays the current column number preceded by the
739letter @samp{C}. Type @kbd{M-x column-number-mode} to toggle this mode.
740
741@findex display-time
742@cindex time (on mode line)
743 Emacs can optionally display the time and system load in all mode
4f00b8c1
DL
744lines. To enable this feature, type @kbd{M-x display-time} or customize
745the option @code{display-time-mode}. The information added to the mode
746line usually appears after the buffer name, before the mode names and
747their parentheses. It looks like this:
6bf7aab6
DL
748
749@example
750@var{hh}:@var{mm}pm @var{l.ll}
751@end example
752
753@noindent
754@vindex display-time-24hr-format
755Here @var{hh} and @var{mm} are the hour and minute, followed always by
756@samp{am} or @samp{pm}. @var{l.ll} is the average number of running
757processes in the whole system recently. (Some fields may be missing if
758your operating system cannot support them.) If you prefer time display
759in 24-hour format, set the variable @code{display-time-24hr-format}
760to @code{t}.
761
762@cindex mail (on mode line)
72bd7b7b
DL
763@vindex display-time-use-mail-icon
764@vindex display-time-mail-face
6bf7aab6 765 The word @samp{Mail} appears after the load level if there is mail
72bd7b7b
DL
766for you that you have not read yet. On a graphical display you can use
767an icon instead of @samp{Mail} by customizing
768@code{display-time-use-mail-icon}; this may save some space on the mode
769line. You can customize @code{display-time-mail-face} to make the mail
770indicator prominent.
6bf7aab6 771
47d7776c 772@cindex mode line, 3D appearance
bd3ead08
EZ
773@cindex attributes of mode line, changing
774@cindex non-integral number of lines in a window
04d0b662
RS
775 By default, the mode line is drawn on graphics displays with
7763D-style highlighting, like that of a button when it is not being
777pressed. If you don't like this effect, you can disable the 3D
778highlighting of the mode line, by customizing the attributes of the
779@code{mode-line} face in your @file{.emacs} init file, like this:
bd3ead08
EZ
780
781@example
04d0b662 782(set-face-attribute 'mode-line nil :box nil)
bd3ead08
EZ
783@end example
784
785@noindent
04d0b662 786Alternatively, you can turn off the box attribute in your
bd3ead08
EZ
787@file{.Xdefaults} file:
788
789@example
04d0b662 790Emacs.mode-line.AttributeBox: off
bd3ead08
EZ
791@end example
792
b9e58bf2 793@cindex non-selected windows, mode line appearance
ac6875fc 794 By default, the mode line of nonselected windows is displayed in a
1c9f5f23 795different face, called @code{mode-line-inactive}. Only the selected
ac6875fc
RS
796window is displayed in the @code{mode-line} face. This helps show
797which window is selected. When the minibuffer is selected, since
798it has no mode line, the window from which you activated the minibuffer
799has its mode line displayed using @code{mode-line}; as a result,
800ordinary entry to the minibuffer does not change any mode lines.
801
802@vindex mode-line-in-non-selected-windows
803 You can disable use of @code{mode-line-inactive} by setting variable
1c9f5f23
KS
804@code{mode-line-in-non-selected-windows} to @code{nil}; then all mode
805lines are displayed in the @code{mode-line} face.
b9e58bf2 806
6bf7aab6
DL
807@node Text Display
808@section How Text Is Displayed
809@cindex characters (in text)
810
811 ASCII printing characters (octal codes 040 through 0176) in Emacs
13b9ee95 812buffers are displayed with their graphics, as are non-ASCII multibyte
6bf7aab6
DL
813printing characters (octal codes above 0400).
814
815 Some ASCII control characters are displayed in special ways. The
816newline character (octal code 012) is displayed by starting a new line.
817The tab character (octal code 011) is displayed by moving to the next
818tab stop column (normally every 8 columns).
819
820 Other ASCII control characters are normally displayed as a caret
821(@samp{^}) followed by the non-control version of the character; thus,
822control-A is displayed as @samp{^A}.
823
7c9960d7
DL
824 Non-ASCII characters 0200 through 0237 (octal) are displayed with
825octal escape sequences; thus, character code 0230 (octal) is displayed
826as @samp{\230}. The display of character codes 0240 through 0377
827(octal) may be either as escape sequences or as graphics. They do not
04d0b662 828normally occur in multibyte buffers, but if they do, they are displayed
7c9960d7
DL
829as Latin-1 graphics. In unibyte mode, if you enable European display
830they are displayed using their graphics (assuming your terminal supports
831them), otherwise as escape sequences. @xref{Single-Byte Character
832Support}.
6bf7aab6 833
e598186c
RS
834@node Display Custom
835@section Customization of Display
6bf7aab6
DL
836
837 This section contains information for customization only. Beginning
838users should skip it.
839
840@vindex mode-line-inverse-video
dddbaa16
MB
841 The variable @code{mode-line-inverse-video} is an obsolete way of
842controlling whether the mode line is displayed in inverse video; the
843preferred way of doing this is to change the @code{mode-line} face.
46ff99c0
MB
844@xref{Mode Line}. However, if @code{mode-line-inverse-video} has a
845value of @code{nil}, then the @code{mode-line} face will be ignored,
846and mode-lines will be drawn using the default text face.
847@xref{Faces}.
6bf7aab6
DL
848
849@vindex inverse-video
850 If the variable @code{inverse-video} is non-@code{nil}, Emacs attempts
851to invert all the lines of the display from what they normally are.
852
853@vindex visible-bell
854 If the variable @code{visible-bell} is non-@code{nil}, Emacs attempts
855to make the whole screen blink when it would normally make an audible bell
856sound. This variable has no effect if your terminal does not have a way
857to make the screen blink.@refill
858
859@vindex no-redraw-on-reenter
860 When you reenter Emacs after suspending, Emacs normally clears the
861screen and redraws the entire display. On some terminals with more than
862one page of memory, it is possible to arrange the termcap entry so that
863the @samp{ti} and @samp{te} strings (output to the terminal when Emacs
864is entered and exited, respectively) switch between pages of memory so
865as to use one page for Emacs and another page for other output. Then
866you might want to set the variable @code{no-redraw-on-reenter}
867non-@code{nil}; this tells Emacs to assume, when resumed, that the
868screen page it is using still contains what Emacs last wrote there.
869
870@vindex echo-keystrokes
871 The variable @code{echo-keystrokes} controls the echoing of multi-character
872keys; its value is the number of seconds of pause required to cause echoing
873to start, or zero meaning don't echo at all. @xref{Echo Area}.
874
875@vindex ctl-arrow
13b9ee95 876 If the variable @code{ctl-arrow} is @code{nil}, all control characters in
6bf7aab6
DL
877the buffer are displayed with octal escape sequences, except for newline
878and tab. Altering the value of @code{ctl-arrow} makes it local to the
879current buffer; until that time, the default value is in effect. The
880default is initially @code{t}. @xref{Display Tables,, Display Tables,
881elisp, The Emacs Lisp Reference Manual}.
882
883@vindex tab-width
884 Normally, a tab character in the buffer is displayed as whitespace which
885extends to the next display tab stop position, and display tab stops come
886at intervals equal to eight spaces. The number of spaces per tab is
887controlled by the variable @code{tab-width}, which is made local by
888changing it, just like @code{ctl-arrow}. Note that how the tab character
889in the buffer is displayed has nothing to do with the definition of
890@key{TAB} as a command. The variable @code{tab-width} must have an
891integer value between 1 and 1000, inclusive.
892
893@c @vindex truncate-lines @c No index entry here, because we have one
894@c in the continuation section.
895 If the variable @code{truncate-lines} is non-@code{nil}, then each
896line of text gets just one screen line for display; if the text line is
897too long, display shows only the part that fits. If
898@code{truncate-lines} is @code{nil}, then long text lines display as
899more than one screen line, enough to show the whole text of the line.
900@xref{Continuation Lines}. Altering the value of @code{truncate-lines}
901makes it local to the current buffer; until that time, the default value
902is in effect. The default is initially @code{nil}.
903
904@c @vindex truncate-partial-width-windows @c Idx entry is in Split Windows.
905 If the variable @code{truncate-partial-width-windows} is
906non-@code{nil}, it forces truncation rather than continuation in any
907window less than the full width of the screen or frame, regardless of
908the value of @code{truncate-lines}. For information about side-by-side
909windows, see @ref{Split Window}. See also @ref{Display,, Display,
910elisp, The Emacs Lisp Reference Manual}.
911
912@vindex baud-rate
87c8b5fd
RS
913 The variable @code{baud-rate} holds the output speed of the
914terminal, as far as Emacs knows. Setting this variable does not
915change the speed of actual data transmission, but the value is used
916for calculations. On terminals, it affects padding, and decisions
917about whether to scroll part of the screen or redraw it instead.
c39937ea 918It also affects the behavior of incremental search.
860dab78 919
e598186c
RS
920 On window-systems, @code{baud-rate} is only used to determine how
921frequently to look for pending input during display updating. A
922higher value of @code{baud-rate} means that check for pending input
923will be done less frequently.
6bf7aab6
DL
924
925 You can customize the way any particular character code is displayed
926by means of a display table. @xref{Display Tables,, Display Tables,
927elisp, The Emacs Lisp Reference Manual}.
e598186c 928
62095f01
GM
929@cindex hourglass pointer display
930@vindex hourglass-delay
099bfef9
RS
931 On a window system, Emacs can optionally display the mouse pointer
932in a special shape to say that Emacs is busy. To turn this feature on
933or off, customize the group @code{cursor}. You can also control the
934amount of time Emacs must remain busy before the busy indicator is
62095f01 935displayed, by setting the variable @code{hourglass-delay}.
099bfef9 936
a66b12be
RS
937@findex tty-suppress-bold-inverse-default-colors
938 On some text-only terminals, bold face and inverse video together
939result in text that is hard to read. Call the function
940@code{tty-suppress-bold-inverse-default-colors} with a non-@code{nil}
941argument to suppress the effect of bold-face in this case.
942
099bfef9
RS
943@node Cursor Display
944@section Displaying the Cursor
945
e598186c 946@findex hl-line-mode
5c139d29 947@findex global-hl-line-mode
843c16a5 948@cindex highlight current line
e598186c
RS
949@findex blink-cursor-mode
950@cindex cursor, locating visually
951@cindex cursor, blinking
952 There are a number of ways to customize the display of the cursor.
777fcecf 953@kbd{M-x hl-line-mode} enables or disables a minor mode which
5c139d29
RS
954highlights the line containing point. @kbd{M-x global-hl-line-mode}
955enables the minor mode globally. On window systems, the command
e598186c
RS
956@kbd{M-x blink-cursor-mode} turns on or off the blinking of the
957cursor. (On terminals, the terminal itself blinks the cursor, and
87c8b5fd 958Emacs has no control over it.)
e598186c
RS
959
960 You can customize the cursor's color, and whether it blinks, using
961the @code{cursor} Custom group (@pxref{Easy Customization}).
099bfef9
RS
962
963@vindex x-stretch-cursor
964@cindex wide block cursor
965 When displaying on a window system, Emacs can optionally draw the
966block cursor as wide as the character under the cursor---for example,
967if the cursor is on a tab character, it would cover the full width
968occupied by that tab character. To enable this feature, set the
969variable @code{x-stretch-cursor} to a non-@code{nil} value.
0f613b80
RS
970
971@cindex cursor in non-selected windows
972@vindex cursor-in-non-selected-windows
4946337d
EZ
973 Normally, the cursor in non-selected windows is shown as a hollow box.
974To turn off cursor display in non-selected windows, customize the option
5359ed91 975@code{cursor-in-non-selected-windows} to assign it a @code{nil} value.