I found a case where the code in question is needed, which none of the suggested patches handle correctly. Steps to repeat: (setq ns-alternate-modifier nil) Press left CMD-ALT-9 An unmodified Emacs replies "s-]" is not bound. (This assumes a Swedish keyboard layout, other layouts would yield a different character, but the principle is the same). With either of the two patches, Emacs respond with "s-9" is not bound, which isn't correct. Unfortunately, I don't know how to distinguish between the cases where we need to strip away modifiers (C-s-a) and when we shouldn't, so I'm leaving this open for now. -- Anders Lindgren On Wed, Dec 30, 2015 at 9:50 AM, Anders Lindgren wrote: > Hi, > > I'm looking into a key binding bug on OS X reported multiple times (19977, > 21330, 21551). Two different patches have been submitted. > > The original code looks like: > > if (is_left_key) > { > emacs_event->modifiers |= parse_solitary_modifier > (ns_command_modifier); > > /* if super (default), take input manager's word so things like > dvorak / qwerty layout work */ > if (EQ (ns_command_modifier, Qsuper) > && !fnKeysym > && [[theEvent characters] length] != 0) > { > /* XXX: the code we get will be unshifted, so if we have > a shift modifier, must convert ourselves */ > if (!(flags & NSShiftKeyMask)) > code = [[theEvent characters] characterAtIndex: 0]; > > One of the patches simply removes the `if (EQ(...))' statement. The other > modifies the code to strip away modifiers. > > First question: What is the code in the `if (EQ(...))' supposed to do? In > other words, what will stop working if it is removed? > > Second question: if it is needed for the LEFT command key, should the > corresponding code be added for the RIGHT? > > I've tested removing the `if' and Emacs still seems to be working as > intended, both with a normal key layout and when Dvorak is used. If no one > comes up with a reason to keep the code, I will remove it. > > Third question: Does anybody know of a good way to automatically test > things like this? What I'm looking for is a way to send keystrokes like > Cmd-Alt-a to Emacs, that way it could be possible to write tests ensuring > that things like this don't break in the future. > > -- Anders Lindgren > >