import os, pwd, regex def normal_path(path): path = os.path.realpath(path) home = os.getenv('HOME') isdir = os.path.isdir(path) if path.startswith(home): path = path.replace(home, '~', 1) if isdir and not path.endswith('/'): return path + '/' else: return path def expand_tilde(path): if not path.startswith('~'): return path parts = path.split('/', 1) if parts[0] == '~': parts[0] = os.getenv('HOME') elif parts[0].startswith('~'): users = [x[0] for x in pwd.getpwall()] if parts[0][1:] in users: home = pwd.getpwnam(parts[0][1:])[5] parts[0] = home if len(parts) > 1: s = os.path.join(parts[0], parts[1]) else: s = parts[0] s = os.path.realpath(s) if os.path.isdir(s): s += '/' return s def cleanse(s): s2 = s.replace("\n", "") return s2 def padtrunc(s, i, c=' '): return s.ljust(i, c)[:i] def pad(s, i, c=' '): return s.ljust(i, c) def count_leading_whitespace(s): m = regex.leading_whitespace.match(s) assert m, "count leading whitespace failed somehow" return m.end() - m.start() def dump(x): d = {} for name in dir(x): d[name] = getattr(x, name) return '%s: %r' % (x, d) def get_margin_limit(w, def_limit=80): lname = '%s.margin' % w.mode.name().lower() if lname in w.application.config: return w.application.config[lname] else: return w.application.config.get('margin', def_limit) def get_margin_color(w, def_color='blue'): lname = '%s.margin_color' % w.mode.name().lower() if lname in w.application.config: return w.application.config[lname] else: return w.application.config.get('margin_color', def_color)