summaryrefslogtreecommitdiff
path: root/lisp/play
diff options
context:
space:
mode:
authorThien-Thi Nguyen <ttn@gnuvola.org>2004-12-16 17:11:15 +0000
committerThien-Thi Nguyen <ttn@gnuvola.org>2004-12-16 17:11:15 +0000
commit8b000fc3b126bf3417b7daa109c08aa8e7bcd3b4 (patch)
tree3aff7bb74e06b00708ee5b3dc8dab640b4c29b8f /lisp/play
parent32c544b576558829aa80e90063ccf522d5837bd9 (diff)
downloademacs-8b000fc3b126bf3417b7daa109c08aa8e7bcd3b4.tar.gz
(zone): Fix omission bug: Use a self-disabling
one-shot thunk for uniform (error, quit, normal) recovery. (zone-pgm-random-life): Fix bug: Recognize empty initial field by lack of "@" chars.
Diffstat (limited to 'lisp/play')
-rw-r--r--lisp/play/zone.el22
1 files changed, 16 insertions, 6 deletions
diff --git a/lisp/play/zone.el b/lisp/play/zone.el
index b47a287701d..9338834d6da 100644
--- a/lisp/play/zone.el
+++ b/lisp/play/zone.el
@@ -152,8 +152,15 @@ If the element is a function or a list of a function and a number,
(set-window-point (selected-window) wp)
(sit-for 0 500)
(let ((pgm (elt zone-programs (random (length zone-programs))))
- (ct (and f (frame-parameter f 'cursor-type))))
- (when ct (modify-frame-parameters f '((cursor-type . (bar . 0)))))
+ (ct (and f (frame-parameter f 'cursor-type)))
+ (restore (list '(kill-buffer outbuf))))
+ (when ct
+ (modify-frame-parameters f '((cursor-type . (bar . 0))))
+ (setq restore (cons '(modify-frame-parameters
+ f (list (cons 'cursor-type ct)))
+ restore)))
+ ;; Make `restore' a self-disabling one-shot thunk.
+ (setq restore `(lambda () ,@restore (setq restore nil)))
(condition-case nil
(progn
(message "Zoning... (%s)" pgm)
@@ -167,14 +174,17 @@ If the element is a function or a list of a function and a number,
(zone-call pgm)
(message "Zoning...sorry"))
(error
+ (funcall restore)
(while (not (input-pending-p))
(message (format "We were zoning when we wrote %s..." pgm))
(sit-for 3)
(message "...here's hoping we didn't hose your buffer!")
(sit-for 3)))
- (quit (ding) (message "Zoning...sorry")))
- (when ct (modify-frame-parameters f (list (cons 'cursor-type ct)))))
- (kill-buffer outbuf)))
+ (quit
+ (funcall restore)
+ (ding)
+ (message "Zoning...sorry")))
+ (when restore (funcall restore)))))
;;;; Zone when idle, or not.
@@ -659,7 +669,7 @@ If nil, `zone-pgm-random-life' chooses a value from 0-3 (inclusive).")
(end-of-line 0)
(forward-char -10))
(let ((life-patterns (vector
- (if (and col (re-search-forward "[^ ]" max t))
+ (if (and col (search-forward "@" max t))
(cons (make-string (length (car col)) 32) col)
(list (mapconcat 'identity
(make-list (/ (- rtc 11) 15)