[tor-commits] [arm/release] Monkey patch for ACS disabling

atagar at torproject.org atagar at torproject.org
Sun Apr 29 04:00:58 UTC 2012


commit bd94f0f5ef5490a48828aebfd4c11e39111daaa9
Author: Damian Johnson <atagar at torproject.org>
Date:   Wed Nov 30 10:36:15 2011 -0800

    Monkey patch for ACS disabling
    
    Making manual ACS disabling transparent to the rest of the interface by monkey
    patching the ord values of ACS entries to '+', '-', or '|'. This has the
    advantage that the rest of the arm interface doesn't need to be aware of this
    complication, however it doesn't address the builtin box() function usage,
    which still makes most dialogs render incorrectly.
---
 src/util/panel.py   |   25 +++++--------------------
 src/util/uiTools.py |   27 ++++++++++++++++++---------
 2 files changed, 23 insertions(+), 29 deletions(-)

diff --git a/src/util/panel.py b/src/util/panel.py
index c0c13d8..50ae2c0 100644
--- a/src/util/panel.py
+++ b/src/util/panel.py
@@ -23,8 +23,7 @@ FORMAT_TAGS = {"<b>": (_noOp, curses.A_BOLD),
                "<h>": (_noOp, curses.A_STANDOUT)}
 for colorLabel in uiTools.COLOR_LIST: FORMAT_TAGS["<%s>" % colorLabel] = (uiTools.getColor, colorLabel)
 
-CONFIG = {"features.acsSupport": True,
-          "log.panelRecreated": log.DEBUG}
+CONFIG = {"log.panelRecreated": log.DEBUG}
 
 # prevents curses redraws if set
 HALT_ACTIVITY = False
@@ -426,11 +425,7 @@ class Panel():
     if self.win and self.maxX > x and self.maxY > y:
       try:
         drawLength = min(length, self.maxX - x)
-        
-        if CONFIG["features.acsSupport"]:
-          self.win.hline(y, x, curses.ACS_HLINE | attr, drawLength)
-        else:
-          self.addstr(y, x, "-" * drawLength, attr)
+        self.win.hline(y, x, curses.ACS_HLINE | attr, drawLength)
       except:
         # in edge cases drawing could cause a _curses.error
         pass
@@ -450,12 +445,7 @@ class Panel():
     if self.win and self.maxX > x and self.maxY > y:
       try:
         drawLength = min(length, self.maxY - y)
-        
-        if CONFIG["features.acsSupport"]:
-          self.win.vline(y, x, curses.ACS_VLINE | attr, drawLength)
-        else:
-          for i in range(drawLength):
-            self.addch(y + i, x, "|", attr)
+        self.win.vline(y, x, curses.ACS_VLINE | attr, drawLength)
       except:
         # in edge cases drawing could cause a _curses.error
         pass
@@ -696,13 +686,8 @@ class Panel():
     
     # draws box around the scroll bar
     self.vline(drawTop, drawLeft + 1, drawBottom - 1)
-    
-    if CONFIG["features.acsSupport"]:
-      self.addch(drawBottom, drawLeft + 1, curses.ACS_LRCORNER)
-      self.addch(drawBottom, drawLeft, curses.ACS_HLINE)
-    else:
-      self.addch(drawBottom, drawLeft + 1, "+")
-      self.addch(drawBottom, drawLeft, "-")
+    self.addch(drawBottom, drawLeft + 1, curses.ACS_LRCORNER)
+    self.addch(drawBottom, drawLeft, curses.ACS_HLINE)
   
   def _resetSubwindow(self):
     """
diff --git a/src/util/uiTools.py b/src/util/uiTools.py
index 51f5fee..bc1fefe 100644
--- a/src/util/uiTools.py
+++ b/src/util/uiTools.py
@@ -338,15 +338,9 @@ def drawBox(panel, top, left, width, height, attr=curses.A_NORMAL):
   panel.vline(top + 1, left + width - 1, height - 2, attr)
   
   # draws the corners
-  if CONFIG["features.acsSupport"]:
-    panel.addch(top, left, curses.ACS_ULCORNER, attr)
-    panel.addch(top, left + width - 1, curses.ACS_URCORNER, attr)
-    panel.addch(top + height - 1, left, curses.ACS_LLCORNER, attr)
-  else:
-    panel.addch(top, left, "+", attr)
-    panel.addch(top, left + width - 1, "+", attr)
-    panel.addch(top + height - 1, left, "+", attr)
-    panel.addch(top + height - 1, left + width - 1, "+", attr)
+  panel.addch(top, left, curses.ACS_ULCORNER, attr)
+  panel.addch(top, left + width - 1, curses.ACS_URCORNER, attr)
+  panel.addch(top + height - 1, left, curses.ACS_LLCORNER, attr)
 
 def isSelectionKey(key):
   """
@@ -714,6 +708,21 @@ def _initColors():
   
   global COLOR_ATTR_INITIALIZED, COLOR_IS_SUPPORTED
   if not COLOR_ATTR_INITIALIZED:
+    # hack to replace all ACS characters with '+' if ACS support has been
+    # manually disabled
+    if not CONFIG["features.acsSupport"]:
+      for item in curses.__dict__:
+        if item.startswith("ACS_"):
+          curses.__dict__[item] = ord('+')
+      
+      # replace a few common border pipes that are better rendered as '|' or
+      # '-' instead
+      
+      curses.ACS_SBSB = ord('|')
+      curses.ACS_VLINE = ord('|')
+      curses.ACS_BSBS = ord('-')
+      curses.ACS_HLINE = ord('-')
+    
     COLOR_ATTR_INITIALIZED = True
     COLOR_IS_SUPPORTED = False
     if not CONFIG["features.colorInterface"]: return





More information about the tor-commits mailing list