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