[tor-commits] [nyx/master] Support python interpreter commands

atagar at torproject.org atagar at torproject.org
Sun Jul 31 23:32:41 UTC 2016


commit 2e3d9899df317b59241d10c3a5a48fba0f6666ca
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Jul 31 16:16:37 2016 -0700

    Support python interpreter commands
    
    Addressed the main gotcha Sambuddha was running into in Stem...
    
      https://gitweb.torproject.org/stem.git/commit/?id=ae48d81
    
    Then just took a little more work to address multi-line python input.
---
 nyx/curses.py            |  2 +-
 nyx/panel/interpreter.py | 21 ++++++++++++++-------
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/nyx/curses.py b/nyx/curses.py
index b5819cc..27cfbfc 100644
--- a/nyx/curses.py
+++ b/nyx/curses.py
@@ -305,7 +305,7 @@ def str_input(x, y, initial_text = '', backlog = None, tab_completion = None):
     if tab_completion:
       handler = functools.partial(_handle_tab_completion, handler, tab_completion)
 
-    user_input = textbox.edit(lambda key: handler(textbox, key)).strip()
+    user_input = textbox.edit(lambda key: handler(textbox, key)).rstrip()
 
     try:
       curses.curs_set(0)  # hide cursor
diff --git a/nyx/panel/interpreter.py b/nyx/panel/interpreter.py
index ae929ca..4c63027 100644
--- a/nyx/panel/interpreter.py
+++ b/nyx/panel/interpreter.py
@@ -21,11 +21,12 @@ from nyx.curses import GREEN, MAGENTA, CYAN, BOLD, HIGHLIGHT
 USER_INPUT_BACKLOG_LIMIT = 100
 
 PROMPT = ('>>> ', (GREEN, BOLD))
+MULTILINE_PROMPT = ('... ', ())
 PROMPT_USAGE = ('to use this panel press enter', (CYAN, BOLD))
 
 
-def _format_prompt_input(user_input):
-  line = [PROMPT]
+def _format_prompt_input(user_input, prompt = PROMPT):
+  line = [prompt]
   cmd, arg = user_input.split(' ', 1) if ' ' in user_input else (user_input, '')
 
   if cmd.startswith('/'):
@@ -56,7 +57,6 @@ class InterpreterPanel(nyx.panel.Panel):
     controller = tor_controller()
     self._autocompleter = stem.interpreter.autocomplete.Autocompleter(controller)
     self._interpreter = stem.interpreter.commands.ControlInterpreter(controller)
-    self._interpreter._run_python_commands = False
 
   def key_handlers(self):
     def _scroll(key):
@@ -75,7 +75,7 @@ class InterpreterPanel(nyx.panel.Panel):
         self.get_top() + max(1, min(len(self._lines) + 1, self.get_height() - 1)),
         backlog = self._user_inputs,
         tab_completion = self._autocompleter.matches
-      ).strip()
+      )
 
     def _start_input_mode():
       self._is_input_mode = True
@@ -83,11 +83,12 @@ class InterpreterPanel(nyx.panel.Panel):
       while self._is_input_mode:
         user_input = _prompt_input()
 
-        if not user_input:
+        if not user_input and not self._interpreter.is_multiline_context:
           self._is_input_mode = False
           break
 
         self._user_inputs.append(user_input)
+        prompt = MULTILINE_PROMPT if self._interpreter.is_multiline_context else PROMPT
 
         if len(self._user_inputs) > USER_INPUT_BACKLOG_LIMIT:
           self._user_inputs = self._user_inputs[-USER_INPUT_BACKLOG_LIMIT:]
@@ -98,7 +99,7 @@ class InterpreterPanel(nyx.panel.Panel):
           self._is_input_mode = False
           break
 
-        self._lines.append(_format_prompt_input(user_input))
+        self._lines.append(_format_prompt_input(user_input, prompt))
 
         if response:
           for line in response.split('\n'):
@@ -118,7 +119,13 @@ class InterpreterPanel(nyx.panel.Panel):
       subwindow.addstr(0, 0, 'Control Interpreter:', HIGHLIGHT)
 
     scroll = self._scroller.location(len(self._lines) + 1, subwindow.height - 1)
-    prompt = [PROMPT] if self._is_input_mode else [PROMPT, PROMPT_USAGE]
+
+    if self._interpreter.is_multiline_context:
+      prompt = [MULTILINE_PROMPT]
+    elif self._is_input_mode:
+      prompt = [PROMPT]
+    else:
+      prompt = [PROMPT, PROMPT_USAGE]
 
     if len(self._lines) > subwindow.height - 2:
       self._x_offset = 2





More information about the tor-commits mailing list