<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, 27 Jan 2022 at 21:58, Benoît Minisini <<a href="mailto:g4mba5@gmail.com">g4mba5@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Le 27/01/2022 à 06:34, Bruce Steers a écrit :<br>
> <br>
> <br>
> Right,, now i think it is more worthy your examination.<br>
> <br>
> i still have to give it a thorough debugging but the structure is now <br>
> complete.<br>
> <br>
> What i could do with knowing (probably changing) is how i have <br>
> integrated it to the IDE.  I should imagine your understanding of it all <br>
> has a much better way to properly integrate it.<br>
> <br>
> But i'm border-line offering it for a merge request soon :)<br>
> <br>
> Branch.<br>
> <a href="https://gitlab.com/bsteers4/gambas/-/tree/External-Tools" rel="noreferrer" target="_blank">https://gitlab.com/bsteers4/gambas/-/tree/External-Tools</a> <br>
> <<a href="https://gitlab.com/bsteers4/gambas/-/tree/External-Tools" rel="noreferrer" target="_blank">https://gitlab.com/bsteers4/gambas/-/tree/External-Tools</a>><br>
> <br>
> Snapshot.<br>
> <a href="https://forum.gambas.one/download/file.php?id=1018" rel="noreferrer" target="_blank">https://forum.gambas.one/download/file.php?id=1018</a> <br>
> <<a href="https://forum.gambas.one/download/file.php?id=1018" rel="noreferrer" target="_blank">https://forum.gambas.one/download/file.php?id=1018</a>><br>
> <br>
> Respects<br>
> BruceS<br>
> <br>
> ----[ <a href="http://gambaswiki.org/wiki/doc/netiquette" rel="noreferrer" target="_blank">http://gambaswiki.org/wiki/doc/netiquette</a> ]----<br>
<br>
Hi,<br>
<br>
I'm not against the principle, but the implementation.<br>
<br>
I have already thought about that in the past, and I would prefer having <br>
IDE plugins written in Gambas, not in bash.<br>
<br>
The plugins could be external Gambas executables / scripts, or Gambas <br>
libraries that would run in-process.<br>
<br>
The former would work through an API, i.e. a class exported by the IDE. <br>
It is more "dangerous" for the IDE, but it would work faster, and would <br>
give plugins more power, that power being limited by the exported API.<br>
<br>
Now there are different kind of plugins :<br>
<br>
- Project-wide plugins: they modify the entire project, or some files of <br>
the project. For example, optimizing all the PNG files of a project, <br>
cleaning the project...<br>
<br>
- Plugins that work with a specific file (source code file, form file, <br>
text file, image file...). Plugin that run on a text file or a source <br>
code file may act only on the current selection ; plugin that run on an <br>
image may act only on the current selection...<br>
<br>
- Plugins that run something else, using the project as a read-only <br>
souce. For example, counting the number of lines of code.<br>
<br>
A plugin library may have a specific form that would be used for <br>
configuring the plugin. That form may be embedded in a global IDE dialog <br>
with the configuration forms of all other plugins.<br>
<br>
Project-wide plugins will be associated with an action, a icon, and a <br>
menu entry that will be inserted in the global toolbar and inside a <br>
specific global menu.<br>
<br>
Editor-wide plugins will be associated with an action and a icon that <br>
would be inserted in the editor toolbar, and a menu entry that will be <br>
inserted in the editor specific popup-menu.<br>
<br>
Some text file inside the plugin archive will describe the plugin <br>
contents for the IDE.<br>
<br>
Note that at the moment Gambas does not know how to unload a library. So <br>
disabling a plugin would release the memory only on next launch.<br>
<br>
These plugins libraries will be installed in specific directories like <br>
'/usr/share/gambas3/ide-plugins' or '~/.local/share/gambas3/ide-plugins'.<br>
<br>
What do you think?<br></blockquote><div><br></div><div style="font-size:small" class="gmail_default">i think that idea is great</div><div style="font-size:small" class="gmail_default">I could probably add a shell script running plugin then ;)</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">But also that is going WAAAAY beyond my capabilities i think and my desire to "mess" about with the IDE.</div><div style="font-size:small" class="gmail_default">This is about as much "mess about with your IDE" as i dare to go ;)</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">I'm happy to put in some groundwork with this feature (making plugins) but starting it off (the initial API) will have to be your doing as only you will know how to integrate it all best.</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">I'm guessing a Plugin.class that will have the properties/configuration as described above <br></div><div style="font-size:small" class="gmail_default">like</div><div style="font-size:small" class="gmail_default"> hPlugin.AllowFor = Plugin.Allow_Editor + Plugin.Allow_TextEditor + Plugin.Allow_Form</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default"> maybe functions like</div><div style="font-size:small" class="gmail_default">hPlugin.Get_FEditor() As FEditor <br></div><div style="font-size:small" class="gmail_default"><div style="font-size:small" class="gmail_default">hPlugin.Get_FTextEditor() As FTextEditor <br></div><div style="font-size:small" class="gmail_default"><div style="font-size:small" class="gmail_default">hPlugin.Get_FForm() As FForm<br></div><div style="font-size:small" class="gmail_default"><br></div></div></div><div style="font-size:small" class="gmail_default"> to get full control of the editors and use any method / set any property<br></div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">and stuff like...<br></div><div style="font-size:small" class="gmail_default">Call a method from the Project.class<br></div><div style="font-size:small" class="gmail_default">hPlugn.CallProjectMethod(Name As String, Arguments As Variant[]) as Variant <br></div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">Hmm, or just hPlugin.GetProject() to access the Project.class</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">This could be easier than i thought.</div><div style="font-size:small" class="gmail_default"></div><div style="font-size:small" class="gmail_default">I guess you just want the Plugin.class to be able to access the ide's main classes and away we go....</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">Or is that too much freedom to cause problems and better to only add certain safe methods?</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">As for my external tools addition i've put quite a bit of time into it and am really digging the functionality of all these new options i have so i'm going to keep it in my bruces-patched branch until i can do something similar with plugins,</div><div style="font-size:small" class="gmail_default">convert this External Tools mod to a plugin maybe? :)</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">It's like having advanced snippets, i always remember how overjoyed i was when i discovered it in the Pluma editor, super useful to just knock up a script to do a custom function on the doc :)</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">I've set it so Ctrl+Alt+E opens the tools manager and Ctrl+E triggers a mnuExternalTools.PopUp at mouse pos  :)</div><div style="font-size:small" class="gmail_default">That would be a consideration for the plugins too, a shortcut key to launch.  i embedded my menu into the "Advanced" submenu and am already fed up with hunting for it.  much easier to hit Ctrl+E :)</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">The operation halts if the script returns an error code.</div><div style="font-size:small" class="gmail_default">it warns if no text is selected and you've used $GB_SELECTED<br></div><div style="font-size:small" class="gmail_default">Various sanity checks.</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">Thanks for taking the time to look.</div><div style="font-size:small" class="gmail_default">Respects</div><div style="font-size:small" class="gmail_default">BruceS</div><div style="font-size:small" class="gmail_default"><br></div></div></div>