summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2006-04-04 21:13:55 +0000
committerZac Medico <zmedico@gentoo.org>2006-04-04 21:13:55 +0000
commit36ca784c142e6954f76b299d4a97d6de327bcac4 (patch)
tree0b824114439be7727f8c21d49dca3f1c93c36cc3 /pym/output.py
parentAutomatically create FILESDIR if necessary when writing old style digests. T... (diff)
downloadportage-idfetch-36ca784c142e6954f76b299d4a97d6de327bcac4.tar.gz
portage-idfetch-36ca784c142e6954f76b299d4a97d6de327bcac4.tar.bz2
portage-idfetch-36ca784c142e6954f76b299d4a97d6de327bcac4.zip
Add support for user configuration of colors in the output module for bug #125120. Thanks to solar for the patch that this was derived from.
svn path=/main/trunk/; revision=3072
Diffstat (limited to 'pym/output.py')
-rw-r--r--pym/output.py45
1 files changed, 44 insertions, 1 deletions
diff --git a/pym/output.py b/pym/output.py
index e735d4d4..89821e52 100644
--- a/pym/output.py
+++ b/pym/output.py
@@ -3,7 +3,10 @@
# $Id: /var/cvsroot/gentoo-src/portage/pym/output.py,v 1.24.2.4 2005/04/17 09:01:55 jstubbs Exp $
-import commands,os,sys,re
+import commands,errno,os,re,shlex,sys
+from portage_const import COLOR_MAP_FILE
+from portage_util import writemsg
+from portage_exception import PortageException, ParseError, PermissionDenied, FileNotFound
havecolor=1
dotitles=1
@@ -88,6 +91,46 @@ codes["brown"] = esc_seq + "33m"
codes["red"] = esc_seq + "31;01m"
codes["darkred"] = esc_seq + "31m"
+def parse_color_map():
+ myfile = COLOR_MAP_FILE
+ ansi_code_pattern = re.compile("^[0-9;]*m$")
+ def strip_quotes(token, quotes):
+ if token[0] in quotes and token[0] == token[-1]:
+ token = token[1:-1]
+ return token
+ try:
+ s = shlex.shlex(open(myfile))
+ s.wordchars = s.wordchars + ";" # for ansi codes
+ d = {}
+ while True:
+ k, o, v = s.get_token(), s.get_token(), s.get_token()
+ if k is s.eof:
+ break
+ if o != "=":
+ raise ParseError("%s%s'%s'" % (s.error_leader(myfile, s.lineno), "expected '=' operator: ", o))
+ k = strip_quotes(k, s.quotes)
+ v = strip_quotes(v, s.quotes)
+ if ansi_code_pattern.match(v):
+ codes[k] = esc_seq + v
+ else:
+ if v in codes:
+ codes[k] = codes[v]
+ else:
+ raise ParseError("%s%s'%s'" % (s.error_leader(myfile, s.lineno), "Undefined: ", v))
+ except (IOError, OSError), e:
+ if e.errno == errno.ENOENT:
+ raise FileNotFound(myfile)
+ elif e.errno == errno.EACCES:
+ raise PermissionDenied(myfile)
+ raise
+
+try:
+ parse_color_map()
+except FileNotFound, e:
+ pass
+except PortageException, e:
+ writemsg("%s\n" % str(e))
+
def nc_len(mystr):
tmp = re.sub(esc_seq + "^m]+m", "", mystr);
return len(tmp)