diff lisp/subr.el @ 71763:bedc73f663be

* subr.el (sit-for): New function. * play/hanoi.el (hanoi-sit-for): Check sit-for return value.
author Chong Yidong <cyd@stupidchicken.com>
date Mon, 10 Jul 2006 18:52:13 +0000
parents a36e654643c1
children dbb73e0b716b
line wrap: on
line diff
--- a/lisp/subr.el	Mon Jul 10 18:51:42 2006 +0000
+++ b/lisp/subr.el	Mon Jul 10 18:52:13 2006 +0000
@@ -1699,6 +1699,45 @@
 	    (sit-for 1)
 	    t)))
     n))
+
+(defun sit-for (seconds &optional nodisp obsolete)
+  "Perform redisplay, then wait for SECONDS seconds or until input is available.
+SECONDS may be a floating-point value.
+\(On operating systems that do not support waiting for fractions of a
+second, floating-point values are rounded down to the nearest integer.)
+
+If optional arg NODISP is t, don't redisplay, just wait for input.
+Redisplay does not happen if input is available before it starts.
+However, as a special exception, redisplay will occur even when
+input is available if SECONDS is negative.
+
+Value is t if waited the full time with no input arriving, and nil otherwise.
+
+An obsolete but still supported form is
+\(sit-for SECONDS &optional MILLISECONDS NODISP)
+Where the optional arg MILLISECONDS specifies an additional wait period,
+in milliseconds; this was useful when Emacs was built without
+floating point support."
+  (when (or obsolete (numberp nodisp))
+    (setq seconds (+ seconds (* 1e-3 nodisp)))
+    (setq nodisp obsolete))
+  (unless nodisp
+    (let ((redisplay-dont-pause (or (< seconds 0) redisplay-dont-pause)))
+      (redisplay)))
+  (or (<= seconds 0)
+      (let ((timer (timer-create))
+	    (echo-keystrokes 0))
+      	(if (catch 'sit-for-timeout
+      	      (timer-set-time timer (timer-relative-time
+				     (current-time) seconds))
+      	      (timer-set-function timer 'with-timeout-handler
+				  '(sit-for-timeout))
+      	      (timer-activate timer)
+	      (push (read-event) unread-command-events)
+      	      nil)
+      	    t
+      	  (cancel-timer timer)
+      	  nil))))
 
 ;;; Atomic change groups.