Add a shortcut to header editor to add standard User-Agent strings.

This commit is contained in:
Aldo Cortesi 2012-08-31 13:28:04 +12:00
parent 71ae158d7b
commit a33e90f081
3 changed files with 68 additions and 29 deletions

View File

@ -606,7 +606,7 @@ class ConsoleMaster(flow.FlowMaster):
def view_grideditor(self, ge):
self.body = ge
self.header = None
self.help_context = grideditor.help_context
self.help_context = ge.make_help()
self.statusbar = StatusBar(self, grideditor.footer)
self.make_view()

View File

@ -17,34 +17,9 @@ import copy, re, os
import urwid
import common
from .. import utils, filt
from netlib import http_uastrings
def _mkhelp():
text = []
keys = [
("A", "insert row before cursor"),
("a", "add row after cursor"),
("d", "delete row"),
("e", "spawn external editor on current field"),
("q", "return to flow view"),
("r", "read value from file"),
("R", "read unescaped value from file"),
("esc", "return to flow view/exit field edit mode"),
("tab", "next field"),
("enter", "edit field"),
]
text.extend(common.format_keyvals(keys, key="key", val="text", indent=4))
text.append(
urwid.Text(
[
"\n",
("text", " Values are displayed and edited as escaped Python-style strings.\n"),
]
)
)
return text
help_context = _mkhelp()
footer = [
('heading_key', "enter"), ":edit ",
('heading_key', "q"), ":back ",
@ -147,6 +122,10 @@ class GridWalker(urwid.ListWalker):
self.editor.show_empty_msg()
return urwid.ListWalker._modified(self)
def add_value(self, lst):
self.lst.append((lst[:], set([])))
self._modified()
def get_current_value(self):
if self.lst:
return self.lst[self.focus][0][self.focus_col]
@ -363,7 +342,7 @@ class GridEditor(common.WWrap):
self.walker._modified()
elif key in ["enter"]:
self.walker.start_edit()
else:
elif not self.handle_key(key):
return self.w.keypress(size, key)
def is_error(self, col, val):
@ -372,6 +351,35 @@ class GridEditor(common.WWrap):
"""
return False
def handle_key(self, key):
return False
def make_help(self):
text = []
text.append(urwid.Text([("text", "Editor control:\n")]))
keys = [
("A", "insert row before cursor"),
("a", "add row after cursor"),
("d", "delete row"),
("e", "spawn external editor on current field"),
("q", "return to flow view"),
("r", "read value from file"),
("R", "read unescaped value from file"),
("esc", "return to flow view/exit field edit mode"),
("tab", "next field"),
("enter", "edit field"),
]
text.extend(common.format_keyvals(keys, key="key", val="text", indent=4))
text.append(
urwid.Text(
[
"\n",
("text", "Values are escaped Python-style strings.\n"),
]
)
)
return text
class QueryEditor(GridEditor):
title = "Editing query"
@ -383,6 +391,37 @@ class HeaderEditor(GridEditor):
title = "Editing headers"
columns = 2
headings = ("Key", "Value")
def make_help(self):
h = GridEditor.make_help(self)
text = []
text.append(urwid.Text([("text", "Special keys:\n")]))
keys = [
("U", "add User-Agent header"),
]
text.extend(common.format_keyvals(keys, key="key", val="text", indent=4))
text.append(urwid.Text([("text", "\n")]))
text.extend(h)
return text
def set_user_agent(self, k):
ua = http_uastrings.get_by_shortcut(k)
if ua:
self.walker.add_value(
[
"User-Agent",
ua[2]
]
)
def handle_key(self, key):
if key == "U":
self.master.prompt_onekey(
"Add User-Agent header:",
[(i[0], i[1]) for i in http_uastrings.UASTRINGS],
self.set_user_agent,
)
return True
class URLEncodedFormEditor(GridEditor):

View File

@ -33,7 +33,7 @@ class HelpView(urwid.ListBox):
def helptext(self):
text = []
text.append(urwid.Text([("head", "Keys for this view:\n")]))
text.append(urwid.Text([("head", "This view:\n")]))
text.extend(self.help_context)
text.append(urwid.Text([("head", "\n\nMovement:\n")]))