Avoid beginning/end of buffer errors when moving across display strings.
authorEli Zaretskii <eliz@gnu.org>
Wed, 8 May 2013 18:05:40 +0000 (21:05 +0300)
committerEli Zaretskii <eliz@gnu.org>
Wed, 8 May 2013 18:05:40 +0000 (21:05 +0300)
 lisp/simple.el (line-move-visual): Signal beginning/end of buffer
 only if vertical-motion moved less than it was requested.  Avoids
 silly incorrect error messages when there are display strings with
 multiple newlines at EOL.

lisp/ChangeLog
lisp/simple.el

index aded312..1abcc93 100644 (file)
@@ -1,3 +1,10 @@
+2013-05-08  Eli Zaretskii  <eliz@gnu.org>
+
+       * simple.el (line-move-visual): Signal beginning/end of buffer
+       only if vertical-motion moved less than it was requested.  Avoids
+       silly incorrect error messages when there are display strings with
+       multiple newlines at EOL.
+
 2013-05-08  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * progmodes/vera-mode.el (vera-underscore-is-part-of-word):
index 103c2a4..e4bde7c 100644 (file)
@@ -4857,13 +4857,25 @@ lines."
                         (frame-char-width)) hscroll))))))
     (if target-hscroll
        (set-window-hscroll (selected-window) target-hscroll))
-    (or (and (= (vertical-motion
-                (cons (or goal-column
-                          (if (consp temporary-goal-column)
-                              (car temporary-goal-column)
-                            temporary-goal-column))
-                      arg))
-               arg)
+    ;; vertical-motion can move more than it was asked to if it moves
+    ;; across display strings with newlines.  We don't want to ring
+    ;; the bell and announce beginning/end of buffer in that case.
+    (or (and (or (and (>= arg 0)
+                     (>= (vertical-motion
+                          (cons (or goal-column
+                                    (if (consp temporary-goal-column)
+                                        (car temporary-goal-column)
+                                      temporary-goal-column))
+                                arg))
+                         arg))
+                (and (< arg 0)
+                     (<= (vertical-motion
+                          (cons (or goal-column
+                                    (if (consp temporary-goal-column)
+                                        (car temporary-goal-column)
+                                      temporary-goal-column))
+                                arg))
+                         arg)))
             (or (>= arg 0)
                 (/= (point) opoint)
                 ;; If the goal column lies on a display string,