Am 26.03.2015 um 18:47 schrieb Dimitar Zhekov:
On 26.3.2015 г. 01:16, Thomas Martitz wrote:
Now, do we really want the plugins to run arbitrary resource checking code, and display their own error messages, only because they are queried (or registered, as you put it), each time the list is build?
Yes plugins should be able to run arbitrary checking code because that's necessary for proxy plugins. Whether Geany can provide APIs to report results to a the user in a consistent manner is on another piece of paper, one that's IMO slightly out of scope for my proposal.
From your initial proposal:
"The plugin defines a single global function, geany_load_module(GeanyPlugin *, GModule *). This is the only function that geany learns about using g_module_symbol(). And the only thing this function ought to do is to call geany_plugin_register()."
As a non-Englisher, I read this as "the only thing must / should / is supposed / is preferable", and am not sure which one. Some of the meanings contradict "should be able to run arbitrary checking code".
Right, I changed my mind. As I already wrote in an earlier mail in response to you: "I said in my proposal it should do nothing but call geany_register_plugin(), but I guess we can relax that by allowing also for testing if the plugin itself is operational. "
But nobody can guarantee that it exists and is valid on init. [...] how am I supposed to react - just crash? If init remains void, then it would be no better than the current void plugin_init(), and I'll simply check anything in load - why bother, if I *still* need to manually disable scope on initialization failure?
What do you do currently?
Emit a message in Status() + g_warning() and stop further init, plus check in cleanup(). A popup or status bar message would be acceptable too, since it's only if the plugin is actually activated, unlike any possible check in geany_load_module().
If the checks are in geany_load_module() the plugin couldn't even be activated. Which is IMO desirable.
I also tend to think that a failing init is misdesigned. [...] However keep in mind that init can be called without prior call to geany_load_module(), if the user toggles plugins in the PM dialog.
Under the current loading mechanism, a plugin is re-loaded with g_module_open() on each toggle. If you intend to change that, you'll break any global variable initializations in all plugins, most importantly the assumption that a global C variable is automatically set to zero.
I don't intend to change this.