changeset 108452:b586617999c7

Merge from mainline.
author Katsumi Yamaoka <katsumi@flagship>
date Wed, 14 Apr 2010 14:49:40 +0000
parents 90955ad81bff (current diff) 6ebc01c309bf (diff)
children 6ebf8ca9708b
files
diffstat 12 files changed, 117 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- 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
 
--- 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  <juri@jurta.org>
+
+	* 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  <juri@jurta.org>
+
+	* 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  <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.
--- 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)
--- 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.
--- 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
--- 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)
--- 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
--- 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)
--- 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
--- 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  <juri@jurta.org>
+
+	* 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  <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.
+	(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.
 
--- 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,
--- 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