org.el: RET breaks headline text

* org.el (org-return): RET breaks headline text.
* test-org.el (test-org/return): Test org-return on headline text.
* ORG-NEWS: Add entry on new org-return behavior.
This commit is contained in:
Rasmus 2015-05-15 13:08:11 +02:00
parent 6ba251d473
commit af6fdf3071
3 changed files with 61 additions and 13 deletions

View File

@ -93,6 +93,9 @@ functions. The Org version of these functions skips over inline tasks
*** ~org-element-context~ no longer return objects in keywords
~org-element-context~ used to return objects on some keywords, i.e.,
=TITLE=, =DATE= and =AUTHOR=. It now returns only the keyword.
*** Behavior of ~org-return~ changed
If point is before or after the headline title, insert newline without
changing the headline.
** Removed functions
*** Removed function ~org-translate-time~
Use ~org-timestamp-translate~ instead.

View File

@ -21185,16 +21185,36 @@ will not happen if point is in a table or on a \"dead\"
object (e.g., within a comment). In these case, you need to use
`org-open-at-point' directly."
(interactive)
(if (and (save-excursion
(beginning-of-line)
(looking-at org-todo-line-regexp))
(match-beginning 3)
(>= (point) (match-beginning 3)))
;; Point is on headline tags. Do not break them: add a newline
;; after the headline instead.
(progn (org-show-entry)
(end-of-line)
(if indent (newline-and-indent) (newline)))
(if (and (not (bolp))
(save-excursion (beginning-of-line)
(looking-at org-complex-heading-regexp)))
;; At headline.
(let ((tags-column (when (match-beginning 5)
(save-excursion (goto-char (match-beginning 5))
(current-column))))
;; Test if before or after headline title.
(string (when (not (or (< (point)
(or (match-end 3)
(match-end 2)
(save-excursion
(goto-char (match-beginning 4))
(skip-chars-backward " \t")
(point))))
(and (match-beginning 5)
(>= (point) (match-beginning 5)))))
;; Point is on headline keywords, tags or cookies. Do not break
;; them: add a newline after the headline instead.
(org-string-nw-p
(delete-and-extract-region (point) (match-end 4))))))
;; Adjust alignment of tags.
(when (and tags-column string)
(org-align-tags-here (if org-auto-align-tags
org-tags-column
tags-column)))
(end-of-line)
(org-show-entry)
(if indent (newline-and-indent) (newline))
(and string (save-excursion (insert (org-trim string)))))
(let* ((context (if org-return-follows-link (org-element-context)
(org-element-at-point)))
(type (org-element-type context)))

View File

@ -834,7 +834,7 @@
;;; Editing
(ert-deftest test-org/return ()
"Test RET (`org-return') specifications."
"Test `org-return' specifications."
;; Regular test.
(should
(equal "Para\ngraph"
@ -878,11 +878,36 @@
(org-test-with-temp-text "- A\n<point>- B"
(org-return t)
(buffer-string))))
;; Special case: on tags part of a headline, add a newline below it
;; instead of breaking it.
;; On tags part of a headline, add a newline below it instead of
;; breaking it.
(should
(equal "* H :tag:\n"
(org-test-with-temp-text "* H :<point>tag:"
(org-return)
(buffer-string))))
;; Before headline text, add a newline below it instead of breaking
;; it.
(should
(equal "* TODO H :tag:\n"
(org-test-with-temp-text "* <point>TODO H :tag:"
(org-return)
(buffer-string))))
(should
(equal "* TODO [#B] H :tag:\n"
(org-test-with-temp-text "* TODO<point> [#B] H :tag:"
(org-return)
(buffer-string))))
;; At headline text, break headline text but preserve tags.
(should
(equal "* TODO [#B] foo :tag:\nbar"
(let (org-auto-align-tags)
(org-test-with-temp-text "* TODO [#B] foo<point>bar :tag:"
(org-return)
(buffer-string)))))
;; At bol of headline insert newline.
(should
(equal "\n* h"
(org-test-with-temp-text "<point>* h"
(org-return)
(buffer-string)))))