]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve filling of generated docstring lines
authorStefan Kangas <stefan@marxist.se>
Fri, 24 Sep 2021 15:47:43 +0000 (17:47 +0200)
committerStefan Kangas <stefan@marxist.se>
Sun, 26 Sep 2021 11:23:57 +0000 (13:23 +0200)
* lisp/subr.el (internal--fill-string-single-line): Improve filling to
use full width.  Fix bug where line was not wrapped correctly.

lisp/subr.el

index fd1ceb95f53f078efd7a0fda283bb19a05a127c6..8cb79b290b7c3c8feb6342b117f4080aabbac8fe 100644 (file)
@@ -6419,12 +6419,19 @@ seconds."
 This is intended for very simple filling while bootstrapping
 Emacs itself, and does not support all the customization options
 of fill.el (for example `fill-region')."
-  (if (< (string-width str) fill-column)
+  (if (< (length str) fill-column)
       str
-    (let ((fst (substring str 0 fill-column))
-          (lst (substring str fill-column)))
-      (if (string-match ".*\\( \\(.+\\)\\)$" fst)
-          (setq fst (replace-match "\n\\2" nil nil fst 1)))
+    (let* ((limit (min fill-column (length str)))
+           (fst (substring str 0 limit))
+           (lst (substring str limit)))
+      (cond ((string-match "\\( \\)$" fst)
+             (setq fst (replace-match "\n" nil nil fst 1)))
+            ((string-match "^ \\(.*\\)" lst)
+             (setq fst (concat fst "\n"))
+             (setq lst (match-string 1 lst)))
+            ((string-match ".*\\( \\(.+\\)\\)$" fst)
+             (setq lst (concat (match-string 2 fst) lst))
+             (setq fst (replace-match "\n" nil nil fst 1))))
       (concat fst (internal--fill-string-single-line lst)))))
 
 (defun internal--format-docstring-line (string &rest objects)