[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [arm/release] Interpretor option for grepping results
commit 48779cf4125c71df255039655468c629d4b5623e
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Tue Aug 30 20:36:38 2011 -0700
Interpretor option for grepping results
Adding a '/grep <regex>' option that greps the prior output, bolding matches
and deduplicationg the results.
---
src/util/torInterpretor.py | 60 ++++++++++++++++++++++++++++++++-----------
1 files changed, 44 insertions(+), 16 deletions(-)
diff --git a/src/util/torInterpretor.py b/src/util/torInterpretor.py
index 0be511d..0db95c3 100644
--- a/src/util/torInterpretor.py
+++ b/src/util/torInterpretor.py
@@ -4,6 +4,7 @@ adds usability features like IRC style interpretor commands and, when ran
directly, history and tab completion.
"""
+import re
import readline
import version
@@ -39,7 +40,7 @@ RESET = CSI % "0"
# limits used for cropping
BACKLOG_LIMIT = 100
-CONTENT_LIMIT = 2000
+CONTENT_LIMIT = 20000
class InterpretorClosed(Exception):
"""
@@ -193,7 +194,7 @@ class ControlInterpretor:
def __init__(self):
self.backlog = [] # prior requests the user has made
self.contents = [] # (msg, format list) tuples for what's been displayed
- self.lastWritePath = "/tmp/torInterpretor_output"
+ self.writePath = "/tmp/torInterpretor_output" # last location we've saved to
def getBacklog(self):
"""
@@ -263,34 +264,61 @@ class ControlInterpretor:
# - unrecognized controller command, this has the possability of confusing
# arm...
- if input.startswith("/"):
+ if " " in input: cmd, arg = input.split(" ", 1)
+ else: cmd, arg = input, ""
+
+ if cmd.startswith("/"):
# interpretor command
inputEntry.append((input, INPUT_INTERPRETOR_FORMAT))
- if input == "/quit":
+ if cmd == "/quit":
raise InterpretorClosed()
- elif input.startswith("/write"):
- if " " in input: writePath = input.split(" ", 1)[1]
- else: writePath = self.lastWritePath
+ elif cmd == "/write":
+ if arg: self.writePath = arg
try:
- self.writeContents(writePath)
- outputEntry.append(("Interpretor backlog written to: %s" % writePath, OUTPUT_FORMAT))
+ self.writeContents(self.writePath)
+ outputEntry.append(("Interpretor backlog written to: %s" % self.writePath, OUTPUT_FORMAT))
except IOError, exc:
- outputEntry.append(("Unable to write to '%s': %s" % (writePath, exc), ERROR_FORMAT))
+ outputEntry.append(("Unable to write to '%s': %s" % (self.writePath, exc), ERROR_FORMAT))
+ elif cmd == "/find":
+ argMatcher = None
+
+ if not arg:
+ outputEntry.append(("Nothing to match against", ERROR_FORMAT))
+ else:
+ try: argMatcher = re.compile("(%s)" % arg)
+ except: outputEntry.append(("Unable to compile regex '%s'" % arg, ERROR_FORMAT))
- self.lastWritePath = writePath
+ if argMatcher:
+ printedLines = []
+
+ for line in self.contents:
+ lineText = "".join([msg for msg, _ in line])
+
+ # skip if this was user input or a duplicate
+ if lineText.startswith(PROMPT[0]) or lineText in printedLines:
+ continue
+
+ match = argMatcher.search(lineText)
+ if match:
+ # outputs the matching line, with the match itself bolded
+ outputEntry.append((lineText[:match.start()], OUTPUT_FORMAT))
+ outputEntry.append((match.group(), (OUTPUT_FORMAT + (Attr.BOLD, ))))
+ outputEntry.append((lineText[match.end():] + "\n", OUTPUT_FORMAT))
+ printedLines.append(lineText)
else:
outputEntry.append(("Not yet implemented...", ERROR_FORMAT)) # TODO: implement
+ # appends a newline so all interpretor commands have a blank before the prompt
+ if outputEntry:
+ lastEntry = outputEntry[-1]
+ outputEntry[-1] = (lastEntry[0].rstrip() + "\n", lastEntry[1])
+
# TODO: add /help option
else:
# controller command
- if " " in input: cmd, arg = input.split(" ", 1)
- else: cmd, arg = input, ""
-
- # makes commands uppercase to match the spec
- cmd = cmd.upper()
+ cmd = cmd.upper() # makes commands uppercase to match the spec
inputEntry.append((cmd + " ", INPUT_CMD_FORMAT))
if arg: inputEntry.append((arg, INPUT_ARG_FORMAT))
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits