(Faces, Font Lock, Highlight Changes)
[bpt/emacs.git] / man / display.texi
CommitLineData
802b0ea7 1@c This is part of the Emacs manual.
dddbaa16 2@c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997, 2000 Free Software Foundation, Inc.
6bf7aab6
DL
3@c See file emacs.texi for copying conditions.
4@node Display, Search, Registers, Top
5@chapter Controlling the Display
6
7 Since only part of a large buffer fits in the window, Emacs tries to
8show a part that is likely to be interesting. Display-control commands
9allow you to specify which part of the text you want to see, and how to
10display it.
11
12@menu
13* Scrolling:: Moving text up and down in a window.
14* Horizontal Scrolling:: Moving text left and right in a window.
15* Follow Mode:: Follow mode lets two windows scroll as one.
16* Selective Display:: Hiding lines with lots of indentation.
17* Optional Mode Line:: Optional mode line display features.
18* Text Display:: How text characters are normally displayed.
e598186c 19* Display Custom:: Information on variables for customizing display.
099bfef9 20* Cursor Display:: Features for displaying the cursor.
6bf7aab6
DL
21@end menu
22
23@node Scrolling
24@section Scrolling
25
26 If a buffer contains text that is too large to fit entirely within a
27window that is displaying the buffer, Emacs shows a contiguous portion of
28the text. The portion shown always contains point.
29
30@cindex scrolling
31 @dfn{Scrolling} means moving text up or down in the window so that
32different parts of the text are visible. Scrolling forward means that text
33moves up, and new text appears at the bottom. Scrolling backward moves
34text down and new text appears at the top.
35
36 Scrolling happens automatically if you move point past the bottom or top
37of the window. You can also explicitly request scrolling with the commands
38in this section.
39
40@table @kbd
41@item C-l
42Clear screen and redisplay, scrolling the selected window to center
43point vertically within it (@code{recenter}).
44@item C-v
45Scroll forward (a windowful or a specified number of lines) (@code{scroll-up}).
46@item @key{NEXT}
47Likewise, scroll forward.
48@item M-v
49Scroll backward (@code{scroll-down}).
50@item @key{PRIOR}
51Likewise, scroll backward.
52@item @var{arg} C-l
53Scroll so point is on line @var{arg} (@code{recenter}).
54@item C-M-l
55Scroll heuristically to bring useful information onto the screen
56(@code{reposition-window}).
57@end table
58
59@kindex C-l
60@findex recenter
61 The most basic scrolling command is @kbd{C-l} (@code{recenter}) with
62no argument. It clears the entire screen and redisplays all windows.
63In addition, it scrolls the selected window so that point is halfway
64down from the top of the window.
65
66@kindex C-v
67@kindex M-v
68@kindex NEXT
69@kindex PRIOR
70@findex scroll-up
71@findex scroll-down
72 The scrolling commands @kbd{C-v} and @kbd{M-v} let you move all the text
73in the window up or down a few lines. @kbd{C-v} (@code{scroll-up}) with an
74argument shows you that many more lines at the bottom of the window, moving
75the text and point up together as @kbd{C-l} might. @kbd{C-v} with a
76negative argument shows you more lines at the top of the window.
77@kbd{M-v} (@code{scroll-down}) is like @kbd{C-v}, but moves in the
78opposite direction. The function keys @key{NEXT} and @key{PRIOR} are
79equivalent to @kbd{C-v} and @kbd{M-v}.
80
81 The names of scroll commands are based on the direction that the text
82moves in the window. Thus, the command to scroll forward is called
83@code{scroll-up} because it moves the text upward on the screen.
84
85@vindex next-screen-context-lines
86 To read the buffer a windowful at a time, use @kbd{C-v} with no argument.
87It takes the last two lines at the bottom of the window and puts them at
88the top, followed by nearly a whole windowful of lines not previously
89visible. If point was in the text scrolled off the top, it moves to the
90new top of the window. @kbd{M-v} with no argument moves backward with
91overlap similarly. The number of lines of overlap across a @kbd{C-v} or
92@kbd{M-v} is controlled by the variable @code{next-screen-context-lines}; by
93default, it is 2.
94
95@vindex scroll-preserve-screen-position
96 Some users like the full-screen scroll commands to keep point at the
97same screen line. To enable this behavior, set the variable
98@code{scroll-preserve-screen-position} to a non-@code{nil} value. This
99mode is convenient for browsing through a file by scrolling by
100screenfuls; if you come back to the screen where you started, point goes
101back to the line where it started. However, this mode is inconvenient
102when you move to the next screen in order to move point to the text
103there.
104
105 Another way to do scrolling is with @kbd{C-l} with a numeric argument.
106@kbd{C-l} does not clear the screen when given an argument; it only scrolls
107the selected window. With a positive argument @var{n}, it repositions text
108to put point @var{n} lines down from the top. An argument of zero puts
109point on the very top line. Point does not move with respect to the text;
110rather, the text and point move rigidly on the screen. @kbd{C-l} with a
111negative argument puts point that many lines from the bottom of the window.
112For example, @kbd{C-u - 1 C-l} puts point on the bottom line, and @kbd{C-u
113- 5 C-l} puts it five lines from the bottom. Just @kbd{C-u} as argument,
114as in @kbd{C-u C-l}, scrolls point to the center of the selected window.
115
116@kindex C-M-l
117@findex reposition-window
118 The @kbd{C-M-l} command (@code{reposition-window}) scrolls the current
119window heuristically in a way designed to get useful information onto
120the screen. For example, in a Lisp file, this command tries to get the
121entire current defun onto the screen if possible.
122
123@vindex scroll-conservatively
124 Scrolling happens automatically if point has moved out of the visible
125portion of the text when it is time to display. Normally, automatic
126scrolling centers point vertically within the window. However, if you
127set @code{scroll-conservatively} to a small number @var{n}, then if you
128move point just a little off the screen---less than @var{n} lines---then
129Emacs scrolls the text just far enough to bring point back on screen.
130By default, @code{scroll-conservatively} is 0.
131
6dd5e8cc
EZ
132@cindex aggressive scrolling
133@vindex scroll-up-aggressively
134@vindex scroll-down-aggressively
e598186c
RS
135 When the window does scroll by a longer distance, you can control
136how aggressively it scrolls, by setting the variables
137@code{scroll-up-aggressively} and @code{scroll-down-aggressively}.
138The value of @code{scroll-up-aggressively} should be either
139@code{nil}, or a fraction @var{f} between 0 and 1. A fraction
140specifies where on the screen to put point when scrolling upward.
141More precisely, when a window scrolls up because point is above the
142window start, the new start position is chosen to put point @var{f}
143part of the window height from the top. The larger @var{f}, the more
144aggressive the scrolling.
145
146 @code{nil}, which is the default, scrolls to put point at the center.
147So it is equivalent to .5.
148
149 Likewise, @code{scroll-down-aggressively} is used for scrolling
150down. The value, @var{f}, specifies how far point should be placed
151from the bottom of the window; thus, as with
152@code{scroll-up-aggressively}, a larger value is more aggressive.
6dd5e8cc 153
6bf7aab6
DL
154@vindex scroll-margin
155 The variable @code{scroll-margin} restricts how close point can come
156to the top or bottom of a window. Its value is a number of screen
157lines; if point comes within that many lines of the top or bottom of the
158window, Emacs recenters the window. By default, @code{scroll-margin} is
1590.
160
161@node Horizontal Scrolling
162@section Horizontal Scrolling
163@cindex horizontal scrolling
164
165 @dfn{Horizontal scrolling} means shifting all the lines sideways
e598186c
RS
166within a window---so that some of the text near the left margin is not
167displayed at all. Emacs does this automatically, in any window that
168uses line truncation rather than continuation: whenever point moves
169off the left or right edge of the screen, Emacs scrolls the buffer
170horizontally to make point visible.
171
172 When a window has been scrolled horizontally, text lines are truncated
173rather than continued (@pxref{Continuation Lines}), with a @samp{$}
174appearing in the first column when there is text truncated to the left,
175and in the last column when there is text truncated to the right.
176
177 You can use these commands to do explicit horizontal scrolling.
6bf7aab6
DL
178
179@table @kbd
180@item C-x <
181Scroll text in current window to the left (@code{scroll-left}).
182@item C-x >
183Scroll to the right (@code{scroll-right}).
184@end table
185
6bf7aab6
DL
186@kindex C-x <
187@kindex C-x >
188@findex scroll-left
189@findex scroll-right
190 The command @kbd{C-x <} (@code{scroll-left}) scrolls the selected
191window to the left by @var{n} columns with argument @var{n}. This moves
192part of the beginning of each line off the left edge of the window.
193With no argument, it scrolls by almost the full width of the window (two
194columns less, to be precise).
195
196 @kbd{C-x >} (@code{scroll-right}) scrolls similarly to the right. The
197window cannot be scrolled any farther to the right once it is displayed
198normally (with each line starting at the window's left margin);
199attempting to do so has no effect. This means that you don't have to
200calculate the argument precisely for @w{@kbd{C-x >}}; any sufficiently large
201argument will restore the normal display.
202
e598186c
RS
203 If you scroll a window horizontally by hand, that sets a lower bound
204for automatic horizontal scrolling. Automatic scrolling will continue
205to scroll the window, but never further to the right than the amount
206you previously set by @code{scroll-left}.
6bf7aab6 207
e598186c
RS
208@vindex automatic-hscrolling
209 To disable automatic horizontal scrolling, set the variable
210@code{automatic-hscrolling} to @code{nil}.
03ff8aab 211
6bf7aab6
DL
212@node Follow Mode
213@section Follow Mode
214@cindex Follow mode
215@cindex mode, Follow
fd3d3075
RS
216@findex follow-mode
217@cindex windows, synchronizing
218@cindex synchronizing windows
6bf7aab6
DL
219
220 @dfn{Follow mode} is a minor mode that makes two windows showing the
221same buffer scroll as one tall ``virtual window.'' To use Follow mode,
222go to a frame with just one window, split it into two side-by-side
223windows using @kbd{C-x 3}, and then type @kbd{M-x follow-mode}. From
224then on, you can edit the buffer in either of the two windows, or scroll
225either one; the other window follows it.
226
8f399c9b
RS
227 In Follow mode, if you move point outside the portion visible in one
228window and into the portion visible in the other window, that selects
229the other window---again, treating the two as if they were parts of
230one large window.
231
6bf7aab6
DL
232 To turn off Follow mode, type @kbd{M-x follow-mode} a second time.
233
234@node Selective Display
235@section Selective Display
4946337d 236@cindex selective display
6bf7aab6
DL
237@findex set-selective-display
238@kindex C-x $
239
240 Emacs has the ability to hide lines indented more than a certain number
241of columns (you specify how many columns). You can use this to get an
242overview of a part of a program.
243
244 To hide lines, type @kbd{C-x $} (@code{set-selective-display}) with a
245numeric argument @var{n}. Then lines with at least @var{n} columns of
246indentation disappear from the screen. The only indication of their
247presence is that three dots (@samp{@dots{}}) appear at the end of each
248visible line that is followed by one or more hidden ones.
249
250 The commands @kbd{C-n} and @kbd{C-p} move across the hidden lines as
251if they were not there.
252
253 The hidden lines are still present in the buffer, and most editing
254commands see them as usual, so you may find point in the middle of the
255hidden text. When this happens, the cursor appears at the end of the
256previous line, after the three dots. If point is at the end of the
257visible line, before the newline that ends it, the cursor appears before
258the three dots.
259
260 To make all lines visible again, type @kbd{C-x $} with no argument.
261
262@vindex selective-display-ellipses
263 If you set the variable @code{selective-display-ellipses} to
264@code{nil}, the three dots do not appear at the end of a line that
265precedes hidden lines. Then there is no visible indication of the
266hidden lines. This variable becomes local automatically when set.
267
268@node Optional Mode Line
269@section Optional Mode Line Features
270
e598186c
RS
271@cindex line number display
272@cindex display of line number
6bf7aab6
DL
273@findex line-number-mode
274 The current line number of point appears in the mode line when Line
275Number mode is enabled. Use the command @kbd{M-x line-number-mode} to
276turn this mode on and off; normally it is on. The line number appears
277before the buffer percentage @var{pos}, with the letter @samp{L} to
278indicate what it is. @xref{Minor Modes}, for more information about
279minor modes and about how to use this command.
280
281@vindex line-number-display-limit
282 If the buffer is very large (larger than the value of
283@code{line-number-display-limit}), then the line number doesn't appear.
284Emacs doesn't compute the line number when the buffer is large, because
14977fea
DL
285that would be too slow. Set it to @code{nil} to remove the limit. If
286you have narrowed the buffer (@pxref{Narrowing}), the displayed line
287number is relative to the accessible portion of the buffer.
6bf7aab6
DL
288
289@cindex Column Number mode
290@cindex mode, Column Number
291@findex column-number-mode
292 You can also display the current column number by turning on Column
293Number mode. It displays the current column number preceded by the
294letter @samp{C}. Type @kbd{M-x column-number-mode} to toggle this mode.
295
296@findex display-time
297@cindex time (on mode line)
298 Emacs can optionally display the time and system load in all mode
4f00b8c1
DL
299lines. To enable this feature, type @kbd{M-x display-time} or customize
300the option @code{display-time-mode}. The information added to the mode
301line usually appears after the buffer name, before the mode names and
302their parentheses. It looks like this:
6bf7aab6
DL
303
304@example
305@var{hh}:@var{mm}pm @var{l.ll}
306@end example
307
308@noindent
309@vindex display-time-24hr-format
310Here @var{hh} and @var{mm} are the hour and minute, followed always by
311@samp{am} or @samp{pm}. @var{l.ll} is the average number of running
312processes in the whole system recently. (Some fields may be missing if
313your operating system cannot support them.) If you prefer time display
314in 24-hour format, set the variable @code{display-time-24hr-format}
315to @code{t}.
316
317@cindex mail (on mode line)
72bd7b7b
DL
318@vindex display-time-use-mail-icon
319@vindex display-time-mail-face
6bf7aab6 320 The word @samp{Mail} appears after the load level if there is mail
72bd7b7b
DL
321for you that you have not read yet. On a graphical display you can use
322an icon instead of @samp{Mail} by customizing
323@code{display-time-use-mail-icon}; this may save some space on the mode
324line. You can customize @code{display-time-mail-face} to make the mail
325indicator prominent.
6bf7aab6 326
bd3ead08
EZ
327@cindex mode line, 3D appearence
328@cindex attributes of mode line, changing
329@cindex non-integral number of lines in a window
330 By default, the mode line is drawn on graphics displays as a 3D
331released button. Depending on the font used for the mode line's text,
332this might make the mode line use more space than a text line in a
333window, and cause the last line of the window be partially obscured.
334That is, the window displays a non-integral number of text lines. If
335you don't like this effect, you can disable the 3D appearence of the
336mode line by customizing the attributes of the @code{mode-line} face in
337your @file{.emacs} init file, like this:
338
339@example
340 (set-face-attribute 'mode-line nil :box nil)
341@end example
342
343@noindent
344Alternatively, you could turn off the box attribute in your
345@file{.Xdefaults} file:
346
347@example
348 Emacs.mode-line.AttributeBox: off
349@end example
350
6bf7aab6
DL
351@node Text Display
352@section How Text Is Displayed
353@cindex characters (in text)
354
355 ASCII printing characters (octal codes 040 through 0176) in Emacs
356buffers are displayed with their graphics. So are non-ASCII multibyte
357printing characters (octal codes above 0400).
358
359 Some ASCII control characters are displayed in special ways. The
360newline character (octal code 012) is displayed by starting a new line.
361The tab character (octal code 011) is displayed by moving to the next
362tab stop column (normally every 8 columns).
363
364 Other ASCII control characters are normally displayed as a caret
365(@samp{^}) followed by the non-control version of the character; thus,
366control-A is displayed as @samp{^A}.
367
7c9960d7
DL
368 Non-ASCII characters 0200 through 0237 (octal) are displayed with
369octal escape sequences; thus, character code 0230 (octal) is displayed
370as @samp{\230}. The display of character codes 0240 through 0377
371(octal) may be either as escape sequences or as graphics. They do not
372normally occur in multibyte buffers but if they do, they are displayed
373as Latin-1 graphics. In unibyte mode, if you enable European display
374they are displayed using their graphics (assuming your terminal supports
375them), otherwise as escape sequences. @xref{Single-Byte Character
376Support}.
6bf7aab6 377
e598186c
RS
378@node Display Custom
379@section Customization of Display
6bf7aab6
DL
380
381 This section contains information for customization only. Beginning
382users should skip it.
383
384@vindex mode-line-inverse-video
dddbaa16
MB
385 The variable @code{mode-line-inverse-video} is an obsolete way of
386controlling whether the mode line is displayed in inverse video; the
387preferred way of doing this is to change the @code{mode-line} face.
388@xref{Mode Line}. If you specify the foreground color for the
389@code{mode-line} face, and @code{mode-line-inverse-video} is
390non-@code{nil}, then the default background color for that face is the
391usual foreground color. @xref{Faces}.
6bf7aab6
DL
392
393@vindex inverse-video
394 If the variable @code{inverse-video} is non-@code{nil}, Emacs attempts
395to invert all the lines of the display from what they normally are.
396
397@vindex visible-bell
398 If the variable @code{visible-bell} is non-@code{nil}, Emacs attempts
399to make the whole screen blink when it would normally make an audible bell
400sound. This variable has no effect if your terminal does not have a way
401to make the screen blink.@refill
402
403@vindex no-redraw-on-reenter
404 When you reenter Emacs after suspending, Emacs normally clears the
405screen and redraws the entire display. On some terminals with more than
406one page of memory, it is possible to arrange the termcap entry so that
407the @samp{ti} and @samp{te} strings (output to the terminal when Emacs
408is entered and exited, respectively) switch between pages of memory so
409as to use one page for Emacs and another page for other output. Then
410you might want to set the variable @code{no-redraw-on-reenter}
411non-@code{nil}; this tells Emacs to assume, when resumed, that the
412screen page it is using still contains what Emacs last wrote there.
413
414@vindex echo-keystrokes
415 The variable @code{echo-keystrokes} controls the echoing of multi-character
416keys; its value is the number of seconds of pause required to cause echoing
417to start, or zero meaning don't echo at all. @xref{Echo Area}.
418
419@vindex ctl-arrow
420 If the variable @code{ctl-arrow} is @code{nil}, control characters in
421the buffer are displayed with octal escape sequences, except for newline
422and tab. Altering the value of @code{ctl-arrow} makes it local to the
423current buffer; until that time, the default value is in effect. The
424default is initially @code{t}. @xref{Display Tables,, Display Tables,
425elisp, The Emacs Lisp Reference Manual}.
426
427@vindex tab-width
428 Normally, a tab character in the buffer is displayed as whitespace which
429extends to the next display tab stop position, and display tab stops come
430at intervals equal to eight spaces. The number of spaces per tab is
431controlled by the variable @code{tab-width}, which is made local by
432changing it, just like @code{ctl-arrow}. Note that how the tab character
433in the buffer is displayed has nothing to do with the definition of
434@key{TAB} as a command. The variable @code{tab-width} must have an
435integer value between 1 and 1000, inclusive.
436
437@c @vindex truncate-lines @c No index entry here, because we have one
438@c in the continuation section.
439 If the variable @code{truncate-lines} is non-@code{nil}, then each
440line of text gets just one screen line for display; if the text line is
441too long, display shows only the part that fits. If
442@code{truncate-lines} is @code{nil}, then long text lines display as
443more than one screen line, enough to show the whole text of the line.
444@xref{Continuation Lines}. Altering the value of @code{truncate-lines}
445makes it local to the current buffer; until that time, the default value
446is in effect. The default is initially @code{nil}.
447
448@c @vindex truncate-partial-width-windows @c Idx entry is in Split Windows.
449 If the variable @code{truncate-partial-width-windows} is
450non-@code{nil}, it forces truncation rather than continuation in any
451window less than the full width of the screen or frame, regardless of
452the value of @code{truncate-lines}. For information about side-by-side
453windows, see @ref{Split Window}. See also @ref{Display,, Display,
454elisp, The Emacs Lisp Reference Manual}.
455
456@vindex baud-rate
87c8b5fd
RS
457 The variable @code{baud-rate} holds the output speed of the
458terminal, as far as Emacs knows. Setting this variable does not
459change the speed of actual data transmission, but the value is used
460for calculations. On terminals, it affects padding, and decisions
461about whether to scroll part of the screen or redraw it instead.
860dab78 462
e598186c
RS
463 On window-systems, @code{baud-rate} is only used to determine how
464frequently to look for pending input during display updating. A
465higher value of @code{baud-rate} means that check for pending input
466will be done less frequently.
6bf7aab6
DL
467
468 You can customize the way any particular character code is displayed
469by means of a display table. @xref{Display Tables,, Display Tables,
470elisp, The Emacs Lisp Reference Manual}.
e598186c 471
62095f01
GM
472@cindex hourglass pointer display
473@vindex hourglass-delay
099bfef9
RS
474 On a window system, Emacs can optionally display the mouse pointer
475in a special shape to say that Emacs is busy. To turn this feature on
476or off, customize the group @code{cursor}. You can also control the
477amount of time Emacs must remain busy before the busy indicator is
62095f01 478displayed, by setting the variable @code{hourglass-delay}.
099bfef9
RS
479
480@node Cursor Display
481@section Displaying the Cursor
482
e598186c
RS
483@findex hl-line-mode
484@findex blink-cursor-mode
485@cindex cursor, locating visually
486@cindex cursor, blinking
487 There are a number of ways to customize the display of the cursor.
488@kbd{M-x hl-line-mode} enables or disables a global minor mode which
099bfef9 489highlights the line containing point. On window systems, the command
e598186c
RS
490@kbd{M-x blink-cursor-mode} turns on or off the blinking of the
491cursor. (On terminals, the terminal itself blinks the cursor, and
87c8b5fd 492Emacs has no control over it.)
e598186c
RS
493
494 You can customize the cursor's color, and whether it blinks, using
495the @code{cursor} Custom group (@pxref{Easy Customization}).
099bfef9
RS
496
497@vindex x-stretch-cursor
498@cindex wide block cursor
499 When displaying on a window system, Emacs can optionally draw the
500block cursor as wide as the character under the cursor---for example,
501if the cursor is on a tab character, it would cover the full width
502occupied by that tab character. To enable this feature, set the
503variable @code{x-stretch-cursor} to a non-@code{nil} value.
0f613b80
RS
504
505@cindex cursor in non-selected windows
4946337d 506@vindex show-cursor-in-non-selected-windows
0f613b80 507@vindex cursor-in-non-selected-windows
4946337d
EZ
508 Normally, the cursor in non-selected windows is shown as a hollow box.
509To turn off cursor display in non-selected windows, customize the option
510@code{show-cursor-in-non-selected-windows}, or set the variable
511@code{cursor-in-non-selected-windows} to @code{nil}.