On Sun, 6 Jul 2008 20:18:25 +0200 Enrico Tröger enrico.troeger@uvena.de wrote:
On Fri, 4 Jul 2008 15:26:28 +0100, Nick Treleaven nick.treleaven@btinternet.com wrote:
keygroups[KEY_GROUP_SOME]->keys[KEYS_SOME_COMMAND]->id = GEANY_KEYS_SOME_COMMAND;
Then keybindings_send_command() would search for that id in keygroups[x]->keys[y]. Although that's a relatively slow search algorithm, it probably wouldn't matter here. If necessary it could be optimized to use a hash/lookup table.
My first thought was the search algorithm wouldn't matter at all as we don't have that many keybindings. But indeed, we have 110 (!) keybindings. Anyway, 100 integer comparisons aren't that expensive and should be ok at least for now. As you said, it could be improved later.
I think keybindings_send_command() is only used as a single call, such as to hide the sidebar in response to a menu item (e.g. file browser plugin). keybindings_got_event() would still iterate through the keybinding groups as usual.
But anyway, I hadn't really thought about the implementation of keybindings_send_command(), it can easily be done efficiently with a separate array:
key_commands[GEANY_KEYS_SOME_COMMAND] = keygroups[KEY_GROUP_SOME]->keys [KEYS_SOME_COMMAND];
I don't think these core changes require too much work, but I'll work on the GeanyEditor* changes first, as these are more important.
Regards, Nick