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