summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Rankin <paul@tilk.co>2014-11-29 14:56:59 +0100
committerStephen Berman <stephen.berman@gmx.net>2014-11-29 14:56:59 +0100
commit287740d6ed8135702d34133dbf01c4387bc145dc (patch)
tree396b4128b78e8c409cf8bb8c7bc3c4358eb748cb
parentdbff8fd118824163f4d2780fa8566cf92e1d8e86 (diff)
downloademacs-287740d6ed8135702d34133dbf01c4387bc145dc.tar.gz
* outline.el (outline-move-subtree-down): Refactor and improve code.
-rw-r--r--lisp/ChangeLog4
-rw-r--r--lisp/outline.el41
2 files changed, 24 insertions, 21 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 2a450a7acff..fbd7e2f8eeb 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,7 @@
+2014-11-29 Paul Rankin <paul@tilk.co> (tiny change)
+
+ * outline.el (outline-move-subtree-down): Refactor and improve code.
+
2014-11-29 Stephen Berman <stephen.berman@gmx.net>
Stefan Monnier <monnier@iro.umontreal.ca>
diff --git a/lisp/outline.el b/lisp/outline.el
index 61ee7ff0f9f..bb563410dba 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -645,25 +645,25 @@ the match data is set appropriately."
(defun outline-move-subtree-down (&optional arg)
"Move the current subtree down past ARG headlines of the same level."
(interactive "p")
- (let ((movfunc (if (> arg 0) 'outline-get-next-sibling
- 'outline-get-last-sibling))
- (ins-point (make-marker))
- (cnt (abs arg))
- ;; Make sure we can move forward to find the end of the
- ;; subtree and the insertion point.
- (maybe-forward-char (lambda ()
- (if (eq (char-after) ?\n) (forward-char 1)
- (if (and (eobp) (not (bolp))) (insert "\n")))))
- beg end folded)
- ;; Select the tree.
- (outline-back-to-heading)
- (setq beg (point))
- (save-match-data
- (save-excursion (outline-end-of-heading)
- (setq folded (outline-invisible-p)))
- (outline-end-of-subtree))
- (funcall maybe-forward-char)
- (setq end (point))
+ (outline-back-to-heading)
+ (let* ((movfunc (if (> arg 0) 'outline-get-next-sibling
+ 'outline-get-last-sibling))
+ ;; Find the end of the subtree to be moved as well as the point to
+ ;; move it to, adding a newline if necessary, to ensure these points
+ ;; are at bol on the line below the subtree.
+ (end-point-func (lambda ()
+ (outline-end-of-subtree)
+ (if (eq (char-after) ?\n) (forward-char 1)
+ (if (and (eobp) (not (bolp))) (insert "\n")))
+ (point)))
+ (beg (point))
+ (folded (save-match-data
+ (outline-end-of-heading)
+ (outline-invisible-p)))
+ (end (save-match-data
+ (funcall end-point-func)))
+ (ins-point (make-marker))
+ (cnt (abs arg)))
;; Find insertion point, with error handling.
(goto-char beg)
(while (> cnt 0)
@@ -673,8 +673,7 @@ the match data is set appropriately."
(setq cnt (1- cnt)))
(if (> arg 0)
;; Moving forward - still need to move over subtree.
- (progn (outline-end-of-subtree)
- (funcall maybe-forward-char)))
+ (funcall end-point-func))
(move-marker ins-point (point))
(insert (delete-and-extract-region beg end))
(goto-char ins-point)