emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/orgalist db432d1 2/3: Fix auto filling


From: Nicolas Goaziou
Subject: [elpa] externals/orgalist db432d1 2/3: Fix auto filling
Date: Fri, 4 May 2018 13:44:44 -0400 (EDT)

branch: externals/orgalist
commit db432d1fc634968d8be35f97292be6aa88c5dcbf
Author: Nicolas Goaziou <address@hidden>
Commit: Nicolas Goaziou <address@hidden>

    Fix auto filling
    
    * orgalist.el (orgalist-mode): Advise around both
      `normal-auto-fill-function' and `auto-fill-function' to handle
      various Auto fill mode status when Orgalist mode starts.
    (orgalist--auto-fill): Change signature since the advice is located at
    a different place.
---
 orgalist.el | 34 ++++++++++++++++++++++------------
 1 file changed, 22 insertions(+), 12 deletions(-)

diff --git a/orgalist.el b/orgalist.el
index 6f13b83..789237e 100644
--- a/orgalist.el
+++ b/orgalist.el
@@ -493,15 +493,18 @@ move is not possible."
     (org-list-write-struct struct (org-list-parents-alist struct))
     (move-to-column col)))
 
-(defun orgalist--auto-fill ()
+(defun orgalist--auto-fill (fill-function)
   "Auto fill function.
-Return nil outside of a list or in a blank line.  This function is
-meant to be used as a piece of advice on `auto-fill-function'."
+
+FILL-FUNCTION is the regular function used to perform auto-fill.
+
+Return nil outside of a list or in a blank line.  This function
+is meant to be used as a piece of advice on both
+`auto-fill-function' and `normal-auto-fill-function'."
   (unless (org-match-line "^[ \t]*$")
     (let ((item? (orgalist--in-item-p)))
-      (when item?
-        (orgalist--call-in-item normal-auto-fill-function item?)
-        t))))
+      (if item? (orgalist--call-in-item fill-function item?)
+        (funcall fill-function)))))
 
 (defun orgalist--fill-item (justify)
   "Fill item as a paragraph.
@@ -721,18 +724,25 @@ C-c C-c         `orgalist-check-item'"
     (setq-local org-list-demote-modify-bullet nil)
     (setq-local org-list-two-spaces-after-bullet-regexp nil)
     (add-function :before-until
-                  (local 'normal-auto-fill-function)
-                  #'orgalist--auto-fill)
-    (add-function :before-until
                   (local 'fill-paragraph-function)
                   #'orgalist--fill-item)
     (add-function :before-until
                   (local 'indent-line-function)
-                  #'orgalist--indent-line))
+                  #'orgalist--indent-line)
+    ;; If Auto fill mode is not enabled when we initialize Orgalist
+    ;; mode, `auto-fill-function' is nil and we just advise
+    ;; `normal-auto-fill-function'.
+    (add-function :around
+                  (local 'normal-auto-fill-function)
+                  #'orgalist--auto-fill)
+    (when auto-fill-function
+      (add-function :around (local 'auto-fill-function) 
#'orgalist--auto-fill)))
    (t
-    (remove-function (local 'normal-auto-fill-function) #'orgalist--auto-fill)
     (remove-function (local 'fill-paragraph-function) #'orgalist--fill-item)
-    (remove-function (local 'indent-line-function) #'orgalist--indent-line))))
+    (remove-function (local 'indent-line-function) #'orgalist--indent-line)
+    (remove-function (local 'normal-auto-fill-function) #'orgalist--auto-fill)
+    (when auto-fill-function
+      (remove-function (local 'auto-fill-function) #'orgalist--auto-fill)))))
 
 
 ;;; Public functions



reply via email to

[Prev in Thread] Current Thread [Next in Thread]