changeover to new keybinding configuration implementation
diff --git a/Lib/idlelib/AutoExpand.py b/Lib/idlelib/AutoExpand.py
index 09f34b3..c50e52a 100644
--- a/Lib/idlelib/AutoExpand.py
+++ b/Lib/idlelib/AutoExpand.py
@@ -7,14 +7,6 @@
 
 class AutoExpand:
 
-    keydefs = {
-        '<<expand-word>>': ['<Alt-slash>'],
-    }
-
-    unix_keydefs = {
-        '<<expand-word>>': ['<Meta-slash>', '<Alt-slash>'],
-    }
-
     menudefs = [
         ('edit', [
             ('E_xpand word', '<<expand-word>>'),
diff --git a/Lib/idlelib/AutoIndent.py b/Lib/idlelib/AutoIndent.py
index 6d38481..eff398b 100644
--- a/Lib/idlelib/AutoIndent.py
+++ b/Lib/idlelib/AutoIndent.py
@@ -41,7 +41,6 @@
 
     menudefs = [
         ('format', [       # /s/edit/format   dscherer@cmu.edu
-            None,
             ('_Indent region', '<<indent-region>>'),
             ('_Dedent region', '<<dedent-region>>'),
             ('Comment _out region', '<<comment-region>>'),
@@ -53,39 +52,6 @@
         ]),
     ]
 
-    keydefs = {
-        '<<smart-backspace>>': ['<Key-BackSpace>'],
-        '<<newline-and-indent>>': ['<Key-Return>', '<KP_Enter>'],
-        '<<smart-indent>>': ['<Key-Tab>']
-    }
-
-    windows_keydefs = {
-        '<<indent-region>>': ['<Control-bracketright>'],
-        '<<dedent-region>>': ['<Shift-Tab>',     # dscherer@cmu.edu
-                              '<Control-bracketleft>'],
-        '<<comment-region>>': ['<Alt-Key-3>'],
-        '<<uncomment-region>>': ['<Alt-Key-4>'],
-        '<<tabify-region>>': ['<Alt-Key-5>'],
-        '<<untabify-region>>': ['<Alt-Key-6>'],
-        '<<toggle-tabs>>': ['<Alt-Key-t>'],
-        '<<change-indentwidth>>': ['<Alt-Key-u>'],
-    }
-
-    unix_keydefs = {
-        '<<indent-region>>': ['<Alt-bracketright>',
-                              '<Meta-bracketright>',
-                              '<Control-bracketright>'],
-        '<<dedent-region>>': ['<Alt-bracketleft>',
-                              '<Meta-bracketleft>',
-                              '<Control-bracketleft>'],
-        '<<comment-region>>': ['<Alt-Key-3>', '<Meta-Key-3>'],
-        '<<uncomment-region>>': ['<Alt-Key-4>', '<Meta-Key-4>'],
-        '<<tabify-region>>': ['<Alt-Key-5>', '<Meta-Key-5>'],
-        '<<untabify-region>>': ['<Alt-Key-6>', '<Meta-Key-6>'],
-        '<<toggle-tabs>>': ['<Alt-Key-t>'],
-        '<<change-indentwidth>>': ['<Alt-Key-u>'],
-    }
-
     # usetabs true  -> literal tab characters are used by indent and
     #                  dedent cmds, possibly mixed with spaces if
     #                  indentwidth is not a multiple of tabwidth
diff --git a/Lib/idlelib/Bindings.py b/Lib/idlelib/Bindings.py
index 862ceb6..2269a90 100644
--- a/Lib/idlelib/Bindings.py
+++ b/Lib/idlelib/Bindings.py
@@ -73,6 +73,6 @@
   ]),
 ]
 
-default_keydefs = idleConf.GetKeys(keySetName=idleConf.CurrentKeys())
+default_keydefs = idleConf.GetCurrentKeySet()
 
 del sys
diff --git a/Lib/idlelib/CallTips.py b/Lib/idlelib/CallTips.py
index 7c5f41c..b1f100f 100644
--- a/Lib/idlelib/CallTips.py
+++ b/Lib/idlelib/CallTips.py
@@ -10,19 +10,6 @@
     menudefs = [
     ]
 
