Mercurial > emacs
changeset 58998:dd8c66d7733c
(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.
author | Thien-Thi Nguyen <ttn@gnuvola.org> |
---|---|
date | Thu, 16 Dec 2004 17:08:34 +0000 |
parents | f7098e12436d |
children | fbea361e1fcb |
files | lisp/play/zone.el |
diffstat | 1 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/play/zone.el Thu Dec 16 15:26:39 2004 +0000 +++ b/lisp/play/zone.el Thu Dec 16 17:08:34 2004 +0000 @@ -152,8 +152,15 @@ (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 @@ (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 @@ (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)