Programmatically determining key equivalents with Shift key

  • I have an NSMenuItem and I want to programmatically set its hotkey to,
    for instance, command-shift-1. I'm apparently supposed to pass "!" to
    setKeyEquivalent—on an American keyboard, at least. On a French keyboard
    I'm sure it's not quite the same. So how do I go from "shift+1" to
    punctuation like "!" while preserving the keyboard layout?
  • Actually, I've just heard that setKeyEquivalentModifierMask: with
    NSShiftKeyMask works in this case, even though it is documented not to
    work. (Haven't tested it myself yet.)
    Peculiar!

    John Stiles wrote:
    > I have an NSMenuItem and I want to programmatically set its hotkey to,
    > for instance, command-shift-1. I'm apparently supposed to pass "!" to
    > setKeyEquivalent—on an American keyboard, at least. On a French
    > keyboard I'm sure it's not quite the same. So how do I go from
    > "shift+1" to punctuation like "!" while preserving the keyboard layout?
  • In case anyone's interested, I've found that the docs for
    setKeyEquivalentModifierMask seem to directly contradict its actual
    behavior in practice. I've filed a radar on this: rdar://5656732

    In a nutshell, there are two contradictions:
    - Although the docs state that "NSShiftKeyMask is relevant only for
    function keys," it appears to be honored in all cases in both Tiger and
    Leopard (which is a good thing!)

    - The docs state that "you should always set NSCommandKeyMask in mask,"
    but this appears to be just a guideline for good practice—the API itself
    works fine regardless of whether you enable the command key mask or not.
    For instance, if you were implementing iTunes, you could set up the
    "Play" menu option (triggered via the Space key) using this code:

    [menuItem setKeyEquivalent:@" "];
    [menuItem setKeyEquivalentModifierMask:0];

    John Stiles wrote:
    > Actually, I've just heard that setKeyEquivalentModifierMask: with
    > NSShiftKeyMask works in this case, even though it is documented not to
    > work. (Haven't tested it myself yet.)
    > Peculiar!
    >
    >
    > John Stiles wrote:
    >> I have an NSMenuItem and I want to programmatically set its hotkey
    >> to, for instance, command-shift-1. I'm apparently supposed to pass
    >> "!" to setKeyEquivalent—on an American keyboard, at least. On a
    >> French keyboard I'm sure it's not quite the same. So how do I go from
    >> "shift+1" to punctuation like "!" while preserving the keyboard layout?

previous month december 2007 next month
MTWTFSS
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
Go to today