loading core keybindings via new config system plus
further devel of highlight handling
diff --git a/Lib/idlelib/Bindings.py b/Lib/idlelib/Bindings.py
index 29d0cf4..862ceb6 100644
--- a/Lib/idlelib/Bindings.py
+++ b/Lib/idlelib/Bindings.py
@@ -73,11 +73,6 @@
   ]),
 ]
 
-#if sys.platform == 'win32':
-#    default_keydefs = windows_keydefs
-#else:
-#    default_keydefs = unix_keydefs
-
-default_keydefs = idleConf.GetKeys(keySetName=None)
+default_keydefs = idleConf.GetKeys(keySetName=idleConf.CurrentKeys())
 
 del sys
diff --git a/Lib/idlelib/ColorDelegator.py b/Lib/idlelib/ColorDelegator.py
index b4d6559..a4aefb2 100644
--- a/Lib/idlelib/ColorDelegator.py
+++ b/Lib/idlelib/ColorDelegator.py
@@ -60,8 +60,8 @@
         "KEYWORD": idleConf.GetHighlight(theme, "keyword"),
         "STRING": idleConf.GetHighlight(theme, "string"),
         "DEFINITION": idleConf.GetHighlight(theme, "definition"),
-        "SYNC": idleConf.GetHighlight(theme, "sync"),
-        "TODO": idleConf.GetHighlight(theme, "todo"),
+        "SYNC": {'background':None,'foreground':None},
+        "TODO": {'background':None,'foreground':None},
         "BREAK": idleConf.GetHighlight(theme, "break"),
         # The following is used by ReplaceDialog:
         "hit": idleConf.GetHighlight(theme, "hit"),
diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index 0e19da1..237a462 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -206,7 +206,6 @@
         if self.extensions.has_key('AutoIndent'):
             self.extensions['AutoIndent'].set_indentation_params(
                 self.ispythonsource(filename))
-        
 
     def set_status_bar(self):
         self.status_bar = self.MultiStatusBar(self.top)
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 5037806..9333ea9 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -42,7 +42,6 @@
 from ColorDelegator import ColorDelegator
 from UndoDelegator import UndoDelegator
 from OutputWindow import OutputWindow, OnDemandOutputWindow
-from IdleConf import idleconf
 from configHandler import idleConf
 import idlever
 
@@ -143,9 +142,9 @@
 
     tagdefs = ColorDelegator.tagdefs.copy()
     theme = idleConf.GetOption('main','Theme','name')
