>From 6f2a4d4f02680fae95c2e799db2ae455a06aa115 Mon Sep 17 00:00:00 2001 From: Rasmus Date: Sat, 16 May 2015 17:19:03 +0200 Subject: [PATCH 2/3] 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. --- etc/ORG-NEWS | 3 +++ lisp/org.el | 31 +++++++++++++++++++++++++++++++ testing/lisp/test-org.el | 30 ++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index a3e1ae2..91e30f8 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -377,6 +377,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. diff --git a/lisp/org.el b/lisp/org.el index a46cb86..6db69c1 100755 --- a/lisp/org.el +++ b/lisp/org.el @@ -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) @@ -20976,6 +20977,36 @@ 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 this line to previous and fix up whitespace at join. + +If previous line is a headline add to headline text. 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-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." diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el index 2f21c8e..04e0843 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -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" + (org-delete-indentation) + (buffer-string)))) + ;; With optional argument. + (should (equal "foo bar" + (org-test-with-temp-text + "foo \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" + (org-delete-indentation) + (buffer-string))))) + (should + (equal "* foo bar :tag:" + (let (org-auto-align-tags) + (org-test-with-temp-text + "* foo :tag:\n bar" + (org-delete-indentation t) + (buffer-string)))))) + (ert-deftest test-org/return () "Test `org-return' specifications." ;; Regular test. -- 2.4.1