-    keydefs = {
-        '<<paren-open>>': ['<Key-parenleft>'],
-        '<<paren-close>>': ['<Key-parenright>'],
-        '<<check-calltip-cancel>>': ['<KeyRelease>'],
-        '<<calltip-cancel>>': ['<ButtonPress>', '<Key-Escape>'],
-    }
-
-    windows_keydefs = {
-    }
-
-    unix_keydefs = {
-    }
-
     def __init__(self, editwin):
         self.editwin = editwin
         self.text = editwin.text
diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index 237a462..bba1702 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -590,17 +590,7 @@
         cls = getattr(mod, name)
         ins = cls(self)
         self.extensions[name] = ins
-        kdnames = ["keydefs"]
-        if sys.platform == 'win32':
-            kdnames.append("windows_keydefs")
-        elif sys.platform == 'mac':
-            kdnames.append("mac_keydefs")
-        else:
-            kdnames.append("unix_keydefs")
-        keydefs = {}
-        for kdname in kdnames:
-            if hasattr(ins, kdname):
-                keydefs.update(getattr(ins, kdname))
+        keydefs=idleConf.GetExtensionBindings(name)
         if keydefs:
             self.apply_bindings(keydefs)
             for vevent in keydefs.keys():
@@ -612,6 +602,7 @@
                 methodname = methodname + "_event"
                 if hasattr(ins, methodname):
                     self.text.bind(vevent, getattr(ins, methodname))
+       
         if hasattr(ins, "menudefs"):
             self.fill_menus(ins.menudefs, keydefs)
         return ins
diff --git a/Lib/idlelib/ExecBinding.py b/Lib/idlelib/ExecBinding.py
index 67b0822..e148769 100644
--- a/Lib/idlelib/ExecBinding.py
+++ b/Lib/idlelib/ExecBinding.py
@@ -45,11 +45,6 @@
 protocol.publish('ExecBinding', loader_connect)
 
 class ExecBinding:
-    keydefs = {
-        '<<run-complete-script>>': ['<F5>'],
-        '<<stop-execution>>': ['<Cancel>'],   #'<Control-c>'
-    }
-    
     menudefs = [
         ('run', [None,
                   ('Run program', '<<run-complete-script>>'),
diff --git a/Lib/idlelib/FormatParagraph.py b/Lib/idlelib/FormatParagraph.py
index 498e2ef..cf5e365 100644
--- a/Lib/idlelib/FormatParagraph.py
+++ b/Lib/idlelib/FormatParagraph.py
@@ -25,14 +25,6 @@
          ])
     ]
 
-    keydefs = {
-        '<<format-paragraph>>': ['<Alt-q>'],
-    }
-
-    unix_keydefs = {
-        '<<format-paragraph>>': ['<Meta-q>'],
-    }
-
     def __init__(self, editwin):
         self.editwin = editwin
 