-    tagdefs.update({
 
-        "stdin": idleConf.GetHighlight(theme, "stdin"),
+    tagdefs.update({
+        "stdin": {'background':None,'foreground':None},
         "stdout": idleConf.GetHighlight(theme, "stdout"),
         "stderr": idleConf.GetHighlight(theme, "stderr"),
         "console": idleConf.GetHighlight(theme, "console"),
@@ -153,7 +152,6 @@
         None: idleConf.GetHighlight(theme, "normal"),
     })
 
-
 class ModifiedUndoDelegator(UndoDelegator):
 
     # Forbid insert/delete before the I/O mark
diff --git a/Lib/idlelib/config-extensions.def b/Lib/idlelib/config-extensions.def
index 2c91554..b4e9b02 100644
--- a/Lib/idlelib/config-extensions.def
+++ b/Lib/idlelib/config-extensions.def
@@ -1,15 +1,15 @@
 # IDLE reads several config files to determine user preferences.  This 
 # file is the default config file for idle extensions settings.  
 
+[FormatParagraph]
+enable=1
+
 [AutoIndent]
 enable=1
 
 [AutoExpand]
 enable=1
 
-[FormatParagraph]
-enable=1
-
 [ZoomHeight]
 enable=1
 
diff --git a/Lib/idlelib/config-main.def b/Lib/idlelib/config-main.def
index fbb760f..82be552 100644
--- a/Lib/idlelib/config-main.def
+++ b/Lib/idlelib/config-main.def
@@ -63,7 +63,7 @@
 
 [Keys]
 default= 1  
-name= IDLE Classic - windows
+name= IDLE Classic Windows
 
 [RecentFiles]
 1=
diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py
index 6c88d60..bfff813 100644
--- a/Lib/idlelib/configDialog.py
+++ b/Lib/idlelib/configDialog.py
@@ -120,8 +120,8 @@
             self.radioBg.config(state=DISABLED)
             self.fgHilite.set(1)
         else: #both fg and bg can be set
-            self.radioFg.config(state=DISABLED)
-            self.radioBg.config(state=DISABLED)
+            self.radioFg.config(state=NORMAL)
+            self.radioBg.config(state=NORMAL)
             self.fgHilite.set(1)
         self.SetColourSample()
     
@@ -496,7 +496,7 @@
             colours=idleConf.GetHighlight(theme, self.themeElements[element][0])
             if element=='Cursor': #cursor sample needs special painting
                 colours['background']=idleConf.GetHighlight(theme, 
-                        'normal-text', fgBg='bg')
+                        'normal', fgBg='bg')
             apply(self.textHighlightSample.tag_config,
                 (self.themeElements[element][0],),colours)
     
@@ -558,11 +558,8 @@
         themeNames=self.themeElements.keys()
         themeNames.sort(self.__ThemeNameIndexCompare)
         self.optMenuHighlightTarget.SetMenu(themeNames,themeNames[0])   
-        sampleBg=idleConf.GetHighlight(currentOption,
-            self.highlightTarget.get())['background']
-        self.fgHilite.set(0)
-        self.frameColourSet.config(bg=sampleBg)
         self.PaintThemeSample()
+        self.SetHighlightTarget()
     
     def __ThemeNameIndexCompare(self,a,b):
         if self.themeElements[a][1]<self.themeElements[b][1]: return -1
diff --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py
index b761a1c..ba18457 100644
--- a/Lib/idlelib/configHandler.py
+++ b/Lib/idlelib/configHandler.py
@@ -27,7 +27,6 @@
         """
         Get an option value for given section/option or return default.
         If type is specified, return as type.
-        If a default is returned a warning is printed to stderr.
         """
         if type=='bool': 
             getVal=self.getboolean
@@ -125,6 +124,7 @@
         fallback to a useable passed-in default if the option isn't present in 
         either the user or the default configuration.
         configType must be one of ('main','extensions','highlight','keys')
+        If a default is returned a warning is printed to stderr.
         """
         if self.userCfg[configType].has_option(section,option):
             return self.userCfg[configType].Get(section, option, type=type)
@@ -201,14 +201,14 @@
         """
         Returns the name of the currently active theme        
         """
-        return self.GetOption('main','Theme','name')
+        return self.GetOption('main','Theme','name',default='')
         
 
     def CurrentKeys(self):
         """
         Returns the name of the currently active theme        
         """
-        return self.GetOption('main','Keys','name')
+        return self.GetOption('main','Keys','name',default='')
     
     def GetExtensions(self, activeOnly=1):
         """
@@ -230,11 +230,21 @@
         else:
             return extns        
 
+    def GetKeyBinding(self, keySetName, eventStr):
+        """
+        returns the keybinding for a specific event.
+        keySetName - string, name of key binding set
+        eventStr - string, the virtual event we want the binding for, 
+                   represented as a string, eg. '<<event>>'
+        """
+        eventName=eventStr[2:-2] #trim off the angle brackets
+        binding=self.GetOption('keys',keySetName,eventName,default='').split()
+        return binding
+
     def GetKeys(self, keySetName=None):
         """
-        returns the requested keybindings, with fallbacks if required.
+        returns the requested set of keybindings, with fallbacks if required.
         """
-        #default keybindings.
         #keybindings loaded from the config file(s) are loaded _over_ these
         #defaults, so if there is a problem getting any binding there will
         #be an 'ultimate last resort fallback' to the CUA-ish bindings
@@ -266,9 +276,19 @@
             '<<save-window>>': ['<Control-s>'],
             '<<select-all>>': ['<Alt-a>'],
             '<<toggle-auto-coloring>>': ['<Control-slash>'],
-            '<<undo>>': ['<Control-z>']}
+            '<<undo>>': ['<Control-z>'],
+            '<<find-again>>': ['<Control-g>', '<F3>'],
+            '<<find-in-files>>': ['<Alt-F3>'],
+            '<<find-selection>>': ['<Control-F3>'],
+            '<<find>>': ['<Control-f>'],
+            '<<replace>>': ['<Control-h>'],
+            '<<goto-line>>': ['<Alt-g>'] }
+        
         if keySetName:
-            pass
+            for event in keyBindings.keys():
+                binding=self.GetKeyBinding(keySetName,event)
+                if binding: #otherwise will keep default
+                    keyBindings[event]=binding
             
         return keyBindings