From: Zac Medico <zmedico@gentoo.org>
Date: Thu, 30 Apr 2009 07:30:14 +0000 (-0000)
Subject: Make xtermTitle() use a global variable to cache the result of the TERM check.
X-Git-Tag: v2.1.6.12~23
X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=e4ce2e72476ed5a25c3ea190a13b4487c44022e1;p=portage.git

Make xtermTitle() use a global variable to cache the result of the TERM check.
(trunk r13410)

svn path=/main/branches/2.1.6/; revision=13550
---

diff --git a/pym/portage/output.py b/pym/portage/output.py
index eaca066f4..983cbec60 100644
--- a/pym/portage/output.py
+++ b/pym/portage/output.py
@@ -247,22 +247,26 @@ def nc_len(mystr):
 	tmp = re.sub(esc_seq + "^m]+m", "", mystr);
 	return len(tmp)
 
+_legal_terms_re = re.compile(r'^(xterm|xterm-color|Eterm|aterm|rxvt|screen|kterm|rxvt-unicode|gnome|interix)')
+_disable_xtermTitle = None
+_max_xtermTitle_len = 253
+
 def xtermTitle(mystr, raw=False):
-	if dotitles and "TERM" in os.environ and sys.stderr.isatty():
+	global _disable_xtermTitle
+	if _disable_xtermTitle is None:
+		_disable_xtermTitle = not (sys.stderr.isatty() and \
+		'TERM' in os.environ and \
+		_legal_terms_re.match(os.environ['TERM']) is not None)
+
+	if dotitles and not _disable_xtermTitle:
 		# If the title string is too big then the terminal can
 		# misbehave. Therefore, truncate it if it's too big.
-		max_len = 253
-		if len(mystr) > max_len:
-			mystr = mystr[:max_len]
-		myt=os.environ["TERM"]
-		legal_terms = ["xterm","xterm-color","Eterm","aterm","rxvt","screen","kterm","rxvt-unicode","gnome","interix"]
-		for term in legal_terms:
-			if myt.startswith(term):
-				if not raw:
-					mystr = "\x1b]0;%s\x07" % mystr
-				sys.stderr.write(mystr)
-				sys.stderr.flush()
-				break
+		if len(mystr) > _max_xtermTitle_len:
+			mystr = mystr[:_max_xtermTitle_len]
+		if not raw:
+			mystr = '\x1b]0;%s\x07' % mystr
+		sys.stderr.write(mystr)
+		sys.stderr.flush()
 
 default_xterm_title = None