]> git.eshelyaron.com Git - emacs.git/commitdiff
(line-move-finish): Find beg and end of line
authorRichard M. Stallman <rms@gnu.org>
Mon, 22 Apr 2002 22:35:46 +0000 (22:35 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 22 Apr 2002 22:35:46 +0000 (22:35 +0000)
before calling line-move-to-column.  Do consider intangible
when finding the end.  Take more care in analyzing the results
of intangibility after line-move-to-column.

lisp/simple.el

index eae8ad74b04220183f582a509820df8d654cc290..1b5e866645a162b43058de2199f69ceb9bac6f3a 100644 (file)
@@ -2638,12 +2638,17 @@ Outline mode sets this."
       ;; Set REPEAT to t to repeat the whole thing.
       (setq repeat nil)
 
-      ;; Move to the desired column.
-      (line-move-to-column column)
-
-      (let ((new (point))
+      (let (new
            (line-beg (save-excursion (beginning-of-line) (point)))
-           (line-end (save-excursion (end-of-line) (point))))
+           (line-end
+            ;; Compute the end of the line
+            ;; ignoring effectively intangible newlines.
+            (let ((inhibit-point-motion-hooks nil))
+              (save-excursion (end-of-line) (point)))))
+
+       ;; Move to the desired column.
+       (line-move-to-column column)
+       (setq new (point))
 
        ;; Process intangibility within a line.
        ;; Move to the chosen destination position from above,
@@ -2656,7 +2661,15 @@ Outline mode sets this."
          ;; If intangibility moves us to a different (later) place
          ;; in the same line, use that as the destination.
          (if (<= (point) line-end)
-             (setq new (point))))
+             (setq new (point))
+           ;; If that position is "too late",
+           ;; try the previous allowable position.
+           ;; See if it is ok.
+           (backward-char)
+           (if (<= (point) line-end)
+               (setq new (point))
+             ;; As a last resort, use the end of the line.
+             (setq new line-end))))
 
        ;; Now move to the updated destination, processing fields
        ;; as well as intangibility.
@@ -2666,7 +2679,7 @@ Outline mode sets this."
           (constrain-to-field new opoint nil t
                               'inhibit-line-move-field-capture)))
 
-       ;; If intangibility processing moved us to a different line,
+       ;; If all this moved us to a different line,
        ;; retry everything within that new line.
        (when (or (< (point) line-beg) (> (point) line-end))
          ;; Repeat the intangibility and field processing.