I am pretty excited about this patch and hope it makes it in.
Ben, why should asynchronous receive any type of restriction not already placed
on code that runs some milliseconds after a key press (an existing hook).
Cancelling asynchronous requests can lead to unpredictable behavior is probably
never desirable. I've already experienced plugins that block for too long and
what I do is, I just remove the plugin.
On Tuesday, September 3, 2013 9:04:40 AM UTC-7, Ben Fritz wrote:
> On Sunday, September 1, 2013 8:42:25 PM UTC-5, Geoff Greer wrote:
> > This patch adds asynchronous functions to vimscript. If you want to perform
> > an action in 700ms, simply:
> >
> > let timeout_id = settimeout(700, 'echo("hello")')
> >
> > To cancel the timeout before it's fired:
> >
> > canceltimeout(timeout_id)
> >
> > setinterval() also returns an id that can be used with canceltimeout.
> >
> > The reason for this patch is simple: asynchronous functionality is needed
> > to implement real-time collaborative editing in Vim. This is one of the
> > most voted-for features (see http://www.vim.org/sponsor/vote_results.php).
> >
> > Along with Matt Kaniaris, I founded Floobits to build real-time
> > collaboration into every editor. We wrote a plugin for Vim, but we had to
> > use hacks to get async behavior (abusing feedkeys or client-server). These
> > methods had side-effects such as breaking leaderkeys or other shortcuts.
> > After a lot of experimenting, we decided to try patching Vim.
> >
> > Since Vim is character-driven, we had to munge some low-level input
> > functions to get the desired behavior. We changed gui_wait_for_chars() and
> > mch_inchar() so that call_timeouts() is run every ticktime milliseconds.
> > The default ticktime is 100ms.
> >
> > This patch isn't finished yet, but it works on unix-based OSes. If the
> > reaction is positive, our intention is to change mch_inchar() (or something
> > similar) in other OS-specific files. That will get async functions working
> > for everyone.
> >
> > Even if our patch isn't the best approach, we'd love to help get async
> > functions in Vim. Doing so will open the door to a lot of cool plugins.
> >
> > Oh, and this is the first time either myself or Matt have submitted a patch
> > to Vim, so please be gentle.
> >
> > Sincerely,
> >
> > Geoff Greer
>
> Forgive me if I'm wrong, I didn't spend more than a few minutes looking over
> the patch.
>
> It looks like this is not really "asynchronous" behavior, but rather adding a
> timer-like hook into the main loop. Pro: no worries about thread safety, race
> conditions, etc. Con: if the function called by the timer event takes a long
> time, Vim hangs until it's done.
>
> If I'm correct, and this gets included, the help will need to be very
> explicit about making sure to limit the time taken by the function called!
> And there should definitely be a way to interrupt the action.
--
--
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/groups/opt_out.