From 220c298d338202b7cdd5f9bb9ce509e7c581e878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asbj=C3=B8rn=20Apeland?= Date: Tue, 26 Nov 2019 15:40:43 +0100 Subject: [PATCH 1/3] Add vi keys for sidebar --- pudb/debugger.py | 139 ++++++++++++++++++++++++++++++----------------- 1 file changed, 88 insertions(+), 51 deletions(-) diff --git a/pudb/debugger.py b/pudb/debugger.py index 3a227e1b..7a5dbf2c 100644 --- a/pudb/debugger.py +++ b/pudb/debugger.py @@ -67,10 +67,12 @@ o - show console/output screen m - open module - j/k - up/down - Ctrl-u/d - page up/down - h/l - scroll left/right - g/G - start/end + j/k - down/up + l/h - right/left + Ctrl-f/b - page down/up + Ctrl-d/u - page down/up + G/g - end/home + L - show (file/line) location / go to line / - search ,/. - search next/previous @@ -107,7 +109,7 @@ Keys in variables list: \/enter/space - expand/collapse t/r/s/c - show type/repr/str/custom for this variable - h - toggle highlighting + H - toggle highlighting @ - toggle repetition at top * - cycle attribute visibility: public/_private/__dunder__ m - toggle method visibility @@ -123,6 +125,13 @@ b - toggle breakpoint d - delete breakpoint e - edit breakpoint + +Other keys: + j/k - down/up + l/h - right/left + Ctrl-f/b - page down/up + Ctrl-d/u - page down/up + G/g - end/home """ HELP_LICENSE = r""" @@ -663,6 +672,34 @@ def __init__(self, dbg, stdin, stdout, term_size): # {{{ build ui + # {{{ key bindings + + def move_up(w, size, key): + w.keypress(size, "up") + + def move_down(w, size, key): + w.keypress(size, "down") + + def move_left(w, size, key): + w.keypress(size, "left") + + def move_right(w, size, key): + w.keypress(size, "right") + + def page_up(w, size, key): + w.keypress(size, "page up") + + def page_down(w, size, key): + w.keypress(size, "page down") + + def move_home(w, size, key): + w.keypress(size, "home") + + def move_end(w, size, key): + w.keypress(size, "end") + + # }}} + # {{{ left/source column self.source = urwid.SimpleListWalker([]) @@ -741,6 +778,9 @@ def clear_cmdline_history(btn): ]) self.rhs_col_sigwrap = SignalWrap(self.rhs_col) + def helpside(w, size, key): + help(HELP_HEADER + HELP_SIDE + HELP_MAIN + HELP_LICENSE) + # }}} self.columns = urwid.Columns( @@ -797,7 +837,7 @@ def change_var_state(w, size, key): iinfo.display_type = "str" elif key == "c": iinfo.display_type = CONFIG["custom_stringifier"] - elif key == "h": + elif key == "H": iinfo.highlighted = not iinfo.highlighted elif key == "@": iinfo.repeated_at_top = not iinfo.repeated_at_top @@ -938,16 +978,13 @@ def insert_watch(w, size, key): fvi.watches.append(we) self.update_var_view() - def helpside(w, size, key): - help(HELP_HEADER + HELP_SIDE + HELP_MAIN + HELP_LICENSE) - self.var_list.listen("\\", change_var_state) self.var_list.listen(" ", change_var_state) self.var_list.listen("t", change_var_state) self.var_list.listen("r", change_var_state) self.var_list.listen("s", change_var_state) self.var_list.listen("c", change_var_state) - self.var_list.listen("h", change_var_state) + self.var_list.listen("H", change_var_state) self.var_list.listen("@", change_var_state) self.var_list.listen("*", change_var_state) self.var_list.listen("w", change_var_state) @@ -960,8 +997,17 @@ def helpside(w, size, key): self.var_list.listen("[", partial(change_rhs_box, 'variables', 0, -1)) self.var_list.listen("]", partial(change_rhs_box, 'variables', 0, 1)) - self.var_list.listen("j", self.rhs_scroll_down) - self.var_list.listen("k", self.rhs_scroll_up) + self.var_list.listen("k", move_up) + self.var_list.listen("j", move_down) + self.var_list.listen("h", move_left) + self.var_list.listen("l", move_right) + self.var_list.listen("ctrl b", page_up) + self.var_list.listen("ctrl f", page_down) + self.var_list.listen("ctrl u", page_up) + self.var_list.listen("ctrl d", page_down) + self.var_list.listen("g", move_home) + self.var_list.listen("G", move_end) + self.var_list.listen("f1", helpside) self.var_list.listen("?", helpside) @@ -990,8 +1036,17 @@ def move_stack_down(w, size, key): self.stack_list.listen("[", partial(change_rhs_box, 'stack', 1, -1)) self.stack_list.listen("]", partial(change_rhs_box, 'stack', 1, 1)) - self.stack_list.listen("j", self.rhs_scroll_down) - self.stack_list.listen("k", self.rhs_scroll_up) + self.stack_list.listen("k", move_up) + self.stack_list.listen("j", move_down) + self.stack_list.listen("h", move_left) + self.stack_list.listen("l", move_right) + self.stack_list.listen("ctrl b", page_up) + self.stack_list.listen("ctrl f", page_down) + self.stack_list.listen("ctrl u", page_up) + self.stack_list.listen("ctrl d", page_down) + self.stack_list.listen("g", move_home) + self.stack_list.listen("G", move_end) + self.stack_list.listen("f1", helpside) self.stack_list.listen("?", helpside) @@ -1127,8 +1182,17 @@ def show_breakpoint(w, size, key): self.bp_list.listen("[", partial(change_rhs_box, 'breakpoints', 2, -1)) self.bp_list.listen("]", partial(change_rhs_box, 'breakpoints', 2, 1)) - self.bp_list.listen("j", self.rhs_scroll_down) - self.bp_list.listen("k", self.rhs_scroll_up) + self.bp_list.listen("k", move_up) + self.bp_list.listen("j", move_down) + self.bp_list.listen("h", move_left) + self.bp_list.listen("l", move_right) + self.bp_list.listen("ctrl b", page_up) + self.bp_list.listen("ctrl f", page_down) + self.bp_list.listen("ctrl u", page_up) + self.bp_list.listen("ctrl d", page_down) + self.bp_list.listen("g", move_home) + self.bp_list.listen("G", move_end) + self.bp_list.listen("f1", helpside) self.bp_list.listen("?", helpside) # }}} @@ -1201,12 +1265,6 @@ def run_to_cursor(w, size, key): self.debugger.set_continue() end() - def move_home(w, size, key): - self.source.set_focus(0) - - def move_end(w, size, key): - self.source.set_focus(len(self.source)-1) - def go_to_line(w, size, key): _, line = self.source.get_focus() @@ -1228,18 +1286,6 @@ def go_to_line(w, size, key): lineno = min(max(0, int(lineno_edit.value())-1), len(self.source)-1) self.source.set_focus(lineno) - def move_down(w, size, key): - w.keypress(size, "down") - - def move_up(w, size, key): - w.keypress(size, "up") - - def page_down(w, size, key): - w.keypress(size, "page down") - - def page_up(w, size, key): - w.keypress(size, "page up") - def scroll_left(w, size, key): self.source_hscroll_start = max( 0, @@ -1465,25 +1511,22 @@ def helpmain(w, size, key): self.source_sigwrap.listen("c", cont) self.source_sigwrap.listen("t", run_to_cursor) - self.source_sigwrap.listen("j", move_down) self.source_sigwrap.listen("k", move_up) - self.source_sigwrap.listen("ctrl d", page_down) - self.source_sigwrap.listen("ctrl u", page_up) - self.source_sigwrap.listen("ctrl f", page_down) - self.source_sigwrap.listen("ctrl b", page_up) + self.source_sigwrap.listen("j", move_down) self.source_sigwrap.listen("h", scroll_left) self.source_sigwrap.listen("l", scroll_right) + self.source_sigwrap.listen("ctrl b", page_up) + self.source_sigwrap.listen("ctrl f", page_down) + self.source_sigwrap.listen("ctrl u", page_up) + self.source_sigwrap.listen("ctrl d", page_down) + self.source_sigwrap.listen("g", move_home) + self.source_sigwrap.listen("G", move_end) + self.source_sigwrap.listen("L", go_to_line) self.source_sigwrap.listen("/", search) self.source_sigwrap.listen(",", search_previous) self.source_sigwrap.listen(".", search_next) - self.source_sigwrap.listen("home", move_home) - self.source_sigwrap.listen("end", move_end) - self.source_sigwrap.listen("g", move_home) - self.source_sigwrap.listen("G", move_end) - self.source_sigwrap.listen("L", go_to_line) - self.source_sigwrap.listen("b", toggle_breakpoint) self.source_sigwrap.listen("m", pick_module) @@ -2007,12 +2050,6 @@ def set_cmdline_state(self, state_on): self.cmdline_on = state_on self.set_cmdline_size(None if state_on else 0) - def rhs_scroll_down(self, w, size, key): - w.keypress(size, "down") - - def rhs_scroll_up(self, w, size, key): - w.keypress(size, "up") - def translate_ui_stack_index(self, index): # note: self-inverse From 91a7cf4d8942a88cb2ec7c9a805a1b5c88fd8e37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asbj=C3=B8rn=20Apeland?= Date: Tue, 26 Nov 2019 16:17:40 +0100 Subject: [PATCH 2/3] Document more keys in sidebar --- pudb/debugger.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pudb/debugger.py b/pudb/debugger.py index 7a5dbf2c..40ed1375 100644 --- a/pudb/debugger.py +++ b/pudb/debugger.py @@ -82,7 +82,7 @@ B - focus breakpoint list C - focus code - f1/?/H - show this help screen + F1/? - show this help screen q - quit Ctrl-c - when in continue mode, break back to PuDB @@ -132,6 +132,16 @@ Ctrl-f/b - page down/up Ctrl-d/u - page down/up G/g - end/home + + V - focus variables + S - focus stack + B - focus breakpoint list + C - focus code + + F1/? - show this help screen + q - quit + + Ctrl-l - redraw screen """ HELP_LICENSE = r""" From 86443c7818c0f67dfc70b4aa45eb609f485e256f Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 8 Jan 2020 11:03:23 -0600 Subject: [PATCH 3/3] Clean up vi key handling, remove duplication --- pudb/debugger.py | 78 +++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 54 deletions(-) diff --git a/pudb/debugger.py b/pudb/debugger.py index 40ed1375..3582c230 100644 --- a/pudb/debugger.py +++ b/pudb/debugger.py @@ -708,6 +708,22 @@ def move_home(w, size, key): def move_end(w, size, key): w.keypress(size, "end") + def add_vi_nav_keys(widget): + widget.listen("k", move_up) + widget.listen("j", move_down) + widget.listen("h", move_left) + widget.listen("l", move_right) + widget.listen("ctrl b", page_up) + widget.listen("ctrl f", page_down) + widget.listen("ctrl u", page_up) + widget.listen("ctrl d", page_down) + widget.listen("g", move_home) + widget.listen("G", move_end) + + def add_help_keys(widget): + widget.listen("f1", helpside) + widget.listen("?", helpside) + # }}} # {{{ left/source column @@ -791,6 +807,9 @@ def clear_cmdline_history(btn): def helpside(w, size, key): help(HELP_HEADER + HELP_SIDE + HELP_MAIN + HELP_LICENSE) + add_vi_nav_keys(self.rhs_col_sigwrap) + add_help_keys(self.rhs_col_sigwrap) + # }}} self.columns = urwid.Columns( @@ -1007,23 +1026,10 @@ def insert_watch(w, size, key): self.var_list.listen("[", partial(change_rhs_box, 'variables', 0, -1)) self.var_list.listen("]", partial(change_rhs_box, 'variables', 0, 1)) - self.var_list.listen("k", move_up) - self.var_list.listen("j", move_down) - self.var_list.listen("h", move_left) - self.var_list.listen("l", move_right) - self.var_list.listen("ctrl b", page_up) - self.var_list.listen("ctrl f", page_down) - self.var_list.listen("ctrl u", page_up) - self.var_list.listen("ctrl d", page_down) - self.var_list.listen("g", move_home) - self.var_list.listen("G", move_end) - - self.var_list.listen("f1", helpside) - self.var_list.listen("?", helpside) - # }}} # {{{ stack listeners + def examine_frame(w, size, key): _, pos = self.stack_list._w.get_focus() self.debugger.set_frame_index(self.translate_ui_stack_index(pos)) @@ -1046,23 +1052,10 @@ def move_stack_down(w, size, key): self.stack_list.listen("[", partial(change_rhs_box, 'stack', 1, -1)) self.stack_list.listen("]", partial(change_rhs_box, 'stack', 1, 1)) - self.stack_list.listen("k", move_up) - self.stack_list.listen("j", move_down) - self.stack_list.listen("h", move_left) - self.stack_list.listen("l", move_right) - self.stack_list.listen("ctrl b", page_up) - self.stack_list.listen("ctrl f", page_down) - self.stack_list.listen("ctrl u", page_up) - self.stack_list.listen("ctrl d", page_down) - self.stack_list.listen("g", move_home) - self.stack_list.listen("G", move_end) - - self.stack_list.listen("f1", helpside) - self.stack_list.listen("?", helpside) - # }}} # {{{ breakpoint listeners + def save_breakpoints(w, size, key): self.debugger.save_breakpoints() @@ -1192,19 +1185,6 @@ def show_breakpoint(w, size, key): self.bp_list.listen("[", partial(change_rhs_box, 'breakpoints', 2, -1)) self.bp_list.listen("]", partial(change_rhs_box, 'breakpoints', 2, 1)) - self.bp_list.listen("k", move_up) - self.bp_list.listen("j", move_down) - self.bp_list.listen("h", move_left) - self.bp_list.listen("l", move_right) - self.bp_list.listen("ctrl b", page_up) - self.bp_list.listen("ctrl f", page_down) - self.bp_list.listen("ctrl u", page_up) - self.bp_list.listen("ctrl d", page_down) - self.bp_list.listen("g", move_home) - self.bp_list.listen("G", move_end) - - self.bp_list.listen("f1", helpside) - self.bp_list.listen("?", helpside) # }}} # {{{ source listeners @@ -1521,17 +1501,6 @@ def helpmain(w, size, key): self.source_sigwrap.listen("c", cont) self.source_sigwrap.listen("t", run_to_cursor) - self.source_sigwrap.listen("k", move_up) - self.source_sigwrap.listen("j", move_down) - self.source_sigwrap.listen("h", scroll_left) - self.source_sigwrap.listen("l", scroll_right) - self.source_sigwrap.listen("ctrl b", page_up) - self.source_sigwrap.listen("ctrl f", page_down) - self.source_sigwrap.listen("ctrl u", page_up) - self.source_sigwrap.listen("ctrl d", page_down) - self.source_sigwrap.listen("g", move_home) - self.source_sigwrap.listen("G", move_end) - self.source_sigwrap.listen("L", go_to_line) self.source_sigwrap.listen("/", search) self.source_sigwrap.listen(",", search_previous) @@ -1543,8 +1512,9 @@ def helpmain(w, size, key): self.source_sigwrap.listen("H", move_stack_top) self.source_sigwrap.listen("u", move_stack_up) self.source_sigwrap.listen("d", move_stack_down) - self.source_sigwrap.listen("f1", helpmain) - self.source_sigwrap.listen("?", helpmain) + + add_vi_nav_keys(self.source_sigwrap) + add_help_keys(self.source_sigwrap) # }}}