[Geany-Devel] Spawn module API

Matthew Brush mbrush at xxxxx
Tue Jun 23 22:18:10 UTC 2015

On 2015-06-23 09:04 AM, Dimitar Zhekov wrote:
> On 23.6.2015 г. 02:25, Matthew Brush wrote:
>> [...]
> One thing I forgot: the plugin API currently exports
> utils_spawn_[a]sync, and a few plugins use utils_spawn_sync. These
> functions were (partially correct) wrappers around the old glib/win32
> spawn, and are now wrappers around spawn_[a]sync. Someday, in the
> distant future, they should be obsoleted...


>  > I get what you're saying but I also
>  > feel uneasy about blanket exporting of APIs with no current users of it,
>  > so we don't know exactly what really needs to be exported.
> Well, with nothing from spawn exported, we can be pretty sure that all
> plugins _will_ be using utils_spawn and g_spawn instead. :)

I think the general policy is to export stuff on demand as plugins need 
it. Seeing as you wrote the API in question, I'm assuming you know best 
the stuff you will need, so I don't personally see much problem 
preemptively exposing that stuff[0].

 From you're previous email you mentioned the stuff checked with [x] below:

[ ] spawn_get_program_name()
[ ] spawn_check_command()
[x] spawn_kill_process()
[ ] spawn_async_with_pipes()
[ ] spawn_async()
[x] spawn_with_callbacks()
[x] spawn_write_data()
[ ] spawn_get_exit_status()
[ ] spawn_sync()

[x] SpawnFlags
[x] SpawnReadFunc
[x] SpawnWriteData

Is that sufficient, or is there other stuff? I will remove the /** from 
anything that is not expected to be needed, if nobody objects.

About the WIF* macros, those (at present) are not "officially" part of 
the plugin API as they have no Doxygen comments, though they will still 
be visible to plugins since they're macros and bypass the linker trick 
we use to hide functions. I think it would be best to add documentation 
to those (and possible define them into the "GEANY_" 'namespace'?), at 
the very least to ensure nobody accidentally moves or hides them. Just 
the other day I tried to move them into spawn.c thinking they were there 
on accident, but then I left them because another .c file uses them so 
they need to be in a (not necessarily public) header.

>  > We should make Colomban decide :)
> The leading developers should decide - including you.

Well you know my opinion :) I think everyone pretty much agrees we 
shouldn't expose stuff unrelated to the plugin API, and I think we all 
also agree it's stupid for plugins to have to copy&paste code that 
exists already or else use an inferior version. I also think everyone 
agrees that a separate utility library would be a good idea. The problem 
I have is that once this API makes it into the next release, it's 
"forever" stuck inside Geany and we'll have to keep it indefinitely, 
regardless if something possibly better[1] like GProcess comes available 
to us, and we don't even use it internally anymore.

Matthew Brush

[0]: At least until we establish a policy around what belongs in the 
plugin API or not.
[1]: I have no idea if it's better, just an example.

More information about the Devel mailing list