Я не уверен, что это лучший способ, но вы можете использовать next-line
с ненулевым line-move-visual
, beginning-of-visual-line
и end-of-visual-line
.
Пример:
(defun foo (&optional start end)
(interactive)
(let ((start (or start (point-min)))
(end (or end (point-max)))
b e)
(goto-char start)
(while (<= (point) end)
(beginning-of-visual-line)
(setq b (point))
(save-excursion
(end-of-visual-line)
(setq e (point)))
(message "%d %d" b e)
(let ((line-move-visual t))
(next-line)))))