diff --git a/Lib/idlelib/ParenMatch.py b/Lib/idlelib/ParenMatch.py
index 17d76c2..7851422 100644
--- a/Lib/idlelib/ParenMatch.py
+++ b/Lib/idlelib/ParenMatch.py
@@ -43,19 +43,7 @@
     to the right of a right paren.  I don't know how to do that in Tk,
     so I haven't bothered.
     """
-
     menudefs = []
-
-    keydefs = {
-        '<<flash-open-paren>>' : ('<KeyRelease-parenright>',
-                                  '<KeyRelease-bracketright>',
-                                  '<KeyRelease-braceright>'),
-        '<<check-restore>>' : ('<KeyPress>',),
-    }
-
-    windows_keydefs = {}
-    unix_keydefs = {}
-
     iconf = idleconf.getsection('ParenMatch')
     STYLE = iconf.getdef('style', 'default')
     FLASH_DELAY = iconf.getint('flash-delay')
diff --git a/Lib/idlelib/ScriptBinding.py b/Lib/idlelib/ScriptBinding.py
index b54dfc4..2b3bf99 100644
--- a/Lib/idlelib/ScriptBinding.py
+++ b/Lib/idlelib/ScriptBinding.py
@@ -35,12 +35,6 @@
 
 class ScriptBinding:
 
-    keydefs = {
-        '<<check-module>>': ['<Alt-F5>', '<Meta-F5>'],
-        '<<import-module>>': ['<F5>'],
-        '<<run-script>>': ['<Control-F5>'],
-    }
-
     menudefs = [
         ('edit', [None,
                   ('Check module', '<<check-module>>'),
diff --git a/Lib/idlelib/ZoomHeight.py b/Lib/idlelib/ZoomHeight.py
index ecc306a..f2b99e9 100644
--- a/Lib/idlelib/ZoomHeight.py
+++ b/Lib/idlelib/ZoomHeight.py
@@ -10,14 +10,7 @@
             ('_Zoom Height', '<<zoom-height>>'),
          ])
     ]
-
-    windows_keydefs = {
-        '<<zoom-height>>': ['<Alt-F2>'],
-    }
-    unix_keydefs = {
-        '<<zoom-height>>': ['<Control-x><Control-z>'],
-    }
-
+ 
     def __init__(self, editwin):
         self.editwin = editwin
 
diff --git a/Lib/idlelib/config-extensions.def b/Lib/idlelib/config-extensions.def
index b4e9b02..c0439e6 100644
--- a/Lib/idlelib/config-extensions.def
+++ b/Lib/idlelib/config-extensions.def
@@ -1,26 +1,66 @@
 # IDLE reads several config files to determine user preferences.  This 
 # file is the default config file for idle extensions settings.  
+#
+# Each extension must have at least one section, named after the extension
+# module. This section must contain an 'enable' item (=1 to enable the 
+# extension, =0 to disable it) and also contains any other general configuration
+# items for the extension. Each extension may also define up to two optional
+# sections named ExtensionName_bindings and ExtensionName_cfgBindings. If
+# present, ExtensionName_bindings defines virtual event bindings for the 
+# extension that are not sensibly re-configurable. If present, 
+# ExtensionName_cfgBindings defines virtual event bindings for the extension 
+# that may be sensibly re-configured.
 
 [FormatParagraph]
 enable=1
+[FormatParagraph_cfgBindings]
+format-paragraph=<Alt-Key-q>
 
 [AutoIndent]
 enable=1
+[AutoIndent_cfgBindings]
+smart-backspace=<Key-BackSpace>
+newline-and-indent=<Key-Return> <Key-KP_Enter>
+smart-indent=<Key-Tab>
+indent-region=<Control-Key-bracketright>
+dedent-region=<Control-Key-bracketleft>
+comment-region=<Alt-Key-3>
+uncomment-region=<Alt-Key-4>
+tabify-region=<Alt-Key-5>
+untabify-region=<Alt-Key-6>
+toggle-tabs=<Alt-Key-t>
+change-indentwidth=<Alt-Key-u>
 
 [AutoExpand]
 enable=1
+[AutoExpand_cfgBindings]
+expand-word=<Alt-Key-slash>
 
 [ZoomHeight]
 enable=1
-
-#[ScriptBinding]    # disabled in favor of ExecBinding
-#enable=0
+[ZoomHeight_cfgBindings]
+zoom-height=<Alt-Key-F2>
 
 [ExecBinding]
 enable=1
+[ExecBinding_cfgBindings]
+run-complete-script=<Key-F5>
+stop-execution=<Key-Cancel>
+
+#[ScriptBinding] #currently ExecBinding has replaced ScriptBinding 
+#enable=0
+#[ScriptBinding_cfgBindings]
+#run-script=<Key-F5>
+#check-module=<Alt-Key-F5> <Meta-Key-F5>
+#import-module=<Control-Key-F5>
 
 [CallTips]
 enable=1
+[CallTips_bindings]
+paren-open=<Key-parenleft>
+paren-close=<Key-parenright>
+check-calltip-cancel=<KeyRelease>
+calltip-cancel=<ButtonPress> <Key-Escape>
 
 [ParenMatch]
 enable=0
@@ -29,3 +69,6 @@
 bell= 1
 hilite-foreground= black
 hilite-background= #43cd80
+[ParenMatch_bindings]
+flash-open-paren=<KeyRelease-parenright> <KeyRelease-bracketright> <KeyRelease-braceright>
+check-restore=<KeyPress>