19.6 Scrolling
If a buffer contains text that is too large to fit entirely within a
window that is displaying the buffer, Emacs shows a contiguous portion of
the text. The portion shown always contains point.
Scrolling means moving text up or down in the window so that
different parts of the text are visible. Scrolling forward means that text
moves up, and new text appears at the bottom. Scrolling backward moves
text down and new text appears at the top.
Scrolling happens automatically if you move point past the bottom or top
of the window. You can also explicitly request scrolling with the commands
in this section.
- C-l
- Clear screen and redisplay, scrolling the selected window to center
point vertically within it (
recenter
).
- C-v
- Scroll forward (a windowful or a specified number of lines) (
scroll-up
).
- <NEXT>
- <PAGEDOWN>
- Likewise, scroll forward.
- M-v
- Scroll backward (
scroll-down
).
- <PRIOR>
- <PAGEUP>
- Likewise, scroll backward.
- arg C-l
- Scroll so point is on line arg (
recenter
).
- C-M-l
- Scroll heuristically to bring useful information onto the screen
(
reposition-window
).
The most basic scrolling command is C-l (recenter
) with
no argument. It scrolls the selected window so that point is halfway
down from the top of the window. On a text terminal, it also clears
the screen and redisplays all windows. That is useful in case the
screen is garbled (see Screen Garbled).
To read the buffer a windowful at a time, use C-v
(scroll-up
) with no argument. This scrolls forward by nearly
the whole window height. The effect is to take the two lines at the
bottom of the window and put them at the top, followed by nearly a
whole windowful of lines that were not previously visible. If point
was in the text that scrolled off the top, it ends up at the new top
of the window.
M-v (scroll-down
) with no argument scrolls backward in
a similar way, also with overlap. The number of lines of overlap
across a C-v or M-v is controlled by the variable
next-screen-context-lines
; by default, it is 2. The function
keys <NEXT> and <PRIOR>, or <PAGEDOWN> and <PAGEUP>,
are equivalent to C-v and M-v.
The commands C-v and M-v with a numeric argument scroll
the text in the selected window up or down a few lines. C-v
with an argument moves the text and point up, together, that many
lines; it brings the same number of new lines into view at the bottom
of the window. M-v with numeric argument scrolls the text
downward, bringing that many new lines into view at the top of the
window. C-v with a negative argument is like M-v and vice
versa.
The names of scroll commands are based on the direction that the
text moves in the window. Thus, the command to scroll forward is
called scroll-up
because it moves the text upward on the
screen. The keys <PAGEDOWN> and <PAGEUP> derive their names
and customary meanings from a different convention that developed
elsewhere; hence the strange result that <PAGEDOWN> runs
scroll-up
.
Some users like the full-screen scroll commands to keep point at the
same screen line. To enable this behavior, set the variable
scroll-preserve-screen-position
to a non-nil
value. In
this mode, when scrolling shifts point off the screen, or into the
scrolling margins, Emacs moves point to keep the same vertical
position within the window. This mode is convenient for browsing
through a file by scrolling by screenfuls; if you come back to the
screen where you started, point goes back to the line where it
started. However, this mode is inconvenient when you move to the next
screen in order to move point to the text there.
Another way to do scrolling is with C-l with a numeric argument.
C-l does not clear the screen when given an argument; it only scrolls
the selected window. With a positive argument n, it repositions text
to put point n lines down from the top. An argument of zero puts
point on the very top line. Point does not move with respect to the text;
rather, the text and point move rigidly on the screen. C-l with a
negative argument puts point that many lines from the bottom of the window.
For example, C-u - 1 C-l puts point on the bottom line, and C-u
- 5 C-l puts it five lines from the bottom. C-u C-l scrolls to put
point at the center (vertically) of the selected window.
The C-M-l command (reposition-window
) scrolls the current
window heuristically in a way designed to get useful information onto
the screen. For example, in a Lisp file, this command tries to get the
entire current defun onto the screen if possible.
Scrolling happens automatically when point moves out of the visible
portion of the text. Normally, automatic scrolling centers point
vertically within the window. However, if you set
scroll-conservatively
to a small number n, then if you
move point just a little off the screen—less than n
lines—then Emacs scrolls the text just far enough to bring point
back on screen. By default, scroll-conservatively
is 0.
When the window does scroll by a longer distance, you can control
how aggressively it scrolls, by setting the variables
scroll-up-aggressively
and scroll-down-aggressively
.
The value of scroll-up-aggressively
should be either
nil
, or a fraction f between 0 and 1. A fraction
specifies where on the screen to put point when scrolling upward.
More precisely, when a window scrolls up because point is above the
window start, the new start position is chosen to put point f
part of the window height from the top. The larger f, the more
aggressive the scrolling.
nil
, which is the default, scrolls to put point at the center.
So it is equivalent to .5.
Likewise, scroll-down-aggressively
is used for scrolling
down. The value, f, specifies how far point should be placed
from the bottom of the window; thus, as with
scroll-up-aggressively
, a larger value is more aggressive.
The variable scroll-margin
restricts how close point can come
to the top or bottom of a window. Its value is a number of screen
lines; if point comes within that many lines of the top or bottom of the
window, Emacs recenters the window. By default, scroll-margin
is
0.