migrate to use of IdleConf and config files to set options

idle.py:
    Load the config files before anything else happens
    XXX Need to define standard way to get files relative to the
       IDLE install dir

PyShell.py:
ColorDelegator.py:
    Get color defns out of IdleConf instead of IdlePrefs

EditorWindow.py:
    Replace hard-coded font & window size with config options
    Get extension names via IdleConf.getextensions

extend.py:
   Obsolete.  Extensions defined in config file.

ParenMatch.py:
   Use config file for extension options.
   Revise comment about parser requirements.
   Simplify logic on find returning None.
diff --git a/Tools/idle/ColorDelegator.py b/Tools/idle/ColorDelegator.py
index 68c2d33..212afa5 100644
--- a/Tools/idle/ColorDelegator.py
+++ b/Tools/idle/ColorDelegator.py
@@ -4,7 +4,7 @@
 import keyword
 from Tkinter import *
 from Delegator import Delegator
-import IdlePrefs
+from IdleConf import IdleConf
 
 #$ event <<toggle-auto-coloring>>
 #$ win <Control-slash>
@@ -51,29 +51,18 @@
                 apply(self.tag_configure, (tag,), cnf)
         self.tag_raise('sel')
 
-    cprefs = IdlePrefs.ColorPrefs()
+    cconf = IdleConf.getsection('Colors')
 
     tagdefs = {
-        "COMMENT":    {"foreground": cprefs.CComment[0],
-                       "background": cprefs.CComment[1]},
-        "KEYWORD":    {"foreground": cprefs.CKeyword[0],
-                       "background": cprefs.CKeyword[1]},
-        "STRING":     {"foreground": cprefs.CString[0],
-                       "background": cprefs.CString[1]},
-        "DEFINITION": {"foreground": cprefs.CDefinition[0],
-                       "background": cprefs.CDefinition[1]},
-
-        "SYNC":       {"background": cprefs.CSync[0],
-                       "background": cprefs.CSync[1]},
-        "TODO":       {"background": cprefs.CTodo[0],
-                       "background": cprefs.CTodo[1]},
-
-        "BREAK":      {"background": cprefs.CBreak[0],
-                       "background": cprefs.CBreak[1]},
-
+        "COMMENT": cconf.getcolor("comment"),
+        "KEYWORD": cconf.getcolor("keyword"),
+        "STRING": cconf.getcolor("string"),
+        "DEFINITION": cconf.getcolor("definition"),
+        "SYNC": cconf.getcolor("sync"),
+        "TODO": cconf.getcolor("todo"),
+        "BREAK": cconf.getcolor("break"),
         # The following is used by ReplaceDialog:
-        "hit":        {"foreground": cprefs.CHit[0],
-                       "background": cprefs.CHit[1]},
+        "hit": cconf.getcolor("hit"),
         }
 
     def insert(self, index, chars, tags=None):
diff --git a/Tools/idle/EditorWindow.py b/Tools/idle/EditorWindow.py
index 0e0e0dc..ee3b9c3 100644
--- a/Tools/idle/EditorWindow.py
+++ b/Tools/idle/EditorWindow.py
@@ -8,23 +8,7 @@
 import tkMessageBox
 import idlever
 import WindowList
-
-# Customization of default window size and font
-# standard
-WIDTH = 80
-HEIGHT = 24
-if sys.platform[:3] == 'win':
-    FONT = ("courier new", 10)
-else:
-    FONT = ("courier", 10)
-if 0:
-    # for demos (on Windows)
-    WIDTH = 70
-    HEIGHT = 16
-    FONT = ("lucida console", 14)
-if 0:
-    # for Windows 98
-    FONT = ("lucida console", 8)
+from IdleConf import IdleConf
 
 # The default tab setting for a Text widget, in average-width characters.
 TK_TABWIDTH_DEFAULT = 8
@@ -110,7 +94,8 @@
     vars = {}
 
     def __init__(self, flist=None, filename=None, key=None, root=None):
-        cprefs = self.ColorDelegator.cprefs
+        edconf = IdleConf.getsection('EditorWindow')
+        coconf = IdleConf.getsection('Colors')
         self.flist = flist
         root = root or flist.root
         self.root = root
@@ -121,13 +106,14 @@
         self.vbar = vbar = Scrollbar(top, name='vbar')
         self.text_frame = text_frame = Frame(top)
         self.text = text = Text(text_frame, name='text', padx=5,
-                                foreground=cprefs.CNormal[0],
-                                background=cprefs.CNormal[1],
-                                highlightcolor=cprefs.CHilite[0],
-                                highlightbackground=cprefs.CHilite[1],
-                                insertbackground=cprefs.CCursor[1],
-                                width=WIDTH, height=HEIGHT,
-                                wrap="none")
+                      foreground=coconf.getdef('normal-foreground'),
+                      background=coconf.getdef('normal-background'),
+                      highlightcolor=coconf.getdef('hilite-foreground'),
+                      highlightbackground=coconf.getdef('hilite-background'),
+                      insertbackground=coconf.getdef('cursor-background'),
+                      width=edconf.getint('width'),
+                      height=edconf.getint('height'),
+                      wrap="none")
 
         self.createmenubar()
         self.apply_bindings()
@@ -156,7 +142,7 @@
         vbar.pack(side=RIGHT, fill=Y)
 
         text['yscrollcommand'] = vbar.set
