]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve fill-region-as-paragraph when there's a fill prefix
authorLars Ingebrigtsen <larsi@gnus.org>
Sun, 10 Jan 2021 14:04:39 +0000 (15:04 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 10 Jan 2021 14:04:48 +0000 (15:04 +0100)
* lisp/textmodes/fill.el (fill-region-as-paragraph): Try to
improve how line breaks are set on unbreakable text with a fill
prefix area that has spaces within (bug#45720).

lisp/textmodes/fill.el
test/lisp/textmodes/fill-tests.el

index 3346c551d9346ccd700ce2c649aaac7e5fc78bd3..6681b03913cf9f01fd2e53aee4b66e509e281561 100644 (file)
@@ -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.
index f2c63a93d3e436ec4c980bd2d59ffdfdf9c48189..21efe620999bea80bf784557df036b56de96207b 100644 (file)
     (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)