Rewrote the loop in KEYBOARD-MACRO-EXECUTE so that
authorJason Wilson <edu/mit/csail/zurich/jawilson>
Thu, 19 Aug 1993 05:56:15 +0000 (05:56 +0000)
committerJason Wilson <edu/mit/csail/zurich/jawilson>
Thu, 19 Aug 1993 05:56:15 +0000 (05:56 +0000)
CALL-WITH-CURRENT-CONTINUATION would get called just once per keyboard
macro.  I also made the call to COMMAND-READER supply an optional
arguement (#f) that wasn't being supplied before.

v7/src/edwin/kmacro.scm

index 8e27c94a2d04d3791f65639e164f1e1e299c6139..d81380b10118987270b65e9970a202768e2bb528 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;;    $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/kmacro.scm,v 1.38 1992/04/16 22:30:00 cph Exp $
+;;;    $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/kmacro.scm,v 1.39 1993/08/19 05:56:15 jawilson Exp $
 ;;;
 ;;;    Copyright (c) 1985, 1989-92 Massachusetts Institute of Technology
 ;;;
   (fluid-let ((*executing-keyboard-macro?* true)
              (*keyboard-macro-position*)
              (*keyboard-macro-continuation*))
-    (define (loop n)
-      (set! *keyboard-macro-position* *macro)
-      (if (call-with-current-continuation
-          (lambda (c)
-            (set! *keyboard-macro-continuation* c)
-            (command-reader)))
-         (cond ((zero? n) (loop 0))
-               ((> n 1) (loop (-1+ n))))))
-    (if (not (negative? repeat)) (loop repeat))))
+    (call-with-current-continuation
+     (lambda (c)
+       (let ((n repeat))
+        (set! *keyboard-macro-continuation*
+              (lambda (v)
+                (if (and v (positive? n))
+                    (begin
+                      (set! *keyboard-macro-position* *macro)
+                      (set! n (-1+ n))
+                      (command-reader #f))
+                    (c unspecific))))
+        (*keyboard-macro-continuation* #t))))))
 
 (define (keyboard-macro-define name *macro)
   (string-table-put! named-keyboard-macros name last-keyboard-macro)