Commit a144b9e9 authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

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

before, it always exited one fold.  Replace the Common Lisp `loop'
construct with `while'.
parent 0a56d364
...@@ -4,7 +4,7 @@ ...@@ -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 @@ ...@@ -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." ...@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment