branch: externals/org
commit c92769a505c6e16aef2ddbc3dcf0693c23296507
Author: Ihor Radchenko <yanta...@posteo.net>
Commit: Ihor Radchenko <yanta...@posteo.net>

    org-paste-subtree: Do not leave empty line in place of level indicator
    
    * lisp/org.el (org-paste-subtree): Remove the whole line when level
    indicator is provided.  Improve check for level indicator.
    * testing/lisp/test-org.el (test-org/paste-subtree): Add test.
    
    Reported-by: Philipp Kiefer <phil.kie...@gmail.com>
    Link: 
https://orgmode.org/list/a2cc49d3-7f65-5f6a-8f05-21e505633...@gmail.com
---
 lisp/org.el              |  7 ++++---
 testing/lisp/test-org.el | 13 +++++++++++++
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/lisp/org.el b/lisp/org.el
index f6cad152b5..a7658c3ac4 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -7100,6 +7100,7 @@ When REMOVE is non-nil, remove the subtree from the 
clipboard."
            (old-level (if (string-match org-outline-regexp-bol txt)
                           (- (match-end 0) (match-beginning 0) 1)
                         -1))
+            level-indicator?
            (force-level
             (cond
              (level (prefix-numeric-value level))
@@ -7107,7 +7108,7 @@ When REMOVE is non-nil, remove the subtree from the 
clipboard."
              ;; headline, use the number of stars as the forced level.
              ((and (org-match-line "^\\*+[ \t]*$")
                    (not (eq ?* (char-after))))
-              (org-outline-level))
+              (setq level-indicator? (org-outline-level)))
              ((looking-at-p org-outline-regexp-bol) (org-outline-level))))
            (previous-level
             (save-excursion
@@ -7129,8 +7130,8 @@ When REMOVE is non-nil, remove the subtree from the 
clipboard."
            (org-odd-levels-only nil)
            beg end newend)
        ;; Remove the forced level indicator.
-       (when (and force-level (not level))
-         (delete-region (line-beginning-position) (point)))
+       (when level-indicator?
+         (delete-region (line-beginning-position) (line-beginning-position 2)))
        ;; Paste before the next visible heading or at end of buffer,
        ;; unless point is at the beginning of a headline.
        (unless (and (bolp) (org-at-heading-p))
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index 7ed4ffd198..ed56fafab4 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -8617,6 +8617,19 @@ CLOSED: %s
          (org-test-with-temp-text "*** <point>"
            (org-paste-subtree nil "* Text")
            (buffer-string))))
+  ;; Remove the indicator line completely.
+  (should
+   (equal "* Top
+text
+more text
+*** Text
+"
+         (org-test-with-temp-text "* Top
+text
+*** <point>
+more text"
+           (org-paste-subtree nil "* Text")
+           (buffer-string))))
   ;; Optional argument LEVEL forces a level for the subtree.
   (should
    (equal "* H\n*** Text\n"

Reply via email to