From d460b8048d7b3b308cd93794b1de46837438a8e6 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Sat, 27 Jul 2013 22:02:45 +0200 Subject: [PATCH] Add support for `adaptive-fill-regexp' in paragraphs and comments * lisp/org.el (org-adaptive-fill-function, org-fill-paragraph): Add support for `adaptive-fill-regexp' in paragraphs and comments. * testing/lisp/test-org.el: Add test. --- lisp/org.el | 43 ++++++++++++++++++++++++++++++------------- testing/lisp/test-org.el | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 13 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index 2f619cc..c852550 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -22179,7 +22179,15 @@ meant to be filled." (post-affiliated (org-element-property :post-affiliated element))) (unless (and post-affiliated (< p post-affiliated)) (case type - (comment (looking-at "[ \t]*# ?") (match-string 0)) + (comment + (save-excursion + (beginning-of-line) + (looking-at "[ \t]*# ?") + (goto-char (match-end 0)) + (let ((comment-prefix (match-string 0))) + (if (looking-at adaptive-fill-regexp) + (concat comment-prefix (match-string 0)) + comment-prefix)))) (footnote-definition "") ((item plain-list) (make-string (org-list-item-body-column @@ -22188,15 +22196,19 @@ meant to be filled." ? )) (paragraph ;; Fill prefix is usually the same as the current line, - ;; except if the paragraph is at the beginning of an item. + ;; except if the paragraph is at the beginning of an + ;; item. For convenience, if `adaptive-fill-regexp' + ;; matches, use it. (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 "")))) + (save-excursion + (beginning-of-line) + (cond ((eq (org-element-type parent) 'item) + (make-string (org-list-item-body-column + (org-element-property :begin parent)) + ? )) + ((looking-at adaptive-fill-regexp) (match-string 0)) + ((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) @@ -22341,10 +22353,15 @@ a footnote definition, try to fill the first paragraph within." (line-end-position))))) ;; Do not fill comments when at a blank line or at ;; affiliated keywords. - (let ((fill-prefix (save-excursion - (beginning-of-line) - (looking-at "[ \t]*#") - (concat (match-string 0) " ")))) + (let ((fill-prefix + (save-excursion + (beginning-of-line) + (looking-at "[ \t]*#") + (let ((comment-prefix (match-string 0))) + (goto-char (match-end 0)) + (if (looking-at adaptive-fill-regexp) + (concat comment-prefix (match-string 0)) + (concat comment-prefix " ")))))) (when (> end begin) (save-excursion (fill-region-as-paragraph begin end justify)))))) diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el index 504defa..517d0d1 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -176,6 +176,14 @@ (narrow-to-region 1 8) (org-fill-paragraph) (buffer-string))))) + ;; Handle `adaptive-fill-regexp' in paragraphs. + (should + (equal "> a b" + (org-test-with-temp-text "> a\n> b" + (let ((fill-column 5) + (adaptive-fill-regexp "[ \t]*>+[ \t]*")) + (org-fill-paragraph) + (buffer-string))))) ;; Special case: Fill first paragraph when point is at an item or ;; a plain-list or a footnote reference. (should @@ -225,6 +233,14 @@ (let ((fill-column 20)) (org-fill-paragraph) (buffer-string))))) + ;; Handle `adaptive-fill-regexp' in comments. + (should + (equal "# > a b" + (org-test-with-temp-text "# > a\n# > b" + (let ((fill-column 20) + (adaptive-fill-regexp "[ \t]*>+[ \t]*")) + (org-fill-paragraph) + (buffer-string))))) ;; Do nothing at affiliated keywords. (org-test-with-temp-text "#+NAME: para\nSome\ntext." (let ((fill-column 20)) @@ -255,6 +271,15 @@ (end-of-line) (org-auto-fill-function) (buffer-string))))) + ;; Auto fill paragraph when `adaptive-fill-regexp' matches. + (should + (equal "> 12345\n> 7890" + (org-test-with-temp-text "> 12345 7890" + (let ((fill-column 5) + (adaptive-fill-regexp "[ \t]*>+[ \t]*")) + (end-of-line) + (org-auto-fill-function) + (buffer-string))))) ;; Auto fill comments. (should (equal " # 12345\n # 7890" @@ -263,6 +288,15 @@ (end-of-line) (org-auto-fill-function) (buffer-string))))) + ;; Auto fill comments when `adaptive-fill-regexp' matches. + (should + (equal " # > 12345\n # > 7890" + (org-test-with-temp-text " # > 12345 7890" + (let ((fill-column 10) + (adaptive-fill-regexp "[ \t]*>+[ \t]*")) + (end-of-line) + (org-auto-fill-function) + (buffer-string))))) ;; A hash within a line isn't a comment. (should-not (equal "12345 # 7890\n# 1" -- 1.8.3.4