diff options
author | Paul Rankin <paul@tilk.co> | 2014-11-29 14:56:59 +0100 |
---|---|---|
committer | Stephen Berman <stephen.berman@gmx.net> | 2014-11-29 14:56:59 +0100 |
commit | 287740d6ed8135702d34133dbf01c4387bc145dc (patch) | |
tree | 396b4128b78e8c409cf8bb8c7bc3c4358eb748cb | |
parent | dbff8fd118824163f4d2780fa8566cf92e1d8e86 (diff) | |
download | emacs-287740d6ed8135702d34133dbf01c4387bc145dc.tar.gz |
* outline.el (outline-move-subtree-down): Refactor and improve code.
-rw-r--r-- | lisp/ChangeLog | 4 | ||||
-rw-r--r-- | lisp/outline.el | 41 |
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) |