# HG changeset patch # User Juri Linkov # Date 1271375472 -10800 # Node ID d7b161b7a686d2702620d8aba9a39fc513be45f7 # Parent 973ae1d72536842d6ccaf4bb435f8710c2ac8240 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. diff -r 973ae1d72536 -r d7b161b7a686 etc/NEWS --- 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 diff -r 973ae1d72536 -r d7b161b7a686 lisp/ChangeLog --- 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 + + * 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 * net/tramp.el (tramp-error-with-buffer): Don't show the diff -r 973ae1d72536 -r d7b161b7a686 lisp/isearch.el --- 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) diff -r 973ae1d72536 -r d7b161b7a686 lisp/mwheel.el --- 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) diff -r 973ae1d72536 -r d7b161b7a686 lisp/simple.el --- 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) diff -r 973ae1d72536 -r d7b161b7a686 src/ChangeLog --- 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 + + * 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 * xdisp.c (message): Do not use NO_ARG_ARRAY. diff -r 973ae1d72536 -r d7b161b7a686 src/window.c --- 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;