Subject: bug#78561: [PATCH] Add semantic linefeed support for paragraph filling

From: Eli Zaretskii <[email-masked]>
Date: Sun, 15 Jun 2025 12:28:57 +0300

> From: Roi Martin <[email-masked]>
> Cc: [email-masked]
> Date: Sun, 15 Jun 2025 11:12:49 +0200
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> > Neither, AFAIU?  Those two are commands, not fill-paragraph functions.
> > They don't implement the protocol defined for fill-paragraph
> > functions.
> 
> It should be possible to use `fill-paragraph-semlf' as
> `fill-paragraph-function'.
> 
> It takes a JUSTIFY argument, which is required by:
> 
>   (funcall function justify)
> 
> in the specific case in `fill-paragraph' ("2. Try
> fill-paragraph-function.").
> 
>   ;; 2. Try fill-paragraph-function.
>   (and (not (eq fill-paragraph-function t))
>             (or fill-paragraph-function
>                 (and (minibufferp (current-buffer))
>                      (= 1 (point-min))))
>             (let ((function (or fill-paragraph-function
>                                 ;; In the minibuffer, don't count
>                                 ;; the width of the prompt.
>                                 'fill-minibuffer-function))
>                   ;; If fill-paragraph-function is set, it probably
>                   ;; takes care of comments and stuff.  If not, it
>                   ;; will have to set fill-paragraph-handle-comment
>                   ;; back to t explicitly or return nil.
>                   (fill-paragraph-handle-comment nil)
>                   (fill-paragraph-function t))
>               (funcall function justify)))
> 
> It also returns a non-nil value to avoid executing the following cases
> in `fill-paragraph'.
> 
> Is there anything missing?

The doc string of fill-paragraph-function says:

  If the function returns nil, then ‘fill-paragraph’ does its normal work.
  A value of t means explicitly "do nothing special".

By contrast, the doc string of fill-paragraph-semlf says:

  Return the `fill-prefix' used for filling.

Maybe the doc string is inaccurate, but if it's accurate, then its
return value is not what's expected from fill-paragraph-function.  Or
what did I miss?