emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r99896: Add variable `scroll-preserve


From: Juri Linkov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r99896: Add variable `scroll-preserve-screen-position-commands'.
Date: Wed, 14 Apr 2010 03:11:21 +0300
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 99896
committer: Juri Linkov <address@hidden>
branch nick: trunk
timestamp: Wed 2010-04-14 03:11:21 +0300
message:
  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.
modified:
  etc/NEWS
  lisp/ChangeLog
  lisp/mwheel.el
  lisp/simple.el
  src/ChangeLog
  src/window.c
=== modified file 'etc/NEWS'
--- a/etc/NEWS  2010-04-13 03:29:38 +0000
+++ b/etc/NEWS  2010-04-14 00:11:21 +0000
@@ -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
 

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2010-04-13 03:29:38 +0000
+++ b/lisp/ChangeLog    2010-04-14 00:11:21 +0000
@@ -1,3 +1,12 @@
+2010-04-14  Juri Linkov  <address@hidden>
+
+       * 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  <address@hidden>
 
        * obsolete/complete.el: Move from lisp/complete.el.

=== modified file 'lisp/mwheel.el'
--- a/lisp/mwheel.el    2010-01-13 08:35:10 +0000
+++ b/lisp/mwheel.el    2010-04-14 00:11:21 +0000
@@ -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

=== modified file 'lisp/simple.el'
--- a/lisp/simple.el    2010-04-05 23:44:24 +0000
+++ b/lisp/simple.el    2010-04-14 00:11:21 +0000
@@ -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)

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2010-04-13 15:16:42 +0000
+++ b/src/ChangeLog     2010-04-14 00:11:21 +0000
@@ -1,3 +1,11 @@
+2010-04-14  Juri Linkov  <address@hidden>
+
+       * 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  <address@hidden>
 
        * gtkutil.c (xg_set_geometry): Set geometry for PPosition also.

=== modified file 'src/window.c'
--- a/src/window.c      2010-03-31 02:08:05 +0000
+++ b/src/window.c      2010-04-14 00:11:21 +0000
@@ -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;


reply via email to

[Prev in Thread] Current Thread [Next in Thread]