Commit 9013a7f8 authored by Juri Linkov's avatar Juri Linkov

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.
parent 92848133
......@@ -75,6 +75,9 @@ of buffer at first key-press (instead moves to top/bottom of buffer).
** 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
......
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.
......
......@@ -246,6 +246,8 @@ This should only be bound to mouse buttons 4 and 5."
(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
......
......@@ -4771,6 +4771,7 @@ If ARG is the atom `-', scroll downward by nearly full screen."
(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 @@ If ARG is the atom `-', scroll upward by nearly full screen."
(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 @@ This is different from `scroll-up-command' that scrolls a 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.
......@@ -4819,6 +4822,7 @@ This is different from `scroll-down-command' that scrolls a full screen."
(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)
......
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.
......
......@@ -168,6 +168,10 @@ static Lisp_Object Vwindow_configuration_change_hook;
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 @@ window_scroll_pixel_based (window, n, whole, noerror)
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 @@ window_scroll_line_based (window, n, whole, noerror)
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 @@ at the scroll margin or window boundary respectively.
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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment