has a newline, in a way that intangible text does not confuse.
(interactive "p")
(if (and next-line-add-newlines (= arg 1))
(let ((opoint (point)))
- (forward-line 1)
- (if (or (= opoint (point)) (not (eq (preceding-char) ?\n)))
+ (end-of-line)
+ (if (eobp)
(insert ?\n)
(goto-char opoint)
(line-move arg)))
9999
(current-column))))
(if (not (integerp selective-display))
- (or (and (zerop (forward-line arg))
- (bolp))
+ (or (if (> arg 0)
+ (progn (if (> arg 1) (forward-line (1- arg)))
+ ;; This way of moving forward ARG lines
+ ;; verifies that we have a newline after the last one.
+ ;; It doesn't get confused by intangible text.
+ (end-of-line)
+ (zerop (forward-line 1)))
+ (and (zerop (forward-line arg))
+ (bolp)))
(signal (if (bobp)
'beginning-of-buffer
'end-of-buffer)