Mercurial > emacs
changeset 63865:a473419e315e
(window_scroll_pixel_based, window_scroll_line_based):
Handle `scroll-preserve-screen-position' non-nil, non-t specially.
(syms_of_window): <scroll-preserve-screen-position>: Doc fix.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 29 Jun 2005 23:29:01 +0000 |
parents | 32b373355253 |
children | 8fe9596925cd |
files | src/window.c |
diffstat | 1 files changed, 15 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/window.c Wed Jun 29 22:39:45 2005 +0000 +++ b/src/window.c Wed Jun 29 23:29:01 2005 +0000 @@ -4783,7 +4783,9 @@ /* We moved the window start towards ZV, so PT may be now in the scroll margin at the top. */ move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS); - if (IT_CHARPOS (it) == PT && it.current_y >= this_scroll_margin) + if (IT_CHARPOS (it) == PT && it.current_y >= this_scroll_margin + && (NILP (Vscroll_preserve_screen_position) + || EQ (Vscroll_preserve_screen_position, Qt))) /* We found PT at a legitimate height. Leave it alone. */ ; else if (preserve_y >= 0) @@ -4836,7 +4838,9 @@ partial_p = it.current_y > it.last_visible_y; } - if (charpos == PT && !partial_p) + if (charpos == PT && !partial_p + && (NILP (Vscroll_preserve_screen_position) + || EQ (Vscroll_preserve_screen_position, Qt))) /* We found PT before we found the display margin, so PT is ok. */ ; else if (preserve_y >= 0) @@ -4951,7 +4955,8 @@ the window-scroll-functions. */ w->force_start = Qt; - if (whole && !NILP (Vscroll_preserve_screen_position)) + if (!NILP (Vscroll_preserve_screen_position) + && (whole || !EQ (Vscroll_preserve_screen_position, Qt))) { SET_PT_BOTH (pos, pos_byte); Fvertical_motion (make_number (original_vpos), window); @@ -6914,9 +6919,13 @@ DEFVAR_LISP ("scroll-preserve-screen-position", &Vscroll_preserve_screen_position, - doc: /* *Non-nil means scroll commands move point to keep its screen line unchanged. -This is only when it is impossible to keep point fixed and still -scroll as specified. */); + doc: /* *Controls if scroll commands move point to keep its screen line unchanged. +A value of nil means point does not keep its screen position except +at the scroll margin or window boundary respectively. +A value of t means point keeps its screen position if the scroll +command moved it vertically out of the window, e.g. when scrolling +by full screens. +Any other value means point always keeps its screen position. */); Vscroll_preserve_screen_position = Qnil; DEFVAR_LISP ("window-configuration-change-hook",