changeset 107871:d7b161b7a686

Add the `scroll-command' property. * window.c: Add Qscroll_command. Remove Vscroll_preserve_screen_position_commands. (window_scroll_pixel_based, window_scroll_line_based): Check the `scroll-command' property on the last command instead of searching the last command in Vscroll_preserve_screen_position_commands. (syms_of_window): Initialize and staticpro `Qscroll_command'. Put Qscroll_command property on Qscroll_up and Qscroll_down. (scroll-preserve-screen-position): Doc fix. (Vscroll_preserve_screen_position_commands): Remove variable. * simple.el (scroll-up-command, scroll-down-command) (scroll-up-line, scroll-down-line): Put `scroll-command' property on the these symbols. Remove them from `scroll-preserve-screen-position-commands'. * mwheel.el (mwheel-scroll): Put `scroll-command' and `isearch-scroll' properties on the `mwheel-scroll' symbol. Remove it from `scroll-preserve-screen-position-commands'. * isearch.el (isearch-allow-scroll): Doc fix.
author Juri Linkov <juri@jurta.org>
date Fri, 16 Apr 2010 02:51:12 +0300
parents 973ae1d72536
children 9882f2fb5dab
files etc/NEWS lisp/ChangeLog lisp/isearch.el lisp/mwheel.el lisp/simple.el src/ChangeLog src/window.c
diffstat 7 files changed, 49 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/etc/NEWS	Fri Apr 16 00:19:01 2010 +0200
+++ b/etc/NEWS	Fri Apr 16 02:51:12 2010 +0300
@@ -76,8 +76,8 @@
 ** 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.
+** New property `scroll-command' should be set on a command's symbol to
+define it as a scroll command affected by `scroll-preserve-screen-position.
 
 
 * Editing Changes in Emacs 24.1
