summaryrefslogtreecommitdiff
path: root/lisp/outline.el
diff options
context:
space:
mode:
authorStephen Berman <stephen.berman@gmx.net>2014-11-27 11:03:58 +0100
committerStephen Berman <stephen.berman@gmx.net>2014-11-27 11:03:58 +0100
commitb3910f653938fc8625f4e0c970123e826bbf427e (patch)
tree613576b8f4f483dad7ab0014707a74a84290ec2a /lisp/outline.el
parentb66511f7680a195c5f56f2275f21e1d571706fba (diff)
downloademacs-b3910f653938fc8625f4e0c970123e826bbf427e.tar.gz
outline.el: Fix subtree movement.
Fixes: debbugs:19102 Co-authored-by: Stefan Monnier <monnier@iro.umontreal.ca> * outline.el (outline-move-subtree-down): Make sure we can move forward to find the end of the subtree and the insertion point.
Diffstat (limited to 'lisp/outline.el')
-rw-r--r--lisp/outline.el17
1 files changed, 11 insertions, 6 deletions
diff --git a/lisp/outline.el b/lisp/outline.el
index c7cad31f572..61ee7ff0f9f 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -649,27 +649,32 @@ the match data is set appropriately."
'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
+ ;; 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))
- (if (= (char-after) ?\n) (forward-char 1))
+ (funcall maybe-forward-char)
(setq end (point))
- ;; Find insertion point, with error handling
+ ;; Find insertion point, with error handling.
(goto-char beg)
(while (> cnt 0)
(or (funcall movfunc)
(progn (goto-char beg)
- (error "Cannot move past superior level")))
+ (user-error "Cannot move past superior level")))
(setq cnt (1- cnt)))
(if (> arg 0)
- ;; Moving forward - still need to move over subtree
+ ;; Moving forward - still need to move over subtree.
(progn (outline-end-of-subtree)
- (if (= (char-after) ?\n) (forward-char 1))))
+ (funcall maybe-forward-char)))
(move-marker ins-point (point))
(insert (delete-and-extract-region beg end))
(goto-char ins-point)