[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: Should `cancel-timer' use `delete' instead of `delq'?
From: |
Drew Adams |
Subject: |
RE: Should `cancel-timer' use `delete' instead of `delq'? |
Date: |
Tue, 5 Sep 2006 14:24:08 -0700 |
> > (defvar foo-timer
> > (progn ; Cancel to prevent ~duplication.
> > (when (boundp 'foo-timer) (cancel-timer foo-timer))
> > (run-with-idle-timer 2 t 'foo))
> > "Timer used to foo whenever Emacs is idle.")
>
> The traditional way to do something like the above is:
>
> (defvar foo-timer nil)
> (define-minor-mode foo "blala" :toto 1 :titi 0
> (when foo-timer
> (cancel foo-timer)
> (setq foo-timer nil))
> (when foo-mode
> (setq foo-timer (run-with-idle-timer 5 t 'foo-fun))))
>
> OK. I'm not sure why that's better, but it does seem to move
> a little toward the direction I was suggesting with a
> `define-idle-timer' macro.
It seems clearly better to me, because the (progn ...) form in your
defvar will only be evalated once: the first time, when foo-timer
is unbound. Or am I missing something, in particular something that
would subsequently make foo-timer unbound?
OK.
My point was about re-evaluating setq or defvar assignment of a variable to
a `run-with-idle-timer' expression. In the case of defvar, it would be by
hand, and I guess if someone knows enough to add the protective cruft, then
s?he should also know enough to cancel the timer before re-evaling the
defvar by hand. I was bitten by it, but then I might not be as thoughtful as
most users.
There are some uses of setq with `run-with-idle-timer' in the standard Lisp
libraries. I have no idea if there is any chance that that code could be
re-eval'd, leaving running, orphan timers as a result. Whether it's a minor
mode or a separate `define-idle-timer macro', providing the protection in
some kind of ready-to-use bottle seems like a good idea to me.
To repeat my question: Is it a good idea to either document the
"traditional" `define-minor-mode' approach or define a new macro for this,
or should we just let people discover this on their own?
- Should `cancel-timer' use `delete' instead of `delq'?, Drew Adams, 2006/09/04
- Re: Should `cancel-timer' use `delete' instead of `delq'?, Miles Bader, 2006/09/04
- Re: Should `cancel-timer' use `delete' instead of `delq'?, Stefan Monnier, 2006/09/05
- RE: Should `cancel-timer' use `delete' instead of `delq'?, Drew Adams, 2006/09/05
- Re: Should `cancel-timer' use `delete' instead of `delq'?, Stefan Monnier, 2006/09/05
- RE: Should `cancel-timer' use `delete' instead of `delq'?, Drew Adams, 2006/09/05
- Re: Should `cancel-timer' use `delete' instead of `delq'?, Kevin Rodgers, 2006/09/05
- RE: Should `cancel-timer' use `delete' instead of `delq'?,
Drew Adams <=
- Re: Should `cancel-timer' use `delete' instead of `delq'?, Miles Bader, 2006/09/05
- RE: Should `cancel-timer' use `delete' instead of `delq'?, Drew Adams, 2006/09/05
- Re: Should `cancel-timer' use `delete' instead of `delq'?, Miles Bader, 2006/09/05
- RE: Should `cancel-timer' use `delete' instead of `delq'?, Drew Adams, 2006/09/06
- Re: Should `cancel-timer' use `delete' instead of `delq'?, Miles Bader, 2006/09/06
- Re: Should `cancel-timer' use `delete' instead of `delq'?, David Kastrup, 2006/09/06
- Re: Should `cancel-timer' use `delete' instead of `delq'?, Stefan Monnier, 2006/09/06
- RE: Should `cancel-timer' use `delete' instead of `delq'?, Drew Adams, 2006/09/06
- Re: Should `cancel-timer' use `delete' instead of `delq'?, David Kastrup, 2006/09/06
- Re: Should `cancel-timer' use `delete' instead of `delq'?, David Kastrup, 2006/09/05