--- a/lisp/ChangeLog	Fri Apr 16 00:19:01 2010 +0200
+++ b/lisp/ChangeLog	Fri Apr 16 02:51:12 2010 +0300
@@ -1,3 +1,16 @@
+2010-04-15  Juri Linkov  <juri@jurta.org>
+
+	* simple.el (scroll-up-command, scroll-down-command)
+	(scroll-up-line, scroll-down-line): Put `scroll-command'
+	property on the these symbols.  Remove them from
+	`scroll-preserve-screen-position-commands'.
+
+	* mwheel.el (mwheel-scroll): Put `scroll-command' and
+	`isearch-scroll' properties on the `mwheel-scroll' symbol.
+	Remove it from `scroll-preserve-screen-position-commands'.
+
+	* isearch.el (isearch-allow-scroll): Doc fix.
+
 2010-04-15  Michael Albinus  <michael.albinus@gmx.de>
 
 	* net/tramp.el (tramp-error-with-buffer): Don't show the
--- a/lisp/isearch.el	Fri Apr 16 00:19:01 2010 +0200
+++ b/lisp/isearch.el	Fri Apr 16 02:51:12 2010 +0300
@@ -1757,7 +1757,7 @@
   "Whether scrolling is allowed during incremental search.
 If non-nil, scrolling commands can be used in Isearch mode.
 However, the current match will never scroll offscreen.
-If nil, scolling commands will first cancel Isearch mode."
+If nil, scrolling commands will first cancel Isearch mode."
   :type 'boolean
   :group 'isearch)
 
--- a/lisp/mwheel.el	Fri Apr 16 00:19:01 2010 +0200
+++ b/lisp/mwheel.el	Fri Apr 16 02:51:12 2010 +0300
@@ -246,7 +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)
+(put 'mwheel-scroll 'scroll-command t)
+(put 'mwheel-scroll 'isearch-scroll t)
 
 (defvar mwheel-installed-bindings nil)
 
--- a/lisp/simple.el	Fri Apr 16 00:19:01 2010 +0200
+++ b/lisp/simple.el	Fri Apr 16 02:51:12 2010 +0300
@@ -4792,8 +4792,8 @@
 	 ;; move to the bottom of the buffer.
 	 (goto-char (point-max))))))))
 
+(put 'scroll-up-command 'scroll-command t)
 (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.
@@ -4825,8 +4825,8 @@
 	 ;; move to the top of the buffer.
 	 (goto-char (point-min))))))))
 
+(put 'scroll-down-command 'scroll-command t)
 (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.
 
@@ -4837,8 +4837,8 @@
   (interactive "p")
   (scroll-up (or arg 1)))
 
+(put 'scroll-up-line 'scroll-command t)
 (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.
@@ -4847,8 +4847,8 @@
   (interactive "p")
   (scroll-down (or arg 1)))
 
+(put 'scroll-down-line 'scroll-command t)
 (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	Fri Apr 16 00:19:01 2010 +0200
+++ b/src/ChangeLog	Fri Apr 16 02:51:12 2010 +0300
@@ -1,3 +1,15 @@
+2010-04-15  Juri Linkov  <juri@jurta.org>
+
+	* window.c: Add Qscroll_command.
+	Remove Vscroll_preserve_screen_position_commands.
+	(window_scroll_pixel_based, window_scroll_line_based): Check the
+	`scroll-command' property on the last command instead of searching
+	the last command in Vscroll_preserve_screen_position_commands.
+	(syms_of_window): Initialize and staticpro `Qscroll_command'.
+	Put Qscroll_command property on Qscroll_up and Qscroll_down.
+	(scroll-preserve-screen-position): Doc fix.
+	(Vscroll_preserve_screen_position_commands): Remove variable.
+
 2010-04-15  Dan Nicolaescu  <dann@ics.uci.edu>
 
 	* xdisp.c (message): Do not use NO_ARG_ARRAY.
--- a/src/window.c	Fri Apr 16 00:19:01 2010 +0200
+++ b/src/window.c	Fri Apr 16 02:51:12 2010 +0300
@@ -54,7 +54,7 @@
 
 Lisp_Object Qwindowp, Qwindow_live_p, Qwindow_configuration_p;
 Lisp_Object Qdisplay_buffer;
-Lisp_Object Qscroll_up, Qscroll_down;
+Lisp_Object Qscroll_up, Qscroll_down, Qscroll_command;
 Lisp_Object Qwindow_size_fixed;
 
 extern Lisp_Object Qleft_margin, Qright_margin;
@@ -168,10 +168,6 @@
 
 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,12 +4942,13 @@
   if (!NILP (Vscroll_preserve_screen_position))
     {
       /* We preserve the goal pixel coordinate across consecutive
-	 calls to scroll-up or scroll-down.  This avoids the
+	 calls to scroll-up, scroll-down and other commands that
+	 have the `scroll-command' property.  This avoids the
 	 possibility of point becoming "stuck" on a tall line when
 	 scrolling by one line.  */
       if (window_scroll_pixel_based_preserve_y < 0
-	  || NILP (Fmemq (current_kboard->Vlast_command,
-			  Vscroll_preserve_screen_position_commands)))
+	  || !SYMBOLP (current_kboard->Vlast_command)
+	  || NILP (Fget (current_kboard->Vlast_command, Qscroll_command)))
 	{
 	  start_display (&it, w, start);
 	  move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
@@ -5211,8 +5208,8 @@
   if (!NILP (Vscroll_preserve_screen_position))
     {
       if (window_scroll_preserve_vpos <= 0
-	  || NILP (Fmemq (current_kboard->Vlast_command,
-			  Vscroll_preserve_screen_position_commands)))
+	  || !SYMBOLP (current_kboard->Vlast_command)
+	  || NILP (Fget (current_kboard->Vlast_command, Qscroll_command)))
 	{
 	  struct position posit
 	    = *compute_motion (startpos, 0, 0, 0,
@@ -7180,6 +7177,12 @@
   Qscroll_down = intern_c_string ("scroll-down");
   staticpro (&Qscroll_down);
 
+  Qscroll_command = intern_c_string ("scroll-command");
+  staticpro (&Qscroll_command);
+
+  Fput (Qscroll_up, Qscroll_command, Qt);
+  Fput (Qscroll_down, Qscroll_command, Qt);
+
   Qwindow_size_fixed = intern_c_string ("window-size-fixed");
   staticpro (&Qwindow_size_fixed);
   Fset (Qwindow_size_fixed, Qnil);
@@ -7270,18 +7273,10 @@
 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.
-Scroll commands are defined by the variable
-`scroll-preserve-screen-position-commands'.  */);
+Scroll commands should have the `scroll-command' property
+on their symbols to be controlled by this variable.  */);
   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;