[tor-commits] [nyx/master] Replace nyx.curses.setup() with start()

atagar at torproject.org atagar at torproject.org
Tue Mar 15 17:05:10 UTC 2016


commit 731cfe8745b8dc631497974888c38b8bdadf9ae7
Author: Damian Johnson <atagar at torproject.org>
Date:   Tue Mar 15 09:53:07 2016 -0700

    Replace nyx.curses.setup() with start()
    
    No reason not to have this replace curses.wrapper() too. This way we can drop
    direct curses usage from our starter as well.
---
 nyx/controller.py |  2 --
 nyx/curses.py     | 41 +++++++++++++++++++++++++++--------------
 nyx/starter.py    |  5 +----
 3 files changed, 28 insertions(+), 20 deletions(-)

diff --git a/nyx/controller.py b/nyx/controller.py
index e3bb354..7b96134 100644
--- a/nyx/controller.py
+++ b/nyx/controller.py
@@ -410,8 +410,6 @@ def start_nyx(stdscr):
   for panel_impl in control.get_daemon_panels():
     panel_impl.start()
 
-  nyx.curses.setup(transparent_background = True, cursor = False)
-
   # logs the initialization time
 
   log.info('nyx started (initialization took %0.3f seconds)' % (time.time() - CONFIG['start_time']))
diff --git a/nyx/curses.py b/nyx/curses.py
index fa2a77c..a2d0dfa 100644
--- a/nyx/curses.py
+++ b/nyx/curses.py
@@ -9,7 +9,7 @@ if we want Windows support in the future too.
 ::
 
   curses_attr - curses encoded text attribute
-  setup - configures curses settings
+  start - initializes curses with the given function
 
   is_color_supported - checks if terminal supports color output
   get_color_override - provides color we override requests with
@@ -72,6 +72,8 @@ import stem.util.system
 
 from nyx import msg, log
 
+CURSES_SCREEN = None
+
 # Text colors and attributes. These are *very* commonly used so including
 # shorter aliases (so they can be referenced as just GREEN or BOLD).
 
@@ -152,25 +154,36 @@ def curses_attr(*attributes):
   return encoded
 
 
-def setup(transparent_background = False, cursor = True):
+def start(function, transparent_background = False, cursor = True):
   """
-  One time setup operations for configuring curses.
+  Starts a curses interface, delegating to the given function. The function
+  should accept a single argument for the curses screen.
 
+  :param funtion: function to invoke when curses starts
   :param bool transparent_background: allows background transparency
   :param bool cursor: makes cursor visible
   """
 
-  if transparent_background:
-    try:
-      curses.use_default_colors()
-    except curses.error:
-      pass
-
-  if not cursor:
-    try:
-      curses.curs_set(0)
-    except curses.error:
-      pass
+  def _wrapper(stdscr):
+    global CURSES_SCREEN
+
+    CURSES_SCREEN = stdscr
+
+    if transparent_background:
+      try:
+        curses.use_default_colors()
+      except curses.error:
+        pass
+
+    if not cursor:
+      try:
+        curses.curs_set(0)
+      except curses.error:
+        pass
+
+    function(stdscr)
+
+  curses.wrapper(_wrapper)
 
 
 def is_color_supported():
diff --git a/nyx/starter.py b/nyx/starter.py
index 6697e21..09f5057 100644
--- a/nyx/starter.py
+++ b/nyx/starter.py
@@ -4,9 +4,6 @@ information. This starts the application, parsing arguments and getting a Tor
 connection.
 """
 
-from __future__ import absolute_import
-
-import curses
 import locale
 import logging
 import os
@@ -86,7 +83,7 @@ def main(config):
   _set_process_name()
 
   try:
-    curses.wrapper(nyx.controller.start_nyx)
+    nyx.curses.start(nyx.controller.start_nyx, transparent_background = True, cursor = False)
   except UnboundLocalError as exc:
     if os.environ['TERM'] != 'xterm':
       print(msg('setup.unknown_term', term = os.environ['TERM']))





More information about the tor-commits mailing list