summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <n.goaziou@gmail.com>2013-07-28 10:14:35 +0200
committerNicolas Goaziou <n.goaziou@gmail.com>2013-07-28 10:16:03 +0200
commit36161345d1e1a4e9ff26f6c7da11ffb19a854c44 (patch)
treeeb7635a3e9529a376550df0ce606ce9afe1dca30
parentaf300bd5b0b77086c5b4589f823dcb783e1e7c56 (diff)
downloadorg-mode-36161345d1e1a4e9ff26f6c7da11ffb19a854c44.tar.gz
Reintroduce 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 tests.
-rw-r--r--lisp/org.el49
-rw-r--r--testing/lisp/test-org.el34
2 files changed, 66 insertions, 17 deletions
diff --git a/lisp/org.el b/lisp/org.el
index c28f3b9..798816b 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -22113,7 +22113,8 @@ hierarchy of headlines by UP levels before marking the subtree."
(defun org-adaptive-fill-function ()
"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."
+meant to be filled. For convenience, if `adaptive-fill-regexp'
+matches in paragraphs or comments, use it."
(let (prefix)
(catch 'exit
(when (derived-mode-p 'message-mode)
@@ -22137,7 +22138,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
@@ -22146,15 +22155,17 @@ 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.
+ ;; unless 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 ""))))
+ (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)
@@ -22297,13 +22308,17 @@ a footnote definition, try to fill the first paragraph within."
(1- (line-beginning-position))
(skip-chars-backward " \r\t\n")
(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) " "))))
- (when (> end begin)
+ ;; Do not fill comments when at a blank line.
+ (when (> end begin)
+ (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 " "))))))
(save-excursion
(fill-region-as-paragraph begin end justify))))))
t))
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index 447c856..53300eb 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"