On 24 Oct 2015, at 18:37, Jacob Carlborg wrote:
TextMate has a feature that if a keyboard shortcut maps to multiple commands (I'm mostly thinking of bundle commands) a context menu will open to allow the user to disambiguate the command. It's possible to use the numbers on the keyboard to select the correct command.
Would it be possible to use letters in addition/instead of the numbers to disambiguate the commands?
Pressing A-Z already works to select the first item in the menu starting with that letter.
For example, in the Git bundle there are a lot of commands that map to the same same keyboard shortcut (⌘Y). Because they're so many only around a third of the commands have a number to disambiguate using the keyboard.
For Subversion we spent some time naming the items so that the most commonly used items would work with letters, e.g. [C]ommit, [D]iff With Base, [S]tatus, [B]lame, etc.
The Git bundle was developed a little different, and I think the goal there was to put the most commonly used items near the top, so that these would be reachable with the number keys.
Personally I wouldn’t be against re-arranging the Git menu so that it would work better with letter keys, but I fear it would upset a lot of people who are e.g. used to ⌘Y + 2 for commit, etc.
BTW, I tried to disable the keyboard shortcut for a couple of commands I'm not using but the "Key Equivalent" field is blank for all the Git commands. Does the Git bundle has some kind of special treatment?
The way it works is that the SCM bundle has a proxy item bound to ⌘Y (not the Git bundle!).
A proxy item is simply a proxy for one or more other items. As its content it has a “query” which queries on the semantic class (of all items that would apply in current scope).
For the SCM bundle the query is `action.scm`, i.e. all SCM actions. The respective SCM bundles (Git, Subversion, etc.) are scoped to `attr.scm.XYZ` so the proxy item will only find items that are scoped to the version control system currently in use.
Currently the “query language” used in proxy items is just prefix match, otherwise you could change the query so you would only get the actions you’re interested in.
Lacking the ability to do more sophisticated queries, you can remove the scm.action semantic class from the items you do not want in the menu.
It’s not an ideal solution, as the semantic class is intended for more than just this menu, e.g. we might do a “commit” toolbar button, and this would then query the semantic class, but right now, we do not have this functionality, so you’re not (yet) losing out on anything by editing the semantic classes.