[Geany-devel] GeanyPy Keybindings Again

Matthew Brush mbrush at xxxxx
Tue Sep 13 01:42:57 UTC 2011


On 09/12/2011 04:37 PM, Lex Trotman wrote:
> Hi Matthew,
>
> On 13 September 2011 06:16, Matthew Brush<mbrush at codebrainz.ca>  wrote:
>> Hi,
>>
>> I started working on keybindings again for GeanyPy and I was hoping to get a
>> little advice from the experts.
>
> Can't provide any of that, but can heckle from the cheap seats :)
>

Thanks for the info, and same to Colomban.

>>
[...]
>
> Presumably you know how to call back into the interpretor (if not I
> suggest looking at how PyGTK does it) so its just a matter of mapping
> from the key_id to a Python callable, I'd have all keys call one
> Python method that just looks up a callable in a dict by key_id.
> Clearly that means you don't expose the Geany's set key but a new
> Python function that records the key in the dict and calls Geany's set
> key.
>

Here's what I'm thinking of going with for now:
https://github.com/codebrainz/geanypy/blob/keybindings/src/bindings.c

I think it will be sufficient for now.  What it does is adds a 
`bindings` module in the `geany` package which Python plugins can
use to register keybindings, so in practice it looks like this in the 
plugin's code:

   import geany

   class MyPlugin(geany.Plugin):

     def __init__(self):
       geany.Plugin.__init__(self)
       # register keybinding
       geany.bindings.register_binding(
         'MyPlugin',          # name of the plugin
         'Do stuff',          # name of the binding
         self.on_kb_activate, # callback
         'Some user data')    # user data

     def on_kb_activate(self, keyid, data):
       print 'Got %d: %s' % (keyid, data)


In the preferences dialog, all Python bindings show up under the 
'GeanyPy' keygroup and their labels are formatted with the plugin name 
and the keybinding label (ex. "MyPlugin: Do stuff").

Of course it needs more thought and lots more work, but I guess I will 
have to settle for something like this until we get motivated to mess 
with the plugin code in Geany.

At least it's not nearly as hacky as my previous ideas :)

Cheers,
Matthew Brush




More information about the Devel mailing list