+2010-04-14 Juri Linkov <juri@jurta.org>
+
+ * mwheel.el (scroll-preserve-screen-position-commands):
+ Add mwheel-scroll to this list of commands.
+
+ * simple.el (scroll-preserve-screen-position-commands):
+ Add scroll-up-command, scroll-down-command, scroll-up-line,
+ scroll-down-line to this list of commands.
+
2010-04-13 Stefan Monnier <monnier@iro.umontreal.ca>
* obsolete/complete.el: Move from lisp/complete.el.
(goto-char (point-max))))))))
(put 'scroll-up-command 'isearch-scroll t)
+(add-to-list 'scroll-preserve-screen-position-commands 'scroll-up-command)
(defun scroll-down-command (&optional arg)
"Scroll text of selected window down ARG lines; or near full screen if no ARG.
(goto-char (point-min))))))))
(put 'scroll-down-command 'isearch-scroll t)
+(add-to-list 'scroll-preserve-screen-position-commands 'scroll-down-command)
;;; Scrolling commands which scroll a line instead of full screen.
(scroll-up (or arg 1)))
(put 'scroll-up-line 'isearch-scroll t)
+(add-to-list 'scroll-preserve-screen-position-commands 'scroll-up-line)
(defun scroll-down-line (&optional arg)
"Scroll text of selected window down ARG lines; or one line if no ARG.
(scroll-down (or arg 1)))
(put 'scroll-down-line 'isearch-scroll t)
+(add-to-list 'scroll-preserve-screen-position-commands 'scroll-down-line)
\f
(defun scroll-other-window-down (lines)
+2010-04-14 Juri Linkov <juri@jurta.org>
+
+ * window.c (Vscroll_preserve_screen_position_commands): New variable
+ with the default value as the list of Qscroll_down and Qscroll_up.
+ (window_scroll_pixel_based, window_scroll_line_based): Search the
+ last command in the list Vscroll_preserve_screen_position_commands
+ instead of comparing with Qscroll_up and Qscroll_down.
+
2010-04-13 Jan Djärv <jan.h.d@swipnet.se>
* gtkutil.c (xg_set_geometry): Set geometry for PPosition also.
Lisp_Object Vscroll_preserve_screen_position;
+/* List of commands affected by `Vscroll_preserve_screen_position'. */
+
+Lisp_Object Vscroll_preserve_screen_position_commands;
+
/* Non-nil means that text is inserted before window's markers. */
Lisp_Object Vwindow_point_insertion_type;
possibility of point becoming "stuck" on a tall line when
scrolling by one line. */
if (window_scroll_pixel_based_preserve_y < 0
- || (!EQ (current_kboard->Vlast_command, Qscroll_up)
- && !EQ (current_kboard->Vlast_command, Qscroll_down)))
+ || NILP (Fmemq (current_kboard->Vlast_command,
+ Vscroll_preserve_screen_position_commands)))
{
start_display (&it, w, start);
move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
if (!NILP (Vscroll_preserve_screen_position))
{
if (window_scroll_preserve_vpos <= 0
- || (!EQ (current_kboard->Vlast_command, Qscroll_up)
- && !EQ (current_kboard->Vlast_command, Qscroll_down)))
+ || NILP (Fmemq (current_kboard->Vlast_command,
+ Vscroll_preserve_screen_position_commands)))
{
struct position posit
= *compute_motion (startpos, 0, 0, 0,
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. */);
+Any other value means point always keeps its screen position.
+Scroll commands are defined by the variable
+`scroll-preserve-screen-position-commands'. */);
Vscroll_preserve_screen_position = Qnil;
+ DEFVAR_LISP ("scroll-preserve-screen-position-commands",
+ &Vscroll_preserve_screen_position_commands,
+ doc: /* A list of commands whose scrolling should keep screen position unchanged.
+This list defines the names of scroll commands affected by the variable
+`scroll-preserve-screen-position'. */);
+ Vscroll_preserve_screen_position_commands =
+ Fcons (Qscroll_down, Fcons (Qscroll_up, Qnil));
+
DEFVAR_LISP ("window-point-insertion-type", &Vwindow_point_insertion_type,
doc: /* Type of marker to use for `window-point'. */);
Vwindow_point_insertion_type = Qnil;