changeset 107852:4abde609aac9

Add variable `scroll-preserve-screen-position-commands'. http://lists.gnu.org/archive/html/emacs-devel/2010-04/msg00403.html * 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. * 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.
author Juri Linkov <juri@jurta.org>
date Wed, 14 Apr 2010 03:11:21 +0300
parents 2a74858bccc0
children de5ba6f3514c
files etc/NEWS lisp/ChangeLog lisp/mwheel.el lisp/simple.el src/ChangeLog src/window.c
diffstat 6 files changed, 45 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/etc/NEWS	Tue Apr 13 17:16:42 2010 +0200
+++ b/etc/NEWS	Wed Apr 14 03:11:21 2010 +0300
@@ -75,6 +75,9 @@
 ** New scrolling commands `scroll-up-line' and `scroll-down-line'
 scroll a line instead of full screen.
 
+** New variable `scroll-preserve-screen-position-commands' defines
+a list of scroll command affected by `scroll-preserve-screen-position.
+
 
 * Editing Changes in Emacs 24.1
 
--- a/lisp/ChangeLog	Tue Apr 13 17:16:42 2010 +0200
+++ b/lisp/ChangeLog	Wed Apr 14 03:11:21 2010 +0300
@@ -1,3 +1,12 @@
+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.
--- a/lisp/mwheel.el	Tue Apr 13 17:16:42 2010 +0200
+++ b/lisp/mwheel.el	Wed Apr 14 03:11:21 2010 +0300
@@ -246,6 +246,8 @@
 	  (run-with-timer mouse-wheel-inhibit-click-time nil
 			  'mwheel-inhibit-click-timeout))))
 
+(add-to-list 'scroll-preserve-screen-position-commands 'mwheel-scroll)
+
 (defvar mwheel-installed-bindings nil)
 
 ;; preloaded ;;;###autoload
--- a/lisp/simple.el	Tue Apr 13 17:16:42 2010 +0200
+++ b/lisp/simple.el	Wed Apr 14 03:11:21 2010 +0300
@@ -4771,6 +4771,7 @@
 	 (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.
@@ -4799,6 +4800,7 @@
 	 (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.
 
@@ -4810,6 +4812,7 @@
   (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.
@@ -4819,6 +4822,7 @@
   (scroll-down (or arg 1)))
 
 (put 'scroll-down-line 'isearch-scroll t)
+(add-to-list 'scroll-preserve-screen-position-commands 'scroll-down-line)
 
 
 (defun scroll-other-window-down (lines)
--- a/src/ChangeLog	Tue Apr 13 17:16:42 2010 +0200
+++ b/src/ChangeLog	Wed Apr 14 03:11:21 2010 +0300
@@ -1,3 +1,11 @@
+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.
--- a/src/window.c	Tue Apr 13 17:16:42 2010 +0200
+++ b/src/window.c	Wed Apr 14 03:11:21 2010 +0300
@@ -168,6 +168,10 @@
 
 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;
@@ -4946,8 +4950,8 @@
 	 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);
@@ -5207,8 +5211,8 @@
   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,
@@ -7265,9 +7269,19 @@
 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;