Delete info on Font Lock Support Modes.
[bpt/emacs.git] / man / display.texi
CommitLineData
099bfef9 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
216
217 @dfn{Follow mode} is a minor mode that makes two windows showing the
218same buffer scroll as one tall ``virtual window.'' To use Follow mode,
219go to a frame with just one window, split it into two side-by-side
220windows using @kbd{C-x 3}, and then type @kbd{M-x follow-mode}. From
221then on, you can edit the buffer in either of the two windows, or scroll
222either one; the other window follows it.
223
224 To turn off Follow mode, type @kbd{M-x follow-mode} a second time.
225
226@node Selective Display
227@section Selective Display
228@findex set-selective-display
229@kindex C-x $
230
231 Emacs has the ability to hide lines indented more than a certain number
232of columns (you specify how many columns). You can use this to get an
233overview of a part of a program.
234
235 To hide lines, type @kbd{C-x $} (@code{set-selective-display}) with a
236numeric argument @var{n}. Then lines with at least @var{n} columns of
237indentation disappear from the screen. The only indication of their
238presence is that three dots (@samp{@dots{}}) appear at the end of each
239visible line that is followed by one or more hidden ones.
240
241 The commands @kbd{C-n} and @kbd{C-p} move across the hidden lines as
242if they were not there.
243
244 The hidden lines are still present in the buffer, and most editing
245commands see them as usual, so you may find point in the middle of the
246hidden text. When this happens, the cursor appears at the end of the
247previous line, after the three dots. If point is at the end of the
248visible line, before the newline that ends it, the cursor appears before
249the three dots.
250
251 To make all lines visible again, type @kbd{C-x $} with no argument.
252
253@vindex selective-display-ellipses
254 If you set the variable @code{selective-display-ellipses} to
255@code{nil}, the three dots do not appear at the end of a line that
256precedes hidden lines. Then there is no visible indication of the
257hidden lines. This variable becomes local automatically when set.
258
259@node Optional Mode Line
260@section Optional Mode Line Features
261
e598186c
RS
262@cindex line number display
263@cindex display of line number
6bf7aab6
DL
264@findex line-number-mode
265 The current line number of point appears in the mode line when Line
266Number mode is enabled. Use the command @kbd{M-x line-number-mode} to
267turn this mode on and off; normally it is on. The line number appears
268before the buffer percentage @var{pos}, with the letter @samp{L} to
269indicate what it is. @xref{Minor Modes}, for more information about
270minor modes and about how to use this command.
271
272@vindex line-number-display-limit
273 If the buffer is very large (larger than the value of
274@code{line-number-display-limit}), then the line number doesn't appear.
275Emacs doesn't compute the line number when the buffer is large, because
14977fea
DL
276that would be too slow. Set it to @code{nil} to remove the limit. If
277you have narrowed the buffer (@pxref{Narrowing}), the displayed line
278number is relative to the accessible portion of the buffer.
6bf7aab6
DL
279
280@cindex Column Number mode
281@cindex mode, Column Number
282@findex column-number-mode
283 You can also display the current column number by turning on Column
284Number mode. It displays the current column number preceded by the
285letter @samp{C}. Type @kbd{M-x column-number-mode} to toggle this mode.
286
287@findex display-time
288@cindex time (on mode line)
289 Emacs can optionally display the time and system load in all mode
4f00b8c1
DL
290lines. To enable this feature, type @kbd{M-x display-time} or customize
291the option @code{display-time-mode}. The information added to the mode
292line usually appears after the buffer name, before the mode names and
293their parentheses. It looks like this:
6bf7aab6
DL
294
295@example
296@var{hh}:@var{mm}pm @var{l.ll}
297@end example
298
299@noindent
300@vindex display-time-24hr-format
301Here @var{hh} and @var{mm} are the hour and minute, followed always by
302@samp{am} or @samp{pm}. @var{l.ll} is the average number of running
303processes in the whole system recently. (Some fields may be missing if
304your operating system cannot support them.) If you prefer time display
305in 24-hour format, set the variable @code{display-time-24hr-format}
306to @code{t}.
307
308@cindex mail (on mode line)
72bd7b7b
DL
309@vindex display-time-use-mail-icon
310@vindex display-time-mail-face
6bf7aab6 311 The word @samp{Mail} appears after the load level if there is mail
72bd7b7b
DL
312for you that you have not read yet. On a graphical display you can use
313an icon instead of @samp{Mail} by customizing
314@code{display-time-use-mail-icon}; this may save some space on the mode
315line. You can customize @code{display-time-mail-face} to make the mail
316indicator prominent.
6bf7aab6 317
bd3ead08
EZ
318@cindex mode line, 3D appearence
319@cindex attributes of mode line, changing
320@cindex non-integral number of lines in a window
321 By default, the mode line is drawn on graphics displays as a 3D
322released button. Depending on the font used for the mode line's text,
323this might make the mode line use more space than a text line in a
324window, and cause the last line of the window be partially obscured.
325That is, the window displays a non-integral number of text lines. If
326you don't like this effect, you can disable the 3D appearence of the
327mode line by customizing the attributes of the @code{mode-line} face in
328your @file{.emacs} init file, like this:
329
330@example
331 (set-face-attribute 'mode-line nil :box nil)
332@end example
333
334@noindent
335Alternatively, you could turn off the box attribute in your
336@file{.Xdefaults} file:
337
338@example
339 Emacs.mode-line.AttributeBox: off
340@end example
341
6bf7aab6
DL
342@node Text Display
343@section How Text Is Displayed
344@cindex characters (in text)
345
346 ASCII printing characters (octal codes 040 through 0176) in Emacs
347buffers are displayed with their graphics. So are non-ASCII multibyte
348printing characters (octal codes above 0400).
349
350 Some ASCII control characters are displayed in special ways. The
351newline character (octal code 012) is displayed by starting a new line.
352The tab character (octal code 011) is displayed by moving to the next
353tab stop column (normally every 8 columns).
354
355 Other ASCII control characters are normally displayed as a caret
356(@samp{^}) followed by the non-control version of the character; thus,
357control-A is displayed as @samp{^A}.
358
7c9960d7
DL
359 Non-ASCII characters 0200 through 0237 (octal) are displayed with
360octal escape sequences; thus, character code 0230 (octal) is displayed
361as @samp{\230}. The display of character codes 0240 through 0377
362(octal) may be either as escape sequences or as graphics. They do not
363normally occur in multibyte buffers but if they do, they are displayed
364as Latin-1 graphics. In unibyte mode, if you enable European display
365they are displayed using their graphics (assuming your terminal supports
366them), otherwise as escape sequences. @xref{Single-Byte Character
367Support}.
6bf7aab6 368
e598186c
RS
369@node Display Custom
370@section Customization of Display
6bf7aab6
DL
371
372 This section contains information for customization only. Beginning
373users should skip it.
374
375@vindex mode-line-inverse-video
dddbaa16
MB
376 The variable @code{mode-line-inverse-video} is an obsolete way of
377controlling whether the mode line is displayed in inverse video; the
378preferred way of doing this is to change the @code{mode-line} face.
379@xref{Mode Line}. If you specify the foreground color for the
380@code{mode-line} face, and @code{mode-line-inverse-video} is
381non-@code{nil}, then the default background color for that face is the
382usual foreground color. @xref{Faces}.
6bf7aab6
DL
383
384@vindex inverse-video
385 If the variable @code{inverse-video} is non-@code{nil}, Emacs attempts
386to invert all the lines of the display from what they normally are.
387
388@vindex visible-bell
389 If the variable @code{visible-bell} is non-@code{nil}, Emacs attempts
390to make the whole screen blink when it would normally make an audible bell
391sound. This variable has no effect if your terminal does not have a way
392to make the screen blink.@refill
393
394@vindex no-redraw-on-reenter
395 When you reenter Emacs after suspending, Emacs normally clears the
396screen and redraws the entire display. On some terminals with more than
397one page of memory, it is possible to arrange the termcap entry so that
398the @samp{ti} and @samp{te} strings (output to the terminal when Emacs
399is entered and exited, respectively) switch between pages of memory so
400as to use one page for Emacs and another page for other output. Then
401you might want to set the variable @code{no-redraw-on-reenter}
402non-@code{nil}; this tells Emacs to assume, when resumed, that the
403screen page it is using still contains what Emacs last wrote there.
404
405@vindex echo-keystrokes
406 The variable @code{echo-keystrokes} controls the echoing of multi-character
407keys; its value is the number of seconds of pause required to cause echoing
408to start, or zero meaning don't echo at all. @xref{Echo Area}.
409
410@vindex ctl-arrow
411 If the variable @code{ctl-arrow} is @code{nil}, control characters in
412the buffer are displayed with octal escape sequences, except for newline
413and tab. Altering the value of @code{ctl-arrow} makes it local to the
414current buffer; until that time, the default value is in effect. The
415default is initially @code{t}. @xref{Display Tables,, Display Tables,
416elisp, The Emacs Lisp Reference Manual}.
417
418@vindex tab-width
419 Normally, a tab character in the buffer is displayed as whitespace which
420extends to the next display tab stop position, and display tab stops come
421at intervals equal to eight spaces. The number of spaces per tab is
422controlled by the variable @code{tab-width}, which is made local by
423changing it, just like @code{ctl-arrow}. Note that how the tab character
424in the buffer is displayed has nothing to do with the definition of
425@key{TAB} as a command. The variable @code{tab-width} must have an
426integer value between 1 and 1000, inclusive.
427
428@c @vindex truncate-lines @c No index entry here, because we have one
429@c in the continuation section.
430 If the variable @code{truncate-lines} is non-@code{nil}, then each
431line of text gets just one screen line for display; if the text line is
432too long, display shows only the part that fits. If
433@code{truncate-lines} is @code{nil}, then long text lines display as
434more than one screen line, enough to show the whole text of the line.
435@xref{Continuation Lines}. Altering the value of @code{truncate-lines}
436makes it local to the current buffer; until that time, the default value
437is in effect. The default is initially @code{nil}.
438
439@c @vindex truncate-partial-width-windows @c Idx entry is in Split Windows.
440 If the variable @code{truncate-partial-width-windows} is
441non-@code{nil}, it forces truncation rather than continuation in any
442window less than the full width of the screen or frame, regardless of
443the value of @code{truncate-lines}. For information about side-by-side
444windows, see @ref{Split Window}. See also @ref{Display,, Display,
445elisp, The Emacs Lisp Reference Manual}.
446
447@vindex baud-rate
87c8b5fd
RS
448 The variable @code{baud-rate} holds the output speed of the
449terminal, as far as Emacs knows. Setting this variable does not
450change the speed of actual data transmission, but the value is used
451for calculations. On terminals, it affects padding, and decisions
452about whether to scroll part of the screen or redraw it instead.
860dab78 453
e598186c
RS
454 On window-systems, @code{baud-rate} is only used to determine how
455frequently to look for pending input during display updating. A
456higher value of @code{baud-rate} means that check for pending input
457will be done less frequently.
6bf7aab6
DL
458
459 You can customize the way any particular character code is displayed
460by means of a display table. @xref{Display Tables,, Display Tables,
461elisp, The Emacs Lisp Reference Manual}.
e598186c 462
099bfef9
RS
463@cindex busy-cursor display
464@vindex busy-cursor-delay
465 On a window system, Emacs can optionally display the mouse pointer
466in a special shape to say that Emacs is busy. To turn this feature on
467or off, customize the group @code{cursor}. You can also control the
468amount of time Emacs must remain busy before the busy indicator is
469displayed, by setting the variable @code{busy-cursor-delay}.
470
471@node Cursor Display
472@section Displaying the Cursor
473
e598186c
RS
474@findex hl-line-mode
475@findex blink-cursor-mode
476@cindex cursor, locating visually
477@cindex cursor, blinking
478 There are a number of ways to customize the display of the cursor.
479@kbd{M-x hl-line-mode} enables or disables a global minor mode which
099bfef9 480highlights the line containing point. On window systems, the command
e598186c
RS
481@kbd{M-x blink-cursor-mode} turns on or off the blinking of the
482cursor. (On terminals, the terminal itself blinks the cursor, and
87c8b5fd 483Emacs has no control over it.)
e598186c
RS
484
485 You can customize the cursor's color, and whether it blinks, using
486the @code{cursor} Custom group (@pxref{Easy Customization}).
099bfef9
RS
487
488@vindex x-stretch-cursor
489@cindex wide block cursor
490 When displaying on a window system, Emacs can optionally draw the
491block cursor as wide as the character under the cursor---for example,
492if the cursor is on a tab character, it would cover the full width
493occupied by that tab character. To enable this feature, set the
494variable @code{x-stretch-cursor} to a non-@code{nil} value.