Mac users now see correct modifiers in the Key Binding Entry window.
diff --git a/Lib/idlelib/keybindingDialog.py b/Lib/idlelib/keybindingDialog.py
index f99e452..427da5c 100644
--- a/Lib/idlelib/keybindingDialog.py
+++ b/Lib/idlelib/keybindingDialog.py
@@ -26,12 +26,12 @@
         self.result=''
         self.keyString=StringVar(self)
         self.keyString.set('')
-        self.keyCtrl=StringVar(self)
-        self.keyCtrl.set('')
-        self.keyAlt=StringVar(self)
-        self.keyAlt.set('')
-        self.keyShift=StringVar(self)
-        self.keyShift.set('')
+        self.SetModifiersForPlatform()
+        self.modifier_vars = []
+        for modifier in self.modifiers:
+            variable = StringVar(self)
+            variable.set('')
+            self.modifier_vars.append(variable)
         self.CreateWidgets()
         self.LoadFinalKeyList()
         self.withdraw() #hide while setting geometry
@@ -74,18 +74,16 @@
         labelKeysBasic = Label(self.frameKeySeqBasic,justify=LEFT,
                 textvariable=self.keyString,relief=GROOVE,borderwidth=2)
         labelKeysBasic.pack(ipadx=5,ipady=5,fill=X)
-        checkCtrl=Checkbutton(self.frameControlsBasic,
+        self.modifier_checkbuttons = {}
+        column = 0
+        for modifier, variable in zip(self.modifiers, self.modifier_vars):
+            label = self.modifier_label.get(modifier, modifier)
+            check=Checkbutton(self.frameControlsBasic,
                 command=self.BuildKeyString,
-                text='Ctrl',variable=self.keyCtrl,onvalue='Control',offvalue='')
-        checkCtrl.grid(row=0,column=0,padx=2,sticky=W)
-        checkAlt=Checkbutton(self.frameControlsBasic,
-                command=self.BuildKeyString,
-                text='Alt',variable=self.keyAlt,onvalue='Alt',offvalue='')
-        checkAlt.grid(row=0,column=1,padx=2,sticky=W)
-        checkShift=Checkbutton(self.frameControlsBasic,
-                command=self.BuildKeyString,
-                text='Shift',variable=self.keyShift,onvalue='Shift',offvalue='')
-        checkShift.grid(row=0,column=3,padx=2,sticky=W)
+                text=label,variable=variable,onvalue=modifier,offvalue='')
+            check.grid(row=0,column=column,padx=2,sticky=W)
+            self.modifier_checkbuttons[modifier] = check
+            column += 1
         labelFnAdvice=Label(self.frameControlsBasic,justify=LEFT,
                 text="Select the desired modifier\n"+
                      "keys above, and final key\n"+
@@ -119,6 +117,21 @@
                  "separated by a space, eg., <Alt-v> <Meta-v>." )
         labelHelpAdvanced.grid(row=0,column=0,sticky=NSEW)
 
+    def SetModifiersForPlatform(self):
+        """Determine list of names of key modifiers for this platform.
+
+        The names are used to build Tk bindings -- it doesn't matter if the
+        keyboard has these keys, it matters if Tk understands them. The
+        order is also important: key binding equality depends on it, so
+        config-keys.def must use the same ordering.
+        """
+        import sys
+        if sys.platform == 'darwin' and sys.executable.count('.app'):
+            self.modifiers = ['Shift', 'Control', 'Option', 'Command']
+        else:
+            self.modifiers = ['Control', 'Alt', 'Shift']
+        self.modifier_label = {'Control': 'Ctrl'}
+
     def ToggleLevel(self):
         if  self.buttonLevel.cget('text')[:8]=='Advanced':
             self.ClearKeySeq()
@@ -152,22 +165,15 @@
         self.keyString.set(keyStr)
         
     def GetModifiers(self):
-        modList=[]
-        ctrl=self.keyCtrl.get()
-        alt=self.keyAlt.get()
-        shift=self.keyShift.get()
-        if ctrl: modList.append(ctrl)
-        if alt: modList.append(alt)
-        if shift: modList.append(shift)
-        return modList
+        modList = [variable.get() for variable in self.modifier_vars]
+        return filter(None, modList)
 
     def ClearKeySeq(self):
         self.listKeysFinal.select_clear(0,END)
         self.listKeysFinal.yview(MOVETO, '0.0')
-        self.keyCtrl.set('')
-        self.keyAlt.set(''),
-        self.keyShift.set('')
-        self.keyString.set('')    
+        for variable in self.modifier_vars:
+            variable.set('')
+        self.keyString.set('')
     
     def LoadFinalKeyList(self):
         #these tuples are also available for use in validity checks