summaryrefslogtreecommitdiffstats
path: root/Tools/idle/IdleConf.py
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2000-03-03 22:57:42 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2000-03-03 22:57:42 (GMT)
commitdaca630e4058fcdc5cb4397b5e49329e9b07776b (patch)
tree0d6c39416ab5f1e07a5a96744a77cbe1a0d88b7c /Tools/idle/IdleConf.py
parent820314ea954963937ee51190ea916b1f54361d0f (diff)
downloadcpython-daca630e4058fcdc5cb4397b5e49329e9b07776b.zip
cpython-daca630e4058fcdc5cb4397b5e49329e9b07776b.tar.gz
cpython-daca630e4058fcdc5cb4397b5e49329e9b07776b.tar.bz2
a ConfigParser for idle and three configuration files
Diffstat (limited to 'Tools/idle/IdleConf.py')
-rw-r--r--Tools/idle/IdleConf.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/Tools/idle/IdleConf.py b/Tools/idle/IdleConf.py
new file mode 100644
index 0000000..de208b0
--- /dev/null
+++ b/Tools/idle/IdleConf.py
@@ -0,0 +1,117 @@
+"""Provides access to configuration information"""
+
+import os
+import sys
+from ConfigParser import ConfigParser, NoOptionError
+
+class IdleConfParser(ConfigParser):
+
+ # these conf sections do not define extensions!
+ builtin_sections = {}
+ for section in ('EditorWindow', 'Colors'):
+ builtin_sections[section] = section
+
+ def getcolor(self, sec, name):
+ """Return a dictionary with foreground and background colors
+
+ The return value is appropriate for passing to Tkinter in, e.g.,
+ a tag_config call.
+ """
+ fore = self.getdef(sec, name + "-foreground")
+ back = self.getdef(sec, name + "-background")
+ return {"foreground": fore,
+ "background": back}
+
+ def getdef(self, sec, options, raw=0, vars=None, default=None):
+ """Get an option value for given section or return default"""
+ try:
+ return self.get(sec, options, raw, vars)
+ except NoOptionError:
+ return default
+
+ def getsection(self, section):
+ """Return a SectionConfigParser object"""
+ return SectionConfigParser(section, self)
+
+ def getextensions(self):
+ exts = []
+ for sec in self.sections():
+ if self.builtin_sections.has_key(sec):
+ continue
+ # enable is a bool, but it may not be defined
+ if self.getdef(sec, 'enable') != '0':
+ exts.append(sec)
+ return exts
+
+ def reload(self):
+ global IdleConf
+ IdleConf = IdleConfParser()
+ load(_dir) # _dir is a global holding the last directory loaded
+
+class SectionConfigParser:
+ """A ConfigParser object specialized for one section
+
+ This class has all the get methods that a regular ConfigParser does,
+ but without requiring a section argument.
+ """
+ def __init__(self, section, config):
+ self.section = section
+ self.config = config
+
+ def options(self):
+ return self.config.options(self.section)
+
+ def get(self, options, raw=0, vars=None):
+ return self.config.get(self.section, options, raw, vars)
+
+ def getdef(self, options, raw=0, vars=None, default=None):
+ return self.config.getdef(self.section, options, raw, vars, default)
+
+ def getint(self, option):
+ return self.config.getint(self.section, option)
+
+ def getfloat(self, option):
+ return self.config.getint(self.section, option)
+
+ def getboolean(self, option):
+ return self.config.getint(self.section, option)
+
+ def getcolor(self, option):
+ return self.config.getcolor(self.section, option)
+
+def load(dir):
+ """Load IDLE configuration files based on IDLE install in dir
+
+ Attempts to load two config files:
+ dir/config.txt
+ dir/config-[win/mac/unix].txt
+ dir/config-%(sys.platform)s.txt
+ ~/.idle
+ """
+ global _dir
+ _dir = dir
+
+ if sys.platform.startswith('win'):
+ genplatfile = os.path.join(dir, "config-win.txt")
+ # XXX don't know what the platform string is on a Mac
+ elif sys.platform.startswith('mac'):
+ genplatfile = os.path.join(dir, "config-mac.txt")
+ else:
+ genplatfile = os.path.join(dir, "config-unix.txt")
+
+ platfile = os.path.join(dir, "config-%s.txt" % sys.platform)
+
+ for file in (os.path.join(dir, "config.txt"),
+ genplatfile,
+ platfile,
+ # XXX watch out for KeyError
+ os.path.join(os.environ['HOME'], ".idle"),
+ ):
+ try:
+ f = open(file)
+ except IOError:
+ continue
+ IdleConf.readfp(f)
+ f.close()
+
+IdleConf = IdleConfParser()