Nikolay Pavlov wrote:
> 2016-03-13 18:06 GMT+03:00 Bram Moolenaar <[email protected]>:
> >
> > I have a note about adding a way that a callback can be invoked at a
> > certain time. I would like to know how this is going to be used, what
> > the requirements for this feature are.
> >
> > I imagine there are two kinds of timers:
> >
> > 1. One-time: After N msec the callback is invoked.
> > 2. Repating: invoke the callback every N msec
> >
> > For both this will happen while waiting for a character, thus the actual
> > wait time will be longer if the user is typing.
> >
> > Example:
> >
> > let timer = timer_add({time}, {callback} [, {repeats} [, {cookie}]])
> > call timer_stop(timer)
> >
> > func MyTimerCallback(timer, cookie)
> >
> > Would that satisfy the need?
> >
> > I think it would be good that if the callback causes an error the timer
> > is stopped.
>
> I would say that dictionary is better then four arguments:
>
> 1. It enables feature used by Neovim for callbacks: dictionary that
> defined timer is passed as a `self` dictionary to a dictionary
> function, while in your variant dictionary functions cannot be used at
> all.
> 2. This allows adding more options in the future. E.g. alter error
> handling, silence function or add a timeout after which callback is
> interrupted.
> 3. Dictionary may serve both as `timer` and as a `cookie`.
>
> E.g.
>
> let def = {
> \ 'interval': Number|Float (seconds),
> \ 'callback': String|Funcref,
> \ 'repeats': Number (optional),
> \ 'Cookie': … (keys matching `^[a-z]\+$` are reserved for Vim)}
> call timer_add(def)
> call timer_stop(def)
>
> function Callback() dict
> endfunction
That's very different from how existing functions work.
The "cookie" can be a dictionary, thus one can use that. Passing the
function argument back in to the callback looks weird. What we would
actually want is a closure. Then the cookie is not needed.
We could make this generic:
let closure = function('Callback', arg1, arg2)
Would invoke:
func Callback(arg1, arg2, other-args)
We might need more options later, that's true. But the time and
callback are always needed. Thus I would prefer:
let timer = timer_start({time}, {callback}, {options})
--
hundred-and-one symptoms of being an internet addict:
38. You wake up at 3 a.m. to go to the bathroom and stop and check your e-mail
on the way back to bed.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.