diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el index 3346c551d93..6681b03913c 100644 --- a/lisp/textmodes/fill.el +++ b/lisp/textmodes/fill.el @@ -743,9 +743,16 @@ space does not end a sentence, so don't break a line there." ;; This is the actual filling loop. (goto-char from) - (let (linebeg) + (let ((first t) + linebeg) (while (< (point) to) - (setq linebeg (point)) + ;; On the first line, there may be text in the fill prefix + ;; zone. In that case, don't consider that area when + ;; trying to find a place to put a line break (bug#45720). + (if (not first) + (setq linebeg (point)) + (setq first nil + linebeg (+ (point) (length fill-prefix)))) (move-to-column (current-fill-column)) (if (when (< (point) to) ;; Find the position where we'll break the line. diff --git a/test/lisp/textmodes/fill-tests.el b/test/lisp/textmodes/fill-tests.el index f2c63a93d3e..21efe620999 100644 --- a/test/lisp/textmodes/fill-tests.el +++ b/test/lisp/textmodes/fill-tests.el @@ -44,6 +44,37 @@ (fill-paragraph) (should (string= (buffer-string) "Abc\nd efg\n(h ijk).")))) +(ert-deftest fill-test-unbreakable-paragraph () + (with-temp-buffer + (let ((string "aaa = baaaaaaaaaaaaaaaaaaaaaaaaaaaa\n")) + (insert string) + (goto-char (point-min)) + (search-forward "b") + (let* ((pos (point)) + (beg (line-beginning-position)) + (end (line-end-position)) + (fill-prefix (make-string (- pos beg) ?\s)) + ;; `fill-column' is too small to accomodate the current line + (fill-column (- end beg 10))) + (fill-region-as-paragraph beg end nil nil pos)) + (should (equal (buffer-string) string))))) + +(ert-deftest fill-test-breakable-paragraph () + (with-temp-buffer + (let ((string "aaa = baaaaaaaa aaaaaaaaaa aaaaaaaaaa\n")) + (insert string) + (goto-char (point-min)) + (search-forward "b") + (let* ((pos (point)) + (beg (line-beginning-position)) + (end (line-end-position)) + (fill-prefix (make-string (- pos beg) ?\s)) + ;; `fill-column' is too small to accomodate the current line + (fill-column (- end beg 10))) + (fill-region-as-paragraph beg end nil nil pos)) + (should (equal + (buffer-string) + "aaa = baaaaaaaa aaaaaaaaaa\n aaaaaaaaaa\n"))))) (provide 'fill-tests)