emacs-devel
[Top][All Lists]
Advanced

[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?






reply via email to

[Prev in Thread] Current Thread [Next in Thread]