a ConfigParser for idle and three configuration files

This commit is contained in:
Jeremy Hylton 2000-03-03 22:57:42 +00:00
parent 820314ea95
commit daca630e40
4 changed files with 187 additions and 0 deletions

117
Tools/idle/IdleConf.py Normal file
View File

@ -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()

View File

@ -0,0 +1,3 @@
[EditorWindow]
font-name: courier
font-size: 10

View File

@ -0,0 +1,3 @@
[EditorWindow]
font-name: courier new
font-size: 10

64
Tools/idle/config.txt Normal file
View File

@ -0,0 +1,64 @@
# IDLE reads several config files to determine user preferences. This
# file is the default config file. When IDLE starts, it will look in
# the following four files in order:
# config.txt the default config file
# config-[win/unix/mac].txt the generic platform config file
# config-[sys.platform].txt the specific platform config file
# ~/.idle the user config file
# XXX what about Windows?
#
# The last definition of each option is used. For example, you can
# override the default window size (80x24) by defining width and
# height options in the EditorWindow section of your ~/.idle file
#
# IDLE extensions can be enabled and disabled by adding them to one of
# the config files. To enable an extension, create a section with the
# same name as the extension, e.g. the [ParenMatch] section below. To
# disable an extension, either remove the section or add the the
# enable option with the value 0.
[EditorWindow]
width: 80
height: 24
# fonts defined in config-[win/unix].txt
[Colors]
normal-foreground: black
normal-background: white
# These color types are not explicitly defined: sync, todo, stdin
keyword-foreground: #ff7700
comment-foreground: #dd0000
string-foreground: #00aa00
definition-foreground: #0000ff
hilite-foreground: #000068
hilite-background: #006868
break-foreground: #ff7777
hit-foreground: #ffffff
hit-background: #000000
stdout-foreground: blue
stderr-foreground: red
console-foreground: #770000
error-background: #ff7777
cursor-background: black
[SearchBinding]
[AutoIndent]
[AutoExpand]
[FormatParagraph]
[ZoomHeight]
[ScriptBinding]
[CallTips]
[ParenMatch]
enable: 0 ; ParenMatch conflicts with CallTips
style: expression
flash-delay: 500
bell: 1
hilite-foreground: black
hilite-background: #43cd80 ; SeaGreen3