From 240c405d78121400404344f3ba8f943043789f57 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Mon, 23 Sep 2013 08:33:36 +0200 Subject: rcfile support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/common.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'src/common.py') diff --git a/src/common.py b/src/common.py index 3e4ee7b..1c25342 100644 --- a/src/common.py +++ b/src/common.py @@ -85,3 +85,48 @@ class Jump(): def __call__(self): print(self.string, end = '') + +def parsefile(file): + ''' + Parse a file name encoded with environment variables + + @param file The encoded file name + @return The target file name, None if the environment variables are not declared + ''' + if '$' in file: + buf = '' + esc = False + var = None + for c in file: + if esc: + buf += c + esc = False + elif var is not None: + if c == '/': + var = os.environ[var] if var in os.environ else '' + if len(var) == 0: + return None + buf += var + c + var = None + else: + var += c + elif c == '$': + var = '' + elif c == '\\': + esc = True + else: + buf += c + return buf + return file + + +for file in ('$XDG_CONFIG_HOME/%/%rc', '$HOME/.config/%/%rc', '$HOME/.%rc', '/etc/%rc'): + file = parsefile(file.replace('%', 'pytagomacs')) + if (file is not None) and os.path.exists(file): + with open(file, 'rb') as rcfile: + code = rcfile.read().decode('utf8', 'replace') + '\n' + env = os.environ + code = compile(code, file, 'exec') + exec(code, globals()) # TODO do the globals need to be set explicitly? + break + -- cgit v1.2.3-70-g09d2