org.el: New function org-delete-indentation

* org.el (org-delete-indentation): New function.
  (org-mode-map): Bind org-delete-indentation to M-^.
* test-org.el (test-org-delete-indentation): Test org-delete-indentation.
* ORG-NEWS: Add entry on org-delete-indentation.
This commit is contained in:
Rasmus 2015-05-16 17:19:03 +02:00
parent af6fdf3071
commit 248266e560
3 changed files with 67 additions and 0 deletions

View File

@ -376,6 +376,9 @@ for details.
Calling ~org-edit-footnote-reference~ (C-c ') on a footnote reference
allows to edit its definition, as long as it is not anonymous, in
a dedicated buffer. It works even if buffer is currently narrowed.
*** New function ~org-delete-indentation~ bound to ~M-^~
Work as ~delete-indentation~ unless at heading, in which case text is
added to headline text.
** Miscellaneous
*** Strip all meta data from ITEM special property
ITEM special property does not contain TODO, priority or tags anymore.

View File

@ -19832,6 +19832,7 @@ boundaries."
(org-defkey org-mode-map [remap comment-dwim] 'org-comment-dwim)
(org-defkey org-mode-map [remap forward-paragraph] 'org-forward-paragraph)
(org-defkey org-mode-map [remap backward-paragraph] 'org-backward-paragraph)
(org-defkey org-mode-map "\M-^" 'org-delete-indentation)
(org-defkey org-mode-map "\C-m" 'org-return)
(org-defkey org-mode-map "\C-j" 'org-return-indent)
(org-defkey org-mode-map "\C-c?" 'org-table-field-info)
@ -21159,6 +21160,39 @@ This command does many different things, depending on context:
(let ((org-note-abort t))
(funcall org-finish-function))))
(defun org-delete-indentation (&optional ARG)
"Join current line to previous and fix whitespace at join.
If previous line is a headline add to headline title. Otherwise
the function calls `delete-indentation'.
With argument, join this line to following line."
(interactive "*P")
(if (save-excursion
(if ARG (beginning-of-line)
(forward-line -1))
(looking-at org-complex-heading-regexp))
;; At headline.
(let ((tags-column (when (match-beginning 5)
(save-excursion (goto-char (match-beginning 5))
(current-column))))
(string (concat " " (progn (when ARG (forward-line 1))
(org-trim (delete-and-extract-region
(line-beginning-position)
(line-end-position)))))))
(unless (bobp) (delete-region (point) (1- (point))))
(goto-char (or (match-end 4)
(match-beginning 5)
(match-end 0)))
(skip-chars-backward " \t")
(save-excursion (insert string))
;; Adjust alignment of tags.
(when tags-column
(org-align-tags-here (if org-auto-align-tags
org-tags-column
tags-column))))
(delete-indentation ARG)))
(defun org-open-line (n)
"Insert a new row in tables, call `open-line' elsewhere.
If `org-special-ctrl-o' is nil, just call `open-line' everywhere."

View File

@ -833,6 +833,36 @@
;;; Editing
(ert-deftest test-org/delete-indentation ()
"Test `org-delete-indentation' specifications."
;; Regular test.
(should (equal "foo bar"
(org-test-with-temp-text
"foo \n bar<point>"
(org-delete-indentation)
(buffer-string))))
;; With optional argument.
(should (equal "foo bar"
(org-test-with-temp-text
"foo<point> \n bar"
(org-delete-indentation t)
(buffer-string))))
;; At headline text should be appended to the headline text.
(should
(equal"* foo bar :tag:"
(let (org-auto-align-tags)
(org-test-with-temp-text
"* foo :tag:\n bar<point>"
(org-delete-indentation)
(buffer-string)))))
(should
(equal "* foo bar :tag:"
(let (org-auto-align-tags)
(org-test-with-temp-text
"* foo <point>:tag:\n bar"
(org-delete-indentation t)
(buffer-string))))))
(ert-deftest test-org/return ()
"Test `org-return' specifications."
;; Regular test.