1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-28 10:56:36 +00:00

* subr.el (sit-for): New function.

* play/hanoi.el (hanoi-sit-for): Check sit-for return value.
This commit is contained in:
Chong Yidong 2006-07-10 18:52:13 +00:00
parent 7157b8fe89
commit 0369eb8545
3 changed files with 47 additions and 3 deletions

View File

@ -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.

View File

@ -399,9 +399,8 @@ BITS must be of length nrings. Start at START-TIME."
;; 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)

View File

@ -1699,6 +1699,45 @@ by doing (clear-string STRING)."
(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.