[movitz-cvs] CVS update: movitz/losp/los0.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Mon Jul 12 08:41:23 UTC 2004
Update of /project/movitz/cvsroot/movitz/losp
In directory common-lisp.net:/tmp/cvs-serv24325
Modified Files:
los0.lisp
Log Message:
Tweaked the implementation of :more.
Date: Mon Jul 12 01:41:23 2004
Author: ffjeld
Index: movitz/losp/los0.lisp
diff -u movitz/losp/los0.lisp:1.17 movitz/losp/los0.lisp:1.18
--- movitz/losp/los0.lisp:1.17 Mon Jul 12 01:00:06 2004
+++ movitz/losp/los0.lisp Mon Jul 12 01:41:23 2004
@@ -9,7 +9,7 @@
;;;; Created at: Fri Dec 1 18:08:32 2000
;;;; Distribution: See the accompanying file COPYING.
;;;;
-;;;; $Id: los0.lisp,v 1.17 2004/07/12 08:00:06 ffjeld Exp $
+;;;; $Id: los0.lisp,v 1.18 2004/07/12 08:41:23 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -808,20 +808,32 @@
(defmacro with-paging (options &body body)
(declare (ignore options))
`(block paging
- (let ((*paging-offset* 2))
+ (let ((paging-offset 2))
(handler-bind
((newline (lambda (condition)
(declare (ignore condition))
- (when (>= (incf *paging-offset*)
- muerte.x86-pc::*screen-height*)
- (format t "~&more? ")
- (loop
+ (when (and paging-offset
+ (>= (incf paging-offset)
+ muerte.x86-pc::*screen-height*))
+ (format t "~&more? (y/n/a) ")
+ (prog ()
+ loop
(case (muerte.x86-pc.keyboard:poll-char)
- ((#\esc #\n #\N)
+ ((#\esc)
+ (break "Console pager"))
+ ((#\n #\N) ; No more
(return-from paging (values)))
- ((#\y #\Y #\space #\newline)
- (setf *paging-offset* 1)
- (return))))))))
+ ((#\a #\A) ; Quit paging
+ (setf paging-offset nil))
+ ((#\newline #\x)
+ (setf paging-offset
+ (1- muerte.x86-pc::*screen-height*)))
+ ((#\y #\Y #\space) ; One more page
+ (setf paging-offset 1))
+ (t (go loop))))
+ (write-char #\return)
+ (clear-line *standard-output* 0 (cursor-y *standard-output*))
+ ))))
, at body))))
(defun tp (x) (dotimes (i x) (print i)))
More information about the Movitz-cvs
mailing list