Mercurial > emacs
changeset 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 | f3f2486cf6bc |
children | 77752270b25a |
files | lisp/ChangeLog lisp/play/hanoi.el lisp/subr.el |
diffstat | 3 files changed, 47 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Mon Jul 10 18:51:42 2006 +0000 +++ b/lisp/ChangeLog Mon Jul 10 18:52:13 2006 +0000 @@ -1,3 +1,9 @@ +2006-07-10 Chong Yidong <cyd@stupidchicken.com> + + * subr.el (sit-for): New function. + + * play/hanoi.el (hanoi-sit-for): Check sit-for return value. + 2006-07-10 Richard Stallman <rms@gnu.org> * ldefs-boot.el (edebug): Update page.
--- a/lisp/play/hanoi.el Mon Jul 10 18:51:42 2006 +0000 +++ b/lisp/play/hanoi.el Mon Jul 10 18:52:13 2006 +0000 @@ -399,9 +399,8 @@ ;; update display and pause, quitting with a pithy comment if the user ;; hits a key. (defun hanoi-sit-for (seconds) - (sit-for seconds) - (if (input-pending-p) - (signal 'quit '("I can tell you've had enough")))) + (unless (sit-for seconds) + (signal 'quit '("I can tell you've had enough")))) ;; move ring to a given buffer position and update ring's car. (defun hanoi-ring-to-pos (ring pos)
--- 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.