Browse Source

Merge branch 'maint'

Conflicts:
	lisp/org.el
Bastien Guerry 5 years ago
parent
commit
8d7990acfa
1 changed files with 48 additions and 41 deletions
  1. 48 41
      lisp/org.el

+ 48 - 41
lisp/org.el

@@ -21524,47 +21524,54 @@ function installs the following ones: \"property\",
   "Compute a fill prefix for the current line.
 Return fill prefix, as a string, or nil if current line isn't
 meant to be filled."
-  (org-with-wide-buffer
-   (unless (and (derived-mode-p 'message-mode) (not (message-in-body-p)))
-     ;; FIXME: This is really the job of orgstruct++-mode
-     (let* ((p (line-beginning-position))
-	    (element (save-excursion (beginning-of-line)
-				     (org-element-at-point)))
-	    (type (org-element-type element))
-	    (post-affiliated (org-element-property :post-affiliated element)))
-       (unless (and post-affiliated (< p post-affiliated))
-	 (case type
-	   (comment (looking-at "[ \t]*# ?") (match-string 0))
-	   (footnote-definition "")
-	   ((item plain-list)
-	    (make-string (org-list-item-body-column
-			  (or post-affiliated
-			      (org-element-property :begin element)))
-			 ? ))
-	   (paragraph
-	    ;; Fill prefix is usually the same as the current line,
-	    ;; except if the paragraph is at the beginning of an item.
-	    (let ((parent (org-element-property :parent element)))
-	      (cond ((eq (org-element-type parent) 'item)
-		     (make-string (org-list-item-body-column
-				   (org-element-property :begin parent))
-				  ? ))
-		    ((save-excursion (beginning-of-line) (looking-at "[ \t]+"))
-		     (match-string 0))
-		    (t  ""))))
-	   (comment-block
-	    ;; Only fill contents if P is within block boundaries.
-	    (let* ((cbeg (save-excursion (goto-char post-affiliated)
-					 (forward-line)
-					 (point)))
-		   (cend (save-excursion
-			   (goto-char (org-element-property :end element))
-			   (skip-chars-backward " \r\t\n")
-			   (line-beginning-position))))
-	      (when (and (>= p cbeg) (< p cend))
-		(if (save-excursion (beginning-of-line) (looking-at "[ \t]+"))
-		    (match-string 0)
-		  ""))))))))))
+  (let (prefix)
+    (when (and (derived-mode-p 'message-mode) (message-in-body-p))
+      (save-excursion
+	(beginning-of-line)
+	(cond ((looking-at message-cite-prefix-regexp)
+	       (setq prefix (match-string-no-properties 0)))
+	      ((looking-at org-outline-regexp)
+	       (setq prefix "")))))
+    (or prefix
+	(org-with-wide-buffer
+	 (let* ((p (line-beginning-position))
+		(element (save-excursion (beginning-of-line)
+					 (org-element-at-point)))
+		(type (org-element-type element))
+		(post-affiliated (org-element-property :post-affiliated element)))
+	   (unless (and post-affiliated (< p post-affiliated))
+	     (case type
+	       (comment (looking-at "[ \t]*# ?") (match-string 0))
+	       (footnote-definition "")
+	       ((item plain-list)
+		(make-string (org-list-item-body-column
+			      (or post-affiliated
+				  (org-element-property :begin element)))
+			     ? ))
+	       (paragraph
+		;; Fill prefix is usually the same as the current line,
+		;; except if the paragraph is at the beginning of an item.
+		(let ((parent (org-element-property :parent element)))
+		  (cond ((eq (org-element-type parent) 'item)
+			 (make-string (org-list-item-body-column
+				       (org-element-property :begin parent))
+				      ? ))
+			((save-excursion (beginning-of-line) (looking-at "[ \t]+"))
+			 (match-string 0))
+			(t  ""))))
+	       (comment-block
+		;; Only fill contents if P is within block boundaries.
+		(let* ((cbeg (save-excursion (goto-char post-affiliated)
+					     (forward-line)
+					     (point)))
+		       (cend (save-excursion
+			       (goto-char (org-element-property :end element))
+			       (skip-chars-backward " \r\t\n")
+			       (line-beginning-position))))
+		  (when (and (>= p cbeg) (< p cend))
+		    (if (save-excursion (beginning-of-line) (looking-at "[ \t]+"))
+			(match-string 0)
+		      "")))))))))))
 
 (declare-function message-goto-body "message" ())
 (defvar message-cite-prefix-regexp)	; From message.el