From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stephen Berman Newsgroups: gmane.emacs.bugs Subject: bug#19102: 24.4; outline-move-subtree-up/down error at last and second-last subtree Date: Wed, 19 Nov 2014 14:17:25 +0100 Message-ID: <87lhn7s522.fsf@rosalinde.fritz.box> References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1416403109 29631 80.91.229.3 (19 Nov 2014 13:18:29 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 19 Nov 2014 13:18:29 +0000 (UTC) Cc: 19102@debbugs.gnu.org To: Paul Rankin Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Nov 19 14:18:22 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Xr59J-0007im-Ek for geb-bug-gnu-emacs@m.gmane.org; Wed, 19 Nov 2014 14:18:21 +0100 Original-Received: from localhost ([::1]:58095 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xr59J-00032x-0u for geb-bug-gnu-emacs@m.gmane.org; Wed, 19 Nov 2014 08:18:21 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:38858) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xr599-00032V-50 for bug-gnu-emacs@gnu.org; Wed, 19 Nov 2014 08:18:17 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Xr590-0006fi-PC for bug-gnu-emacs@gnu.org; Wed, 19 Nov 2014 08:18:11 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:40728) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xr590-0006fZ-LX for bug-gnu-emacs@gnu.org; Wed, 19 Nov 2014 08:18:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1Xr58z-0003Ab-RA for bug-gnu-emacs@gnu.org; Wed, 19 Nov 2014 08:18:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Stephen Berman Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 19 Nov 2014 13:18:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19102 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 19102-submit@debbugs.gnu.org id=B19102.141640305312147 (code B ref 19102); Wed, 19 Nov 2014 13:18:01 +0000 Original-Received: (at 19102) by debbugs.gnu.org; 19 Nov 2014 13:17:33 +0000 Original-Received: from localhost ([127.0.0.1]:37941 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Xr58W-00039q-IJ for submit@debbugs.gnu.org; Wed, 19 Nov 2014 08:17:33 -0500 Original-Received: from mout.gmx.net ([212.227.17.21]:61818) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Xr58T-00039h-FI for 19102@debbugs.gnu.org; Wed, 19 Nov 2014 08:17:30 -0500 Original-Received: from rosalinde.fritz.box ([89.245.64.17]) by mail.gmx.com (mrgmx103) with ESMTPSA (Nemesis) id 0ML6XF-1XrMFa0vGz-000LvA; Wed, 19 Nov 2014 14:17:27 +0100 In-Reply-To: (Paul Rankin's message of "Wed, 19 Nov 2014 18:29:01 +1000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) X-Provags-ID: V03:K0:DB444QybU4sztuMHvHgk+ZL2YVfKwbZug9CJmm5Ioiu+9CAz+HD o08Iv1Mr9jdX6VQGGBQ8dqY2KxKTMxV7rsNb/KbzMecmKersEtdZTxJvl0Q4jOXZH28khT3 vPGJOfW9SWG5LPgdy3Eznq54/pUyeVVEwPzuz242SV0Y6oRFccD2piD4aoHcOZ30NcgOheF Rz1qHD/2tGZHCmIDL5Mnw== X-UI-Out-Filterresults: notjunk:1; X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:96235 --=-=-= Content-Type: text/plain On Wed, 19 Nov 2014 18:29:01 +1000 Paul Rankin wrote: > 1. emacs -Q > 2. M-x switch-to-buffer RET test > 3. M-x outline-mode > 4. insert: > * one > * two > * three > 5. position point at "* three" > 6. M-x outline-move-subtree-up > => Wrong type argument: number-or-marker-p, nil > 7. position point at "* two" > 8. M-x outline-move-subtree-down > => Wrong type argument: number-or-marker-p, nil > > Expected behaviour: > > - at 6. subtree "* three" should move above "* two" > - or at 8. subtree "* two" should move below "* three" The following patch (against master) seems to fix this, though it could probably be done more elegantly. Steve Berman --=-=-= Content-Type: text/x-patch Content-Disposition: inline Content-Description: bug#19102 patch diff --git a/lisp/outline.el b/lisp/outline.el index c7cad31..bfed982 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -649,17 +649,27 @@ the match data is set appropriately." 'outline-get-last-sibling)) (ins-point (make-marker)) (cnt (abs arg)) + ;; Make sure we can move forward when needed (bug#19102). + (maybe-forward-char (lambda () + (when (and (eobp) (not (bolp))) + (newline)) + (unless (bolp) + (if (= (char-after) ?\n) + (forward-char 1))))) + (empty-last-line (save-excursion + (goto-char (point-max)) + (and (bolp) (eolp)))) 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) @@ -667,14 +677,19 @@ the match data is set appropriately." (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) (if folded (hide-subtree)) - (move-marker ins-point nil))) + (move-marker ins-point nil) + ;; Clean up if necessary. + (save-excursion + (goto-char (point-max)) + (when (and (bolp) (eolp) (not empty-last-line)) + (delete-char -1))))) (defun outline-end-of-heading () (if (re-search-forward outline-heading-end-regexp nil 'move) --=-=-=--