On Sa, 14 Apr 2018, Ivan Brennan wrote:

> When your plugin wants to provide an event the user can hook into, it could 
> broadcast a User autocommand:
> 
>     function! foo#do_it()
>       call s:do_thing()
>       doautocmd User FooDidIt
>     endfunction
> 
> If the user's vimrc contains,
> 
>     augroup MyGroup
>       autocmd!
>       autocmd User FooDidIt call MyHandler()
>     augroup END
> 
> then MyHandler() will be called any time foo#do_it() runs.
> 
> If the user *does not* set up any such autocommand, however, any time 
> foo#do_it() runs, Vim displays "No matching autocommands".
> 
> You could suppress these messages by prefixing doautocmd with "silent", but 
> that would also suppress any messages a handler tries to display. So most 
> plugins wrap doautocmd in a conditional:
> 
>     function! foo#do_it()
>       call s:do_thing()
>       if exists('#User#FooThing')
>         doautocmd User FooThing
>       endif
>     endfunction
> 
> When providing an event the user can hook into, I'd think it's better to 
> decouple the plugin from any knowledge/concern about what, if anything, has 
> been set up to listen for the event. But we're forced to run this check, 
> given how doautocmd works.
> 
> More importantly, the exists() check is inaccurate in some cases. For 
> example, the following are two autocommand definitions are equivalent,
> 
>     autocmd User FooBar,FooBaz call MyHandler()
>     autocmd User Foo{Bar,Baz}  call MyHandler()
> 
> but exists('#User#FooBar') will return true for the first and false for the 
> second.
> 
> I can see the usefulness of displaying No matching autocommands for debugging 
> purposes, but beyond that it seems like bad behavior.
> 
> Am I thinking about this the wrong way?

You are probably right. However most plugins I have seen usually do not 
bother and use `:sil doautocmd User ...` So perhaps nothing to worry 
about?


Best,
Christian
-- 
Lnull, Norma:
  weibliche Sagengestalt aus Niveausibirsk und Levelkusen spiegelte
  sich gerne in der Meeresoberfläche

-- 
-- 
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 vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui