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.
This commit is contained in:
Nicolas Goaziou 2013-07-28 10:14:35 +02:00
parent af300bd5b0
commit 36161345d1
2 changed files with 66 additions and 17 deletions

View File

@ -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))

View File

@ -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"