color: reset win32 console color in a finally block
authorIdan Kamara <idankk86@gmail.com>
Sat, 09 Apr 2011 23:53:23 +0300
changeset 13919 67f20625703f
parent 13918 55f4941f98c8
child 13920 332e400764e5
color: reset win32 console color in a finally block
hgext/color.py
--- a/hgext/color.py	Sat Apr 09 15:52:19 2011 -0500
+++ b/hgext/color.py	Sat Apr 09 23:53:23 2011 +0300
@@ -349,13 +349,15 @@
 
         # Look for ANSI-like codes embedded in text
         m = re.match(ansire, text)
-        while m:
-            for sattr in m.group(1).split(';'):
-                if sattr:
-                    attr = mapcolor(int(sattr), attr)
-            _kernel32.SetConsoleTextAttribute(stdout, attr)
-            orig(m.group(2), **opts)
-            m = re.match(ansire, m.group(3))
 
-        # Explicity reset original attributes
-        _kernel32.SetConsoleTextAttribute(stdout, origattr)
+        try:
+            while m:
+                for sattr in m.group(1).split(';'):
+                    if sattr:
+                        attr = mapcolor(int(sattr), attr)
+                _kernel32.SetConsoleTextAttribute(stdout, attr)
+                orig(m.group(2), **opts)
+                m = re.match(ansire, m.group(3))
+        finally:
+            # Explicity reset original attributes
+            _kernel32.SetConsoleTextAttribute(stdout, origattr)