changeset 73109:4a02fd618570

* simple.el (line-move-finish): Handle corner case for fields in continued lines. (line-move-1): Remove flawed test for that case.
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 24 Sep 2006 21:58:12 +0000
parents e6a2cb7ec280
children 1f708673d34f
files lisp/ChangeLog lisp/simple.el
diffstat 2 files changed, 18 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sun Sep 24 20:44:52 2006 +0000
+++ b/lisp/ChangeLog	Sun Sep 24 21:58:12 2006 +0000
@@ -1,3 +1,9 @@
+2006-09-24  Chong Yidong  <cyd@stupidchicken.com>
+
+	* simple.el (line-move-finish): Handle corner case for fields in
+	continued lines.
+	(line-move-1): Remove flawed test for that case.
+
 2006-09-24  Ken Manheimer  <ken.manheimer@gmail.com>
 
 	* icomplete.el (icomplete-simple-completing-p): Use the correct
--- a/lisp/simple.el	Sun Sep 24 20:44:52 2006 +0000
+++ b/lisp/simple.el	Sun Sep 24 21:58:12 2006 +0000
@@ -3604,15 +3604,6 @@
 		(let ((inhibit-field-text-motion t))
 		  (setq line-end (line-end-position)))
 		(goto-char (constrain-to-field line-end (point) t t))
-		;; When moving a single line, update the goal-column
-		;; if we couldn't move to the end of line due to a
-		;; field boundary.  Otherwise we'll get stuck at the
-		;; original position during the column motion in
-		;; line-move-finish.
-		(and (/= line-end (point))
-		     (= orig-arg 1)
-		     (setq temporary-goal-column
-			   (max temporary-goal-column (current-column))))
 		;; If there's no invisibility here, move over the newline.
 		(cond
 		 ((eobp)
@@ -3679,6 +3670,7 @@
       (setq repeat nil)
 
       (let (new
+	    (old (point))
 	    (line-beg (save-excursion (beginning-of-line) (point)))
 	    (line-end
 	     ;; Compute the end of the line
@@ -3693,6 +3685,17 @@
 
 	;; Move to the desired column.
 	(line-move-to-column column)
+
+	;; Corner case: suppose we start out in a field boundary in
+	;; the middle of a continued line.  When we get to
+	;; line-move-finish, point is at the start of a new *screen*
+	;; line but the same text line; then line-move-to-column would
+	;; move us backwards. Test using C-n with point on the "x" in
+	;;   (insert "a" (propertize "x" 'field t) (make-string 89 ?y))
+	(and forward
+	     (< (point) old)
+	     (goto-char old))
+
 	(setq new (point))
 
 	;; Process intangibility within a line.