aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2012-08-25 12:54:34 +1200
committerAldo Cortesi <aldo@nullcube.com>2012-08-25 12:54:34 +1200
commitc6d1fe9e593ba1e4801a1a8126e833aae69fec5e (patch)
treea81914429c59f85c0068e1a88b3124e892ba510e
parent82893ffae20cf1cc0c24bb99615f589a10d2ce38 (diff)
downloadmitmproxy-c6d1fe9e593ba1e4801a1a8126e833aae69fec5e.tar.gz
mitmproxy-c6d1fe9e593ba1e4801a1a8126e833aae69fec5e.tar.bz2
mitmproxy-c6d1fe9e593ba1e4801a1a8126e833aae69fec5e.zip
Use Python-style escaped strings in GridEditor.
-rw-r--r--libmproxy/console/grideditor.py31
1 files changed, 17 insertions, 14 deletions
diff --git a/libmproxy/console/grideditor.py b/libmproxy/console/grideditor.py
index 0fc556a2..f34e6122 100644
--- a/libmproxy/console/grideditor.py
+++ b/libmproxy/console/grideditor.py
@@ -47,6 +47,7 @@ footer_editing = [
class SText(common.WWrap):
def __init__(self, txt, focused, error):
+ txt = txt.encode("string-escape")
w = urwid.Text(txt, wrap="any")
if focused:
if error:
@@ -69,6 +70,7 @@ class SText(common.WWrap):
class SEdit(common.WWrap):
def __init__(self, txt):
+ txt = txt.encode("string-escape")
w = urwid.Edit(edit_text=txt, wrap="any", multiline=True)
w = urwid.AttrWrap(w, "editfield")
common.WWrap.__init__(self, w)
@@ -106,17 +108,8 @@ class GridRow(common.WWrap):
w.set_focus_column(focused)
common.WWrap.__init__(self, w)
- def get_value(self):
- vals = []
- errors = set([])
- for i, f in enumerate(self.fields):
- v = f.get_text()
- vals.append(v)
- if self.editor.is_error(i, v):
- errors.add(i)
- elif self.editor.encode(v) is None:
- errors.add(i)
- return [vals, errors]
+ def get_edit_value(self):
+ return self.editing.get_text()
def keypress(self, s, k):
if self.editing:
@@ -150,9 +143,19 @@ class GridWalker(urwid.ListWalker):
return self.lst[self.focus][0][self.focus_col]
def set_current_value(self, val):
+ try:
+ val = val.decode("string-escape")
+ except ValueError:
+ self.editor.master.statusbar.message("Invalid Python-style string encoding.", 1000)
+ return
+ errors = self.lst[self.focus][1]
+ if self.editor.is_error(self.focus_col, val):
+ errors.add(self.focus_col)
+ elif self.editor.encode(val) is None:
+ errors.add(self.focus_col)
row = list(self.lst[self.focus][0])
row[self.focus_col] = val
- self.lst[self.focus] = [tuple(row), set([])]
+ self.lst[self.focus] = [tuple(row), errors]
def delete_focus(self):
if self.lst:
@@ -181,7 +184,7 @@ class GridWalker(urwid.ListWalker):
def stop_edit(self):
if self.editing:
self.editor.master.statusbar.update(footer)
- self.lst[self.focus] = self.editing.get_value()
+ self.set_current_value(self.editing.get_edit_value())
self.editing = False
self._modified()
@@ -344,7 +347,7 @@ class GridEditor(common.WWrap):
elif key == "e":
o = self.walker.get_current_value()
if o is not None:
- n = self.master.spawn_editor(o)
+ n = self.master.spawn_editor(o.encode("string-escape"))
n = utils.clean_hanging_newline(n)
self.walker.set_current_value(n)
self.walker._modified()