mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
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.
This commit is contained in:
parent
4874f5e6d6
commit
a4b000fb3d
7 changed files with 49 additions and 28 deletions
4
etc/NEWS
4
etc/NEWS
|
|
@ -76,8 +76,8 @@ when a new variable `scroll-error-top-bottom' is non-nil.
|
|||
** 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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1757,7 +1757,7 @@ Scroll-bar or mode-line events are processed appropriately."
|
|||
"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)
|
||||
|
||||
|
|
|
|||
|
|
@ -246,7 +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)
|
||||
(put 'mwheel-scroll 'scroll-command t)
|
||||
(put 'mwheel-scroll 'isearch-scroll t)
|
||||
|
||||
(defvar mwheel-installed-bindings nil)
|
||||
|
||||
|
|
|
|||
|
|
@ -4792,8 +4792,8 @@ If ARG is the atom `-', scroll downward by nearly full screen."
|
|||
;; 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 @@ If ARG is the atom `-', scroll upward by nearly full screen."
|
|||
;; 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 @@ This is different from `scroll-up-command' that scrolls a full screen."
|
|||
(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 @@ This is different from `scroll-down-command' that scrolls a full screen."
|
|||
(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)
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
35
src/window.c
35
src/window.c
|
|
@ -54,7 +54,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
|
||||
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 @@ 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,12 +4942,13 @@ window_scroll_pixel_based (window, n, whole, noerror)
|
|||
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 @@ window_scroll_line_based (window, n, whole, noerror)
|
|||
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 @@ syms_of_window ()
|
|||
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 @@ 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.
|
||||
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue