(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:
parent
0a56d3643a
commit
a144b9e93b
1 changed files with 52 additions and 49 deletions
101
lisp/foldout.el
101
lisp/foldout.el
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue