(foldout-exit-fold): Make numeric argument work;

before, it always exited one fold.  Replace the Common Lisp `loop'
construct with `while'.
This commit is contained in:
Richard M. Stallman 1994-05-22 09:27:36 +00:00
parent 0a56d3643a
commit a144b9e93b

View file

@ -4,7 +4,7 @@
;; Author: Kevin Broadey <KevinB@bartley.demon.co.uk> ;; Author: Kevin Broadey <KevinB@bartley.demon.co.uk>
;; Created: 27 Jan 1994 ;; Created: 27 Jan 1994
;; Version: foldout.el 1.9 dated 94/03/15 at 14:10:40 ;; Version: foldout.el 1.10 dated 94/05/19 at 17:09:12
;; Keywords: folding, outline ;; Keywords: folding, outline
;; This file is part of GNU Emacs. ;; This file is part of GNU Emacs.
@ -120,6 +120,13 @@
;;; ChangeLog: ;;; ChangeLog:
;; 1.10 21-Mar-94
;; foldout.el is now part of the GNU Emacs distribution!!
;; Put in changes made by RMS to version 1.8 to keep the diffs to a minimum.
;; bugfix: numeric arg to foldout-exit-fold wasn't working - looks like I don't
;; know how to use the Common LISP `loop' macro after all, so use `while'
;; instead.
;; 1.9 15-Mar-94 ;; 1.9 15-Mar-94
;; Didn't test that very well, did I? The change to foldout-zoom-subtree ;; Didn't test that very well, did I? The change to foldout-zoom-subtree
;; affected foldout-mouse-zoom: if the heading under the `level n' one clicked ;; affected foldout-mouse-zoom: if the heading under the `level n' one clicked
@ -313,59 +320,55 @@ exited and text is left visible."
;; exit the folds ;; exit the folds
(widen) (widen)
(loop (while (not (zerop num-folds))
always (progn ;; get the fold at the top of the stack
;; get the fold at the top of the stack (setq start-marker (car (car foldout-fold-list))
(setq start-marker (car (car foldout-fold-list)) end-marker (cdr (car foldout-fold-list))
end-marker (cdr (car foldout-fold-list)) foldout-fold-list (cdr foldout-fold-list)
foldout-fold-list (cdr foldout-fold-list) num-folds (1- num-folds))
num-folds (1- num-folds))
;; Make sure there is a newline at the end of this fold, ;; Make sure there is a newline at the end of this fold,
;; otherwise the following heading will get joined to the body ;; otherwise the following heading will get joined to the body
;; text. ;; text.
(if end-marker (if end-marker
(progn (progn
(goto-char end-marker) (goto-char end-marker)
(forward-char -1) (forward-char -1)
(or (memq (preceding-char) '(?\n ?\^M)) (or (memq (preceding-char) '(?\n ?\^M))
(insert ?\n)))) (insert ?\n))))
;; If this is the last fold to exit, hide the text unless we've ;; If this is the last fold to exit, hide the text unless we've
;; been told not to. Note that at the moment point is at the ;; been told not to. Note that at the moment point is at the
;; beginning of the following heading if there is one. ;; beginning of the following heading if there is one.
;; Also, make sure that the newline before the following heading ;; Also, make sure that the newline before the following heading
;; is \n otherwise it will be hidden. If there is a newline ;; is \n otherwise it will be hidden. If there is a newline
;; before this one, make it visible too so we do the same as ;; before this one, make it visible too so we do the same as
;; outline.el and leave a blank line before the heading. ;; outline.el and leave a blank line before the heading.
(if (zerop num-folds) (if (zerop num-folds)
(let ((beginning-of-heading (point)) (let ((beginning-of-heading (point))
(end-of-subtree (if end-marker (end-of-subtree (if end-marker
(progn (progn
(forward-char -1) (forward-char -1)
(if (memq (preceding-char) (if (memq (preceding-char)
'(?\n ?\^M)) '(?\n ?\^M))
(forward-char -1)) (forward-char -1))
(point)) (point))
(point-max)))) (point-max))))
;; hide the subtree ;; hide the subtree
(if hide-fold (if hide-fold
(outline-flag-region start-marker end-of-subtree ?\^M)) (outline-flag-region start-marker end-of-subtree ?\^M))
;; make sure the next heading is exposed ;; make sure the next heading is exposed
(if end-marker (if end-marker
(outline-flag-region end-of-subtree (outline-flag-region end-of-subtree
beginning-of-heading ?\n)) beginning-of-heading ?\n))
)) ))
;; zap the markers so they don't slow down editing ;; zap the markers so they don't slow down editing
(set-marker start-marker nil) (set-marker start-marker nil)
(if end-marker (set-marker end-marker nil)) (if end-marker (set-marker end-marker nil))
) )
;; have we exited enough folds?
until (zerop num-folds))
;; narrow to the enclosing fold if there is one ;; narrow to the enclosing fold if there is one
(if foldout-fold-list (if foldout-fold-list