From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marco Wahl Subject: Re: org-move-subtree-down whitespace dance Date: Thu, 12 Apr 2018 10:57:50 +0200 Message-ID: <84h8ogajjl.fsf@gmail.com> References: <84zi299ac8.fsf@gmail.com> <87k1tdzd7b.fsf@nicolasgoaziou.fr> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:42533) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f6Y3V-0005IB-CY for emacs-orgmode@gnu.org; Thu, 12 Apr 2018 04:58:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f6Y3S-0000me-4A for emacs-orgmode@gnu.org; Thu, 12 Apr 2018 04:58:09 -0400 Received: from [195.159.176.226] (port=53798 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1f6Y3R-0000lB-SN for emacs-orgmode@gnu.org; Thu, 12 Apr 2018 04:58:06 -0400 Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1f6Y1E-00008W-O3 for emacs-orgmode@gnu.org; Thu, 12 Apr 2018 10:55:48 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Hi, Thanks for your time! >> After having stumbled over >> >> https://emacs.stackexchange.com/questions/32144/org-mode-org-move-subtree-down-function-strange-behavior >> >> I also think the behavior of org-move-subtree-down is strange. >> >> What about pulling out the dance with the whitespace from >> org-move-subtree-down and just move the subtree as it is? > > There's at least a minor issue. I you like to separate your heading with > N spaces, you must keep N blank lines at the end of the buffer at all > time. Granted, the current implementation requires the same thing before > the first headline, but those are easier to see and maintain. Agreed. This is a point. Possibly one could write some kind of formatter to maintain a certain scheme to separate subtrees with N blank lines. > Intuitively, I would say the current behaviour is better, but feel free > to provide a patch so we can test the other way. I still propose to let org-move-subtree-down simply just move the subtree as it is. Concretely see the patch. Thanks for giving it a chance and best regards Marco --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-org-Remove-special-whitespace-treatment-when-moving-.patch >From f5f9f9748a8e9b57282bdc60bc14efd0e8e8bea1 Mon Sep 17 00:00:00 2001 From: Marco Wahl Date: Wed, 11 Apr 2018 14:55:00 +0200 Subject: [PATCH] org: Remove special whitespace treatment when moving subtree * lisp/org.el (org-move-subtree-down): Remove special whitespace treatment. * testing/lisp/test-org.el (test-org/drag-element-backward): Accommodate test. --- lisp/org.el | 29 ++++------------------------- testing/lisp/test-org.el | 2 +- 2 files changed, 5 insertions(+), 26 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index 075c8f32f..d16d73cd4 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -8128,32 +8128,22 @@ case." (ins-point (make-marker)) (cnt (abs arg)) (col (current-column)) - beg beg0 end txt folded ne-beg ne-end ne-ins ins-end) + beg end txt folded) ;; Select the tree (org-back-to-heading) - (setq beg0 (point)) - (save-excursion - (setq ne-beg (org-back-over-empty-lines)) - (setq beg (point))) + (setq beg (point)) (save-match-data (save-excursion (outline-end-of-heading) (setq folded (org-invisible-p))) (progn (org-end-of-subtree nil t) (unless (eobp) (backward-char)))) (outline-next-heading) - (setq ne-end (org-back-over-empty-lines)) (setq end (point)) - (goto-char beg0) - (when (and (> arg 0) (org-first-sibling-p) (< ne-end ne-beg)) - ;; include less whitespace - (save-excursion - (goto-char beg) - (forward-line (- ne-beg ne-end)) - (setq beg (point)))) + (goto-char beg) ;; Find insertion point, with error handling (while (> cnt 0) (unless (and (funcall movfunc) (looking-at org-outline-regexp)) - (goto-char beg0) + (goto-char beg) (user-error "Cannot move past superior level or buffer limit")) (setq cnt (1- cnt))) (when (> arg 0) @@ -8162,7 +8152,6 @@ case." (save-excursion (org-back-over-empty-lines) (or (bolp) (newline)))) - (setq ne-ins (org-back-over-empty-lines)) (move-marker ins-point (point)) (setq txt (buffer-substring beg end)) (org-save-markers-in-region beg end) @@ -8176,18 +8165,8 @@ case." (org-reinstall-markers-in-region bbb) (move-marker ins-point bbb)) (or (bolp) (insert "\n")) - (setq ins-end (point)) (goto-char ins-point) (org-skip-whitespace) - (when (and (< arg 0) - (org-first-sibling-p) - (> ne-ins ne-beg)) - ;; Move whitespace back to beginning - (save-excursion - (goto-char ins-end) - (let ((kill-whole-line t)) - (kill-line (- ne-ins ne-beg)) (point))) - (insert (make-string (- ne-ins ne-beg) ?\n))) (move-marker ins-point nil) (if folded (outline-hide-subtree) diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el index fe2111392..2438508bf 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -3965,7 +3965,7 @@ Text. ;; Pathological case: handle call with point in blank lines right ;; after a headline. (should - (equal "* H2\n* H1\nText\n\n" + (equal "* H2\n\n* H1\nText\n" (org-test-with-temp-text "* H1\nText\n* H2\n\n" (org-drag-element-backward) (buffer-string))))) -- 2.17.0 --=-=-=--