-        text['font'] = FONT
+        text['font'] = edconf.get('font-name'), edconf.get('font-size')
         text_frame.pack(side=LEFT, fill=BOTH, expand=1)
         text.pack(side=TOP, fill=BOTH, expand=1)
         text.focus_set()
@@ -544,8 +530,7 @@
                 traceback.print_exc()
 
     def get_standard_extension_names(self):
-        import extend
-        return extend.standard
+        return IdleConf.getextensions()
 
     def load_extension(self, name):
         mod = __import__(name, globals(), locals(), [])
diff --git a/Tools/idle/ParenMatch.py b/Tools/idle/ParenMatch.py
index 7500603..d8482b9 100644
--- a/Tools/idle/ParenMatch.py
+++ b/Tools/idle/ParenMatch.py
@@ -14,6 +14,7 @@
 
 import PyParse
 from AutoIndent import AutoIndent, index2line
+from IdleConf import IdleConf
 
 class ParenMatch:
     """Highlight matching parentheses
@@ -55,12 +56,12 @@
     windows_keydefs = {}
     unix_keydefs = {}
 
-    STYLE = "default" # or "expression"
-    FLASH_DELAY = 500
-    HILITE_CONFIG = {"foreground": "black",
-                     "background": "#43cd80", # SeaGreen3
-                     }
-    BELL = 1 # set to false for no bell
+    iconf = IdleConf.getsection('ParenMatch')
+    STYLE = iconf.get('style')
+    FLASH_DELAY = iconf.getint('flash-delay')
+    HILITE_CONFIG = iconf.getcolor('hilite')
+    BELL = iconf.getboolean('bell')
+    del iconf
 
     def __init__(self, editwin):
         self.editwin = editwin
@@ -156,9 +157,8 @@
             startat = max(lno - context, 1)
             startatindex = `startat` + ".0"
             # rawtext needs to contain everything up to the last
-            # character, which was the close paren.  also need to
-            # append "\n" to please the parser, which seems to expect
-            # a complete line
+            # character, which was the close paren.  the parser also
+	    # requires that the last line ends with "\n"
             rawtext = self.text.get(startatindex, "insert")[:-1] + "\n"
             y.set_str(rawtext)
             bod = y.find_good_parse_start(
@@ -174,9 +174,8 @@
         """Return the location of the last open paren"""
         lno = index2line(self.text.index("insert"))
         i, buf = self._find_offset_in_buf(lno)
-        if i is None:
-            return i
-        if keysym_type(buf[i]) != right_keysym_type:
+        if i is None \
+	   or keysym_type(buf[i]) != right_keysym_type:
             return None
         lines_back = buf[i:].count("\n") - 1
         # subtract one for the "\n" added to please the parser
diff --git a/Tools/idle/PyShell.py b/Tools/idle/PyShell.py
index 8c93f4d..1e2f1ae 100644
--- a/Tools/idle/PyShell.py
+++ b/Tools/idle/PyShell.py
@@ -16,6 +16,7 @@
 from FileList import FileList
 from ColorDelegator import ColorDelegator
 from OutputWindow import OutputWindow
+from IdleConf import IdleConf
 import idlever
 
 # We need to patch linecache.checkcache, because we don't want it
@@ -114,21 +115,15 @@
         ColorDelegator.recolorize_main(self)
 
     tagdefs = ColorDelegator.tagdefs.copy()
-    cprefs = ColorDelegator.cprefs
+    cconf = IdleConf.getsection('Colors')
 
     tagdefs.update({
-        "stdin":   {"foreground": cprefs.CStdIn[0],
-                    "background": cprefs.CStdIn[1]},
-        "stdout":  {"foreground": cprefs.CStdOut[0],
-                    "background": cprefs.CStdOut[1]},
-        "stderr":  {"foreground": cprefs.CStdErr[0],
-                    "background": cprefs.CStdErr[1]},
-        "console": {"foreground": cprefs.CConsole[0],
-                    "background": cprefs.CConsole[1]},
-        "ERROR":   {"background": cprefs.CError[0],
-                    "background": cprefs.CError[1]},
-        None:      {"foreground": cprefs.CNormal[0],
-                    "background": cprefs.CNormal[1]},
+        "stdin": cconf.getcolor("stdin"),
+        "stdout": cconf.getcolor("stdout"),
+        "stderr": cconf.getcolor("stderr"),
+        "console": cconf.getcolor("console"),
+        "ERROR": cconf.getcolor("ERROR"),
+	None: cconf.getcolor("normal"),
     })
 
 
diff --git a/Tools/idle/extend.py b/Tools/idle/extend.py
deleted file mode 100644
index de90f36..0000000
--- a/Tools/idle/extend.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# IDLE extensions to be loaded by default (see extend.txt).
-# Edit this file to configure your set of IDLE extensions.
-
-standard = [
-    "SearchBinding",
-    "AutoIndent",
-    "AutoExpand",
-    "FormatParagraph",
-    "ZoomHeight",
-    "ScriptBinding",
-    "CallTips",
-]
diff --git a/Tools/idle/idle.py b/Tools/idle/idle.py
index 3c06e05..71fdce5 100755
--- a/Tools/idle/idle.py
+++ b/Tools/idle/idle.py
@@ -1,3 +1,12 @@
 #! /usr/bin/env python
+
+import os
+import sys
+import IdleConf
+
+idle_dir = os.path.split(sys.argv[0])[0]
+IdleConf.load(idle_dir)
+
+# defer importing Pyshell until IdleConf is loaded
 import PyShell
 PyShell.main()