blob: 8eaa8e06b58eef2045abc0eda63c305edb53d767 [file] [log] [blame]
Jeremy Hyltondaca6302000-03-03 22:57:42 +00001"""Provides access to configuration information"""
2
3import os
4import sys
Guido van Rossum7f3cfd52000-03-06 14:43:20 +00005from ConfigParser import ConfigParser, NoOptionError, NoSectionError
Jeremy Hyltondaca6302000-03-03 22:57:42 +00006
7class IdleConfParser(ConfigParser):
8
9 # these conf sections do not define extensions!
10 builtin_sections = {}
11 for section in ('EditorWindow', 'Colors'):
12 builtin_sections[section] = section
Tim Peters70c43782001-01-17 08:48:39 +000013
Jeremy Hyltondaca6302000-03-03 22:57:42 +000014 def getcolor(self, sec, name):
15 """Return a dictionary with foreground and background colors
16
17 The return value is appropriate for passing to Tkinter in, e.g.,
18 a tag_config call.
19 """
Tim Peters70c43782001-01-17 08:48:39 +000020 fore = self.getdef(sec, name + "-foreground")
21 back = self.getdef(sec, name + "-background")
Jeremy Hyltondaca6302000-03-03 22:57:42 +000022 return {"foreground": fore,
23 "background": back}
24
25 def getdef(self, sec, options, raw=0, vars=None, default=None):
26 """Get an option value for given section or return default"""
Tim Peters70c43782001-01-17 08:48:39 +000027 try:
Jeremy Hyltondaca6302000-03-03 22:57:42 +000028 return self.get(sec, options, raw, vars)
Tim Peters70c43782001-01-17 08:48:39 +000029 except (NoSectionError, NoOptionError):
30 return default
Jeremy Hyltondaca6302000-03-03 22:57:42 +000031
32 def getsection(self, section):
33 """Return a SectionConfigParser object"""
34 return SectionConfigParser(section, self)
35
36 def getextensions(self):
37 exts = []
38 for sec in self.sections():
39 if self.builtin_sections.has_key(sec):
Tim Peters70c43782001-01-17 08:48:39 +000040 continue
41 # enable is a bool, but it may not be defined
42 if self.getdef(sec, 'enable') != '0':
43 exts.append(sec)
Jeremy Hyltondaca6302000-03-03 22:57:42 +000044 return exts
45
46 def reload(self):
Jeremy Hylton6b3edf02000-03-07 17:55:32 +000047 global idleconf
48 idleconf = IdleConfParser()
Jeremy Hyltondaca6302000-03-03 22:57:42 +000049 load(_dir) # _dir is a global holding the last directory loaded
50
51class SectionConfigParser:
52 """A ConfigParser object specialized for one section
53
54 This class has all the get methods that a regular ConfigParser does,
55 but without requiring a section argument.
56 """
57 def __init__(self, section, config):
58 self.section = section
59 self.config = config
60
61 def options(self):
62 return self.config.options(self.section)
63
64 def get(self, options, raw=0, vars=None):
65 return self.config.get(self.section, options, raw, vars)
66
67 def getdef(self, options, raw=0, vars=None, default=None):
68 return self.config.getdef(self.section, options, raw, vars, default)
69
70 def getint(self, option):
71 return self.config.getint(self.section, option)
Tim Peters70c43782001-01-17 08:48:39 +000072
Jeremy Hyltondaca6302000-03-03 22:57:42 +000073 def getfloat(self, option):
74 return self.config.getint(self.section, option)
Tim Peters70c43782001-01-17 08:48:39 +000075
Jeremy Hyltondaca6302000-03-03 22:57:42 +000076 def getboolean(self, option):
77 return self.config.getint(self.section, option)
78
79 def getcolor(self, option):
80 return self.config.getcolor(self.section, option)
81
82def load(dir):
83 """Load IDLE configuration files based on IDLE install in dir
84
85 Attempts to load two config files:
86 dir/config.txt
87 dir/config-[win/mac/unix].txt
88 dir/config-%(sys.platform)s.txt
89 ~/.idle
90 """
91 global _dir
92 _dir = dir
93
Guido van Rossum074d6e12000-03-06 14:16:41 +000094 if sys.platform[:3] == 'win':
Jeremy Hyltondaca6302000-03-03 22:57:42 +000095 genplatfile = os.path.join(dir, "config-win.txt")
96 # XXX don't know what the platform string is on a Mac
Guido van Rossum074d6e12000-03-06 14:16:41 +000097 elif sys.platform[:3] == 'mac':
Jeremy Hyltondaca6302000-03-03 22:57:42 +000098 genplatfile = os.path.join(dir, "config-mac.txt")
99 else:
100 genplatfile = os.path.join(dir, "config-unix.txt")
Tim Peters70c43782001-01-17 08:48:39 +0000101
Jeremy Hyltondaca6302000-03-03 22:57:42 +0000102 platfile = os.path.join(dir, "config-%s.txt" % sys.platform)
Jeremy Hylton583abb82000-03-03 23:00:41 +0000103
104 try:
105 homedir = os.environ['HOME']
106 except KeyError:
107 homedir = os.getcwd()
Jeremy Hyltondaca6302000-03-03 22:57:42 +0000108
Jeremy Hylton6b3edf02000-03-07 17:55:32 +0000109 idleconf.read((os.path.join(dir, "config.txt"), genplatfile, platfile,
110 os.path.join(homedir, ".idle")))
111
112idleconf = IdleConfParser()
Guido van Rossum6cb7a212001-05-12 12:18:10 +0000113load(os.path.dirname(__file__))