On Sun, Feb 4, 2018 at 5:16 PM Nicolas Goaziou wrote: > `org-return' doesn't call any auto fill function. > It sort of does, indirectly, via (newline). Please see the proposed patch at the end of this email. Yet, it doesn't break properties drawers. > I agree. Though this patch fixes what shouldn't do when point is in the property drawer. If someone has: ===== * Headline :PROPERTY: :FOO: some long line that goes beyond fill column :END: ===== It would be highly unlikely that some would want to save that file as (assuming it got formatted as below because of auto filling): ===== * Headline :PROPERTY: :FOO: some long line that goes beyond fill column :END: ===== So the below patch prevents from doing the above > I don't think tweaking `org-return' is a good solution. This is not the > only way to break a line (e.g. "C-q C-j", or "C-M-o"), so it would not > be a panacea. > I tried C-q C-j and C-M-o, and both don't allow the auto-filling to happen, even without the below patch. > You may want to use fill-nobreak-predicate variable instead, e.g. with > `org-at-property-p'. > I gave that a try, by tweaking fill-nobreak-predicate inside the org-setup-filling function. But that doesn't work. Looks like the predicate is evaluated *after* `newline' inserts the newline.. and so `org-at-property-p' would evaluate to nil. ** The patch ** Looking at the source code of `newline' defun, I came up with this and it works! diff --git a/lisp/org.el b/lisp/org.el index 688e48bcc1d..9367304e900 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -20471,7 +20471,10 @@ object (e.g., within a comment). In these case, you need to use (delete-and-extract-region (point) (line-end-position)))) (newline-and-indent) (save-excursion (insert trailing-data)))) - (t (if indent (newline-and-indent) (newline)))))) + (t (let ((auto-fill-function (if (org-at-property-p) + nil + auto-fill-function))) + (if indent (newline-and-indent) (newline))))))) (defun org-return-indent () "Goto next table row or insert a newline and indent. -- Kaushal Modi