mirror of https://github.com/python/cpython
a ConfigParser for idle and three configuration files
This commit is contained in:
parent
820314ea95
commit
daca630e40
|
@ -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()
|
|
@ -0,0 +1,3 @@
|
||||||
|
[EditorWindow]
|
||||||
|
font-name: courier
|
||||||
|
font-size: 10
|
|
@ -0,0 +1,3 @@
|
||||||
|
[EditorWindow]
|
||||||
|
font-name: courier new
|
||||||
|
font-size: 10
|
|
@ -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
|
Loading…
Reference in New Issue