[Geany-devel] Python plugin API

Mars mfogels at xxxxx
Thu Jun 11 14:00:11 UTC 2009


I started on something similar myself a while back, for Geany 0.16,
but ran out of time.  The code is here:

  https://code.edge.launchpad.net/~mars/+junk/geany-python-bindings

You can grab a copy of the code using bzr:

  bzr branch lp:~mars/+junk/geany-python-bindings

And if you just want to browse it on the web:

  http://bazaar.launchpad.net/~mars/+junk/geany-python-bindings/files

The plan was to write a Python interpreter started from within Geany,
create a Python module wrapping the Geany data structures and
functions, and use PyGTK to interact with the graphical components.
This is a similar approach to the Gedit Python bindings - PyGTK means
you can use Glade for your plugins, which makes plugin development
much faster.

The stuff I got stuck on seemed pretty trivial, because I was using
the branch to learn Python binding generation as well as practicing
some C programming (it's been a few years).  The plugin successfully
starts a Python interpreter inside of Geany, the waf build scripts
work, it can load pure-Python Geany Plugin modules from the disk, etc.
etc.  I started wrapping the GeanyApp object into it's Python
equivalent, but couldn't get the Python class to work.  Someone with
actual experience writing C Extensions could probably tell what's
wrong in a flash.

Of course, the plugin API has changed in 0.17, but this wrapper is so
slim at the moment that any updates should be trivial.  I considered
automatic code generation, but left that for a later pass (geany-lua
does code generation using hand-coded interface files and some code
extraction, and the Gedit Python bindings are entirely generated)  The
new Geany plugin interface definition files should make writing
language plugins *much* easier than before.  Combine that with the
Scintilla IDL files and you are flying.

BTW, there is one big problem with the Geany plugin API as of 0.16:
Plugins (like Python bindings) can't register other plugins - put
another way, a there is no plugin registration API published via the
plugin API.  With the geany plugin registration API being wrapped in
Python, I could easily write pure-Python Geany plugins.  Lacking that,
I had to come up with my own Python plugin registration.

If anyone wants to hack away on the code, please feel free to do so.
I would love to see Python bindings become a reality.  They are the
one missing killer feature in Geany for me.


Mars



More information about the Devel mailing list