UNSOLVED Command Palette

  • Hi all,

    I was thinking it'd be fun to make a "command-palette" extension like in Sublime Text, Atom and VSCode. For those of you who aren't using these editors, it can enable you to do a lot via the keyboard without remembering keyboard shortcuts (in fact it can even show you the keyboard shortcut for future reference).

    Through the API, how can I access all the actions available to map to hot keys (glyph view and space center) and short keys? I tried getMenuShortCuts which returned an empty Dictionary. Then I looked at programmatically iterating through the menu bar to get all those "actions", but that feels hacky. Any tips where to look?

    I'm guessing it'd be whatever API RoboFont uses itself to populate "Short Keys" and "Hot Keys" lists in Preferences. In fact, the interface for "Short Keys" already has the autocomplete I'd need as well.


  • @tallpauley Thanks for the update to run the command! This gives me something to play around with.

    To take it a step further, is there a lib API I can use to also pull in space center and glyph view shortcuts, like whatever they use to populate their "Hot Keys" tabs? (Btw, I won't filter out commands that don't have shortcut keys, this is part of the allure of having a command palette, you can access commands that don't have shortcuts keys defined yet).

    I saw mojo.UI.setGlyphViewDisplaySettings, but this isn't all the available commands for glyph view. For space center I didn't see any API in mojo.UI

    I would dig around myself, but I think you guys compile to .pyc and I don't want to violate the EULA by reverse engineering (hence me actually clicking on the EULA lol). Once I have all the commands available, I think I should have what I need.

  • Thanks @gferreira, this is very helpful! I'll play around with the code you gave me

  • hello @tallpauley,

    the default shortcuts are indeed not returned by getMenuShortCuts, and are currently not accessible from the public API. (maybe this could be added?)

    it’s possible to get them using the internal lib module (see example below). you can use stuff from the lib in your scripts, but ⚠️ the API may change over time, without a nice deprecation warning like mojo.

    from lib.tools.shortCutTools import getShortCuts
    from lib.UI.fileBrowser import shortKeyToString
    shortcuts = getShortCuts()    
    for key, item in shortcuts.items():
        if item.keyEquivalent():
            shortkey = item.keyEquivalentModifierMask(), item.keyEquivalent()
            print(key, item, shortkey)

    see also a sketch for a simple search UI here (please fork and change as you wish)

    I haven’t been able to figure out how to run the commands… @frederik help :)

    this could become a very useful extension!


    edit: updated the gist, now it also runs the command (thanks @frederik)