# HG changeset patch # User Katsumi Yamaoka # Date 1271256580 0 # Node ID b586617999c70cf346f0dcaa48faaf786c75b8df # Parent 90955ad81bff0eb43bb0c8b3bd4f2bd0ec2da621# Parent 6ebc01c309bfde706b5adb5e22f1f05aef513805 Merge from mainline. diff -r 90955ad81bff -r b586617999c7 etc/NEWS --- a/etc/NEWS Tue Apr 13 12:24:53 2010 +0000 +++ b/etc/NEWS Wed Apr 14 14:49:40 2010 +0000 @@ -69,12 +69,16 @@ with Xft. ** New scrolling commands `scroll-up-command' and `scroll-down-command' -(bound to [next] and [prior]) does not signal errors at top/bottom -of buffer at first key-press (instead moves to top/bottom of buffer). +(bound to C-v/[next] and M-v/[prior]) does not signal errors at top/bottom +of buffer at first key-press (instead moves to top/bottom of buffer) +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. + * Editing Changes in Emacs 24.1 diff -r 90955ad81bff -r b586617999c7 lisp/ChangeLog --- a/lisp/ChangeLog Tue Apr 13 12:24:53 2010 +0000 +++ b/lisp/ChangeLog Wed Apr 14 14:49:40 2010 +0000 @@ -1,3 +1,31 @@ +2010-04-14 Juri Linkov + + * simple.el (scroll-error-top-bottom): New defcustom. + (scroll-up-command, scroll-down-command): Use it. Doc fix. + + * emulation/pc-select.el (pc-select-override-scroll-error): + Obsolete in favor of `scroll-error-top-bottom'. + +2010-04-14 Juri Linkov + + * tutorial.el (tutorial--default-keys): Rebind `C-v' to + `scroll-up-command' and `M-v' to `scroll-down-command'. + + * emulation/cua-rect.el (cua--init-rectangles): + * forms.el (forms--change-commands): + * image-mode.el (image-mode-map): + Remap scroll-down-command and scroll-up-command + in addition to scroll-down and scroll-up. + +2010-04-14 Juri Linkov + + * 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 * obsolete/complete.el: Move from lisp/complete.el. diff -r 90955ad81bff -r b586617999c7 lisp/emulation/cua-rect.el --- a/lisp/emulation/cua-rect.el Tue Apr 13 12:24:53 2010 +0000 +++ b/lisp/emulation/cua-rect.el Wed Apr 14 14:49:40 2010 +0000 @@ -1432,6 +1432,8 @@ (define-key cua--rectangle-keymap [remap beginning-of-buffer] 'cua-resize-rectangle-top) (define-key cua--rectangle-keymap [remap scroll-down] 'cua-resize-rectangle-page-up) (define-key cua--rectangle-keymap [remap scroll-up] 'cua-resize-rectangle-page-down) + (define-key cua--rectangle-keymap [remap scroll-down-command] 'cua-resize-rectangle-page-up) + (define-key cua--rectangle-keymap [remap scroll-up-command] 'cua-resize-rectangle-page-down) (define-key cua--rectangle-keymap [remap delete-backward-char] 'cua-delete-char-rectangle) (define-key cua--rectangle-keymap [remap backward-delete-char] 'cua-delete-char-rectangle) diff -r 90955ad81bff -r b586617999c7 lisp/emulation/pc-select.el --- a/lisp/emulation/pc-select.el Tue Apr 13 12:24:53 2010 +0000 +++ b/lisp/emulation/pc-select.el Wed Apr 14 14:49:40 2010 +0000 @@ -93,6 +93,9 @@ errors are suppressed." :type 'boolean :group 'pc-select) +(define-obsolete-variable-alias 'pc-select-override-scroll-error + 'scroll-error-top-bottom + "24.1") (defcustom pc-select-selection-keys-only nil "*Non-nil means only bind the basic selection keys when started. diff -r 90955ad81bff -r b586617999c7 lisp/forms.el --- a/lisp/forms.el Tue Apr 13 12:24:53 2010 +0000 +++ b/lisp/forms.el Wed Apr 14 14:49:40 2010 +0000 @@ -1407,7 +1407,9 @@ (if forms-forms-scroll (progn (local-set-key [remap scroll-up] 'forms-next-record) - (local-set-key [remap scroll-down] 'forms-prev-record))) + (local-set-key [remap scroll-down] 'forms-prev-record) + (local-set-key [remap scroll-up-command] 'forms-next-record) + (local-set-key [remap scroll-down-command] 'forms-prev-record))) ;; ;; beginning-of-buffer -> forms-first-record ;; end-of-buffer -> forms-end-record diff -r 90955ad81bff -r b586617999c7 lisp/image-mode.el --- a/lisp/image-mode.el Tue Apr 13 12:24:53 2010 +0000 +++ b/lisp/image-mode.el Wed Apr 14 14:49:40 2010 +0000 @@ -302,6 +302,8 @@ (define-key map [remap next-line] 'image-next-line) (define-key map [remap scroll-up] 'image-scroll-up) (define-key map [remap scroll-down] 'image-scroll-down) + (define-key map [remap scroll-up-command] 'image-scroll-up) + (define-key map [remap scroll-down-command] 'image-scroll-down) (define-key map [remap move-beginning-of-line] 'image-bol) (define-key map [remap move-end-of-line] 'image-eol) (define-key map [remap beginning-of-buffer] 'image-bob) diff -r 90955ad81bff -r b586617999c7 lisp/mwheel.el --- a/lisp/mwheel.el Tue Apr 13 12:24:53 2010 +0000 +++ b/lisp/mwheel.el Wed Apr 14 14:49:40 2010 +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 diff -r 90955ad81bff -r b586617999c7 lisp/simple.el --- a/lisp/simple.el Tue Apr 13 12:24:53 2010 +0000 +++ b/lisp/simple.el Wed Apr 14 14:49:40 2010 +0000 @@ -4744,20 +4744,34 @@ ;;; of buffer at first key-press (instead moves to top/bottom ;;; of buffer). +(defcustom scroll-error-top-bottom nil + "Move point to top/bottom of buffer before signalling a scrolling error. +A value of nil means just signal an error if no more scrolling possible. +A value of t means point moves to the beginning or the end of the buffer +\(depending on scrolling direction) when no more scrolling possible. +When point is already on that position, then signal an error." + :type 'boolean + :group 'scrolling + :version "24.1") + (defun scroll-up-command (&optional arg) "Scroll text of selected window upward ARG lines; or near full screen if no ARG. -If `scroll-up' cannot scroll window further, move cursor to the bottom line. +If `scroll-error-top-bottom' is non-nil and `scroll-up' cannot +scroll window further, move cursor to the bottom line. When point is already on that position, then signal an error. A near full screen is `next-screen-context-lines' less than a full screen. Negative ARG means scroll downward. If ARG is the atom `-', scroll downward by nearly full screen." (interactive "^P") (cond - ((eq arg '-) (scroll-down-command nil)) + ((null scroll-error-top-bottom) + (scroll-up arg)) + ((eq arg '-) + (scroll-down-command nil)) ((< (prefix-numeric-value arg) 0) (scroll-down-command (- (prefix-numeric-value arg)))) ((eobp) - (scroll-up arg)) ; signal error + (scroll-up arg)) ; signal error (t (condition-case nil (scroll-up arg) @@ -4771,21 +4785,26 @@ (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. -If `scroll-down' cannot scroll window further, move cursor to the top line. +If `scroll-error-top-bottom' is non-nil and `scroll-down' cannot +scroll window further, move cursor to the top line. When point is already on that position, then signal an error. A near full screen is `next-screen-context-lines' less than a full screen. Negative ARG means scroll upward. If ARG is the atom `-', scroll upward by nearly full screen." (interactive "^P") (cond - ((eq arg '-) (scroll-up-command nil)) + ((null scroll-error-top-bottom) + (scroll-down arg)) + ((eq arg '-) + (scroll-up-command nil)) ((< (prefix-numeric-value arg) 0) (scroll-up-command (- (prefix-numeric-value arg)))) ((bobp) - (scroll-down arg)) ; signal error + (scroll-down arg)) ; signal error (t (condition-case nil (scroll-down arg) @@ -4799,6 +4818,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 +4830,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 +4840,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) diff -r 90955ad81bff -r b586617999c7 lisp/tutorial.el --- a/lisp/tutorial.el Tue Apr 13 12:24:53 2010 +0000 +++ b/lisp/tutorial.el Wed Apr 14 14:49:40 2010 +0000 @@ -218,8 +218,8 @@ (save-buffers-kill-terminal [?\C-x ?\C-c]) ;; * SUMMARY - (scroll-up [?\C-v]) - (scroll-down [?\M-v]) + (scroll-up-command [?\C-v]) + (scroll-down-command [?\M-v]) (recenter-top-bottom [?\C-l]) ;; * BASIC CURSOR CONTROL diff -r 90955ad81bff -r b586617999c7 src/ChangeLog --- a/src/ChangeLog Tue Apr 13 12:24:53 2010 +0000 +++ b/src/ChangeLog Wed Apr 14 14:49:40 2010 +0000 @@ -1,5 +1,23 @@ +2010-04-14 Juri Linkov + + * window.c (keys_of_window): Rebind `C-v' from `scroll-up' to + `scroll-up-command' and `M-v' from `scroll-down' to + `scroll-down-command'. + +2010-04-14 Juri Linkov + + * 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 + * gtkutil.c (xg_set_geometry): Set geometry for PPosition also. + (x_wm_set_size_hint): Dont set position flags, gtk_window_parse_geometry + does that. + * xfns.c (Fx_create_frame, x_create_tip_frame): Set default border width to zero. diff -r 90955ad81bff -r b586617999c7 src/gtkutil.c --- a/src/gtkutil.c Tue Apr 13 12:24:53 2010 +0000 +++ b/src/gtkutil.c Wed Apr 14 14:49:40 2010 +0000 @@ -529,7 +529,7 @@ xg_set_geometry (f) FRAME_PTR f; { - if (f->size_hint_flags & USPosition) + if (f->size_hint_flags & (USPosition | PPosition)) { int left = f->left_pos; int xneg = f->size_hint_flags & XNegative; @@ -542,9 +542,7 @@ if (yneg) top = -top; - sprintf (geom_str, "=%dx%d%c%d%c%d", - FRAME_PIXEL_WIDTH (f), - FRAME_TOTAL_PIXEL_HEIGHT (f), + sprintf (geom_str, "%c%d%c%d", (xneg ? '-' : '+'), left, (yneg ? '-' : '+'), top); @@ -552,9 +550,6 @@ geom_str)) fprintf (stderr, "Failed to parse: '%s'\n", geom_str); } - else if (f->size_hint_flags & PPosition) - gtk_window_move (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), - f->left_pos, f->top_pos); } /* Clear under internal border if any. As we use a mix of Gtk+ and X calls @@ -956,16 +951,6 @@ else if (win_gravity == StaticGravity) size_hints.win_gravity = GDK_GRAVITY_STATIC; - if (flags & PPosition) hint_flags |= GDK_HINT_POS; - if (flags & USPosition) hint_flags |= GDK_HINT_USER_POS; - if (flags & USSize) hint_flags |= GDK_HINT_USER_SIZE; - - if (user_position) - { - hint_flags &= ~GDK_HINT_POS; - hint_flags |= GDK_HINT_USER_POS; - } - if (hint_flags != f->output_data.x->hint_flags || memcmp (&size_hints, &f->output_data.x->size_hints, diff -r 90955ad81bff -r b586617999c7 src/window.c --- a/src/window.c Tue Apr 13 12:24:53 2010 +0000 +++ b/src/window.c Wed Apr 14 14:49:40 2010 +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; @@ -7377,9 +7391,9 @@ initial_define_key (control_x_map, '<', "scroll-left"); initial_define_key (control_x_map, '>', "scroll-right"); - initial_define_key (global_map, Ctl ('V'), "scroll-up"); + initial_define_key (global_map, Ctl ('V'), "scroll-up-command"); initial_define_key (meta_map, Ctl ('V'), "scroll-other-window"); - initial_define_key (meta_map, 'v', "scroll-down"); + initial_define_key (meta_map, 'v', "scroll-down-command"); } /* arch-tag: 90a9c576-0590-48f1-a5f1-6c96a0452d9f