From: Barry O'Reilly Date: Fri, 18 Oct 2013 04:27:34 +0000 (-0400) Subject: Don't run timers in input-pending-p. Its new check-timers param X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1227 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ef566920352fea106b283bcfeba1e61f3969f541;p=emacs.git Don't run timers in input-pending-p. Its new check-timers param provides the prior behavior.. * src/keyboard.c (Finput_pending_p): Accept optional check-timers param. * lisp/subr.el (sit-for): Call (input-pending-p t) so as to behave as before. * test/automated/timer-tests.el: New file. Tests that (sit-for 0) allows another timer to run. Fixes: debbugs:15045 --- diff --git a/etc/NEWS b/etc/NEWS index 7c19ad9f87a..de13733f775 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -620,6 +620,9 @@ low-level libraries gfilenotify.c, inotify.c or w32notify.c. * Incompatible Lisp Changes in Emacs 24.4 +** `(input-pending-p)' no longer runs other timers which are ready to +run. The new optional CHECK-TIMERS param allows for the prior behavior. + ** `defvar' and `defcustom' in a let-binding affect the "external" default. ** The syntax of ?» and ?« is now punctuation instead of matched parens. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2902d9281fb..b91d17ba8a3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-10-17 Barry O'Reilly + + * lisp/subr.el (sit-for): Call (input-pending-p t) so as to behave + as before. + 2013-10-18 Reuben Thomas * textmodes/remember.el (remember): set buffer-offer-save in diff --git a/lisp/subr.el b/lisp/subr.el index 0d03e9a88c1..952b9b601dc 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2222,7 +2222,7 @@ floating point support." (noninteractive (sleep-for seconds) t) - ((input-pending-p) + ((input-pending-p t) nil) ((<= seconds 0) (or nodisp (redisplay))) diff --git a/src/ChangeLog b/src/ChangeLog index a0df4425844..0dae87bd69a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2013-10-17 Barry O'Reilly + + Don't run timers in input-pending-p. Its new check-timers param + provides the prior behavior. (Bug#15045). + * src/keyboard.c (Finput_pending_p): Accept optional check-timers + param. + 2013-10-17 Paul Eggert Make some functions static in non-Microsoft builds. diff --git a/src/keyboard.c b/src/keyboard.c index a776720b807..6b39dfe1019 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -9950,12 +9950,13 @@ requeued_events_pending_p (void) return (!NILP (Vunread_command_events)); } - -DEFUN ("input-pending-p", Finput_pending_p, Sinput_pending_p, 0, 0, 0, +DEFUN ("input-pending-p", Finput_pending_p, Sinput_pending_p, 0, 1, 0, doc: /* Return t if command input is currently available with no wait. Actually, the value is nil only if we can be sure that no input is available; -if there is a doubt, the value is t. */) - (void) +if there is a doubt, the value is t. + +If CHECK-TIMERS is non-nil, timers that are ready to run will do so. */) + (Lisp_Object check_timers) { if (!NILP (Vunread_command_events) || !NILP (Vunread_post_input_method_events) @@ -9965,7 +9966,8 @@ if there is a doubt, the value is t. */) /* Process non-user-visible events (Bug#10195). */ process_special_events (); - return (get_input_pending (READABLE_EVENTS_DO_TIMERS_NOW + return (get_input_pending ((NILP (check_timers) + ? 0 : READABLE_EVENTS_DO_TIMERS_NOW) | READABLE_EVENTS_FILTER_EVENTS) ? Qt : Qnil); } diff --git a/test/ChangeLog b/test/ChangeLog index bf5a4275483..9a8a61eb062 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2013-10-17 Barry O'Reilly + + * test/automated/timer-tests.el: New file. Tests that (sit-for 0) + allows another timer to run. + 2013-10-14 Dmitry Gutov * indent/ruby.rb: More examples for bug#15594, both failing and diff --git a/test/automated/timer-tests.el b/test/automated/timer-tests.el new file mode 100644 index 00000000000..71a9b968f9c --- /dev/null +++ b/test/automated/timer-tests.el @@ -0,0 +1,38 @@ +;;; timer-tests.el --- tests for timers -*- lexical-binding:t -*- + +;; Copyright (C) 2013 Free Software Foundation, Inc. + +;; This file is part of GNU Emacs. + +;; This program is free software: you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation, either version 3 of the +;; License, or (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see `http://www.gnu.org/licenses/'. + +;;; Commentary: + +;;; Code: + +(ert-deftest timer-tests-sit-for () + (let ((timer-ran nil) + ;; Want sit-for behavior when interactive + (noninteractive nil)) + (run-at-time '(0 0 0 0) + nil + (lambda () (setq timer-ran t))) + ;; The test assumes run-at-time didn't take the liberty of firing + ;; the timer, so assert the test's assumption + (should (not timer-ran)) + (sit-for 0 t) + (should timer-ran))) + +;;; timer-tests.el ends here +