diff lisp/play/zone.el @ 38677:7177c6c2aaba

(zone-pgm-stress): Use unwind-protect to make sure the mode-line face is restored. Fix several bugs.
author Gerd Moellmann <gerd@gnu.org>
date Fri, 03 Aug 2001 12:27:57 +0000
parents 67b464da13ec
children 33677e74f680
line wrap: on
line diff
--- a/lisp/play/zone.el	Fri Aug 03 11:57:27 2001 +0000
+++ b/lisp/play/zone.el	Fri Aug 03 12:27:57 2001 +0000
@@ -1,6 +1,6 @@
 ;;; zone.el --- idle display hacks
 
-;; Copyright (C) 2000 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
 
 ;; Author: Victor Zandy <zandy@cs.wisc.edu>
 ;; Maintainer: Thien-Thi Nguyen <ttn@gnu.org>
@@ -526,35 +526,47 @@
 
 (defun zone-pgm-stress ()
   (goto-char (point-min))
-  (let (lines bg m-fg m-bg)
+  (let (lines bg mode-line-fg mode-line-bg mode-line-box)
     (while (< (point) (point-max))
       (let ((p (point)))
         (forward-line 1)
         (setq lines (cons (buffer-substring p (point)) lines))))
     (sit-for 5)
-    (when (display-color-p)
-      (setq bg (frame-parameter (selected-frame) 'background-color)
-            m-fg (face-foreground 'modeline)
-            m-bg (face-background 'modeline))
-      (set-face-foreground 'modeline bg)
-      (set-face-background 'modeline bg))
-    (let ((msg "Zoning... (zone-pgm-stress)"))
-      (while (not (string= msg ""))
-        (message (setq msg (substring msg 1)))
-        (sit-for 0.05)))
-    (while (not (input-pending-p))
-      (when (< 50 (random 100))
-        (goto-char (point-max))
-        (forward-line -1)
-        (let ((kill-whole-line t))
-          (kill-line))
-        (goto-char (point-min))
-        (insert (nth (random (length lines)) lines)))
-      (message (concat (make-string (random (- (frame-width) 5)) ? ) "grrr"))
-      (sit-for 0.1))
-    (when (display-color-p)
-      (set-face-foreground 'modeline m-fg)
-      (set-face-background 'modeline m-bg))))
+    (unwind-protect
+	(progn
+	  (when (display-color-p)
+	    (setq bg (face-background 'default)
+		  mode-line-box (face-attribute 'mode-line :box)
+		  mode-line-fg (face-attribute 'mode-line :foreground)
+		  mode-line-bg (face-attribute 'mode-line :background))
+	    (set-face-attribute 'mode-line nil
+				:foreground bg
+				 :background bg
+				 :box nil))
+
+	  (let ((msg "Zoning... (zone-pgm-stress)"))
+	    (while (not (string= msg ""))
+	      (message (setq msg (substring msg 1)))
+	      (sit-for 0.05)))
+
+	  (while (not (input-pending-p))
+	    (when (< 50 (random 100))
+	      (goto-char (point-max))
+	      (forward-line -1)
+	      (unless (eobp)
+		(let ((kill-whole-line t))
+		  (kill-line)))
+	      (goto-char (point-min))
+	      (when lines
+		(insert (nth (random (1- (length lines))) lines))))
+	    (message (concat (make-string (random (- (frame-width) 5)) ? )
+			     "grrr"))
+	    (sit-for 0.1)))
+      (when mode-line-fg
+	(set-face-attribute 'mode-line nil
+			    :foreground mode-line-fg
+			    :background mode-line-bg
+			    :box mode-line-box)))))
 
 (provide 'zone)