To see the manifest of an installed extension, go to about:debugging and click on the manifest URL for the extension you want to inspect the manifest of.
In the TST source code the commands section shows the commands TST executes, but you will notice that not all of them have default shortcuts.
Some of them are empty and can be customized in either the Manage Extension Shortcuts page or the Keyboard Shortcuts section of the TST preferences.
What I’m interested in is the function that assigns shortcuts to commands at runtime when the user changes the shortcuts, and the in-memory data structures Firefox maintains for that purpose, not just for TST but for all other addons.
As you will find reading the code, this uses the XUL keyboard handling mechanism, which I have no idea where it would be, but it’s somewhere in mozilla-central too…
So I guess it really depends on what layer you care about these things.
I want leader keys to bring up a menu of commands I can run regardless of what addon it is. SurfkingKeys for instance presents a menu when you press a leader key like ‘y’ and already I am able to run some of TST’s commands in it. So if I add a set of keys for TST functions prefixed by ‘T’ for instance, I can add all TSTs commands and I don’t have to remember all its keyboard shortcuts.
Seeing all the existing shortcuts at once is not possible because addons display only their shortcuts for modification, and Manage Extension Shortcuts only displays a few of them at a time. The Firefox UI does not enable you to see all of them at a go, and changing them is often trial and error because of conflicts.
I need to see all of them in a single list at runtime and this is why I need those runtime data structures.
Is there a script that can go through the manifest.json files of all addons and list out their commands?
PS. I think I can do this myself if I master json. The important thing is learn from the API which addons are active and are compatible with the browser.
What gives me the best control and integrates smoothly with my other work is all that matters to me. I can even send keystrokes from emacs if that makes it easier.