Skip to content

Commit ebfeb34

Browse files
authored
Merge pull request #368 from aude/sidebar-vi-keys
Add vi keys for sidebar
2 parents 5a94326 + 86443c7 commit ebfeb34

File tree

1 file changed

+83
-66
lines changed

1 file changed

+83
-66
lines changed

pudb/debugger.py

+83-66
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,12 @@
6767
o - show console/output screen
6868
m - open module
6969
70-
j/k - up/down
71-
Ctrl-u/d - page up/down
72-
h/l - scroll left/right
73-
g/G - start/end
70+
j/k - down/up
71+
l/h - right/left
72+
Ctrl-f/b - page down/up
73+
Ctrl-d/u - page down/up
74+
G/g - end/home
75+
7476
L - show (file/line) location / go to line
7577
/ - search
7678
,/. - search next/previous
@@ -80,7 +82,7 @@
8082
B - focus breakpoint list
8183
C - focus code
8284
83-
f1/?/H - show this help screen
85+
F1/? - show this help screen
8486
q - quit
8587
8688
Ctrl-c - when in continue mode, break back to PuDB
@@ -107,7 +109,7 @@
107109
Keys in variables list:
108110
\/enter/space - expand/collapse
109111
t/r/s/c - show type/repr/str/custom for this variable
110-
h - toggle highlighting
112+
H - toggle highlighting
111113
@ - toggle repetition at top
112114
* - cycle attribute visibility: public/_private/__dunder__
113115
m - toggle method visibility
@@ -123,6 +125,23 @@
123125
b - toggle breakpoint
124126
d - delete breakpoint
125127
e - edit breakpoint
128+
129+
Other keys:
130+
j/k - down/up
131+
l/h - right/left
132+
Ctrl-f/b - page down/up
133+
Ctrl-d/u - page down/up
134+
G/g - end/home
135+
136+
V - focus variables
137+
S - focus stack
138+
B - focus breakpoint list
139+
C - focus code
140+
141+
F1/? - show this help screen
142+
q - quit
143+
144+
Ctrl-l - redraw screen
126145
"""
127146

128147
HELP_LICENSE = r"""
@@ -663,6 +682,50 @@ def __init__(self, dbg, stdin, stdout, term_size):
663682

664683
# {{{ build ui
665684

685+
# {{{ key bindings
686+
687+
def move_up(w, size, key):
688+
w.keypress(size, "up")
689+
690+
def move_down(w, size, key):
691+
w.keypress(size, "down")
692+
693+
def move_left(w, size, key):
694+
w.keypress(size, "left")
695+
696+
def move_right(w, size, key):
697+
w.keypress(size, "right")
698+
699+
def page_up(w, size, key):
700+
w.keypress(size, "page up")
701+
702+
def page_down(w, size, key):
703+
w.keypress(size, "page down")
704+
705+
def move_home(w, size, key):
706+
w.keypress(size, "home")
707+
708+
def move_end(w, size, key):
709+
w.keypress(size, "end")
710+
711+
def add_vi_nav_keys(widget):
712+
widget.listen("k", move_up)
713+
widget.listen("j", move_down)
714+
widget.listen("h", move_left)
715+
widget.listen("l", move_right)
716+
widget.listen("ctrl b", page_up)
717+
widget.listen("ctrl f", page_down)
718+
widget.listen("ctrl u", page_up)
719+
widget.listen("ctrl d", page_down)
720+
widget.listen("g", move_home)
721+
widget.listen("G", move_end)
722+
723+
def add_help_keys(widget):
724+
widget.listen("f1", helpside)
725+
widget.listen("?", helpside)
726+
727+
# }}}
728+
666729
# {{{ left/source column
667730

668731
self.source = urwid.SimpleListWalker([])
@@ -741,6 +804,12 @@ def clear_cmdline_history(btn):
741804
])
742805
self.rhs_col_sigwrap = SignalWrap(self.rhs_col)
743806

807+
def helpside(w, size, key):
808+
help(HELP_HEADER + HELP_SIDE + HELP_MAIN + HELP_LICENSE)
809+
810+
add_vi_nav_keys(self.rhs_col_sigwrap)
811+
add_help_keys(self.rhs_col_sigwrap)
812+
744813
# }}}
745814

746815
self.columns = urwid.Columns(
@@ -797,7 +866,7 @@ def change_var_state(w, size, key):
797866
iinfo.display_type = "str"
798867
elif key == "c":
799868
iinfo.display_type = CONFIG["custom_stringifier"]
800-
elif key == "h":
869+
elif key == "H":
801870
iinfo.highlighted = not iinfo.highlighted
802871
elif key == "@":
803872
iinfo.repeated_at_top = not iinfo.repeated_at_top
@@ -938,16 +1007,13 @@ def insert_watch(w, size, key):
9381007
fvi.watches.append(we)
9391008
self.update_var_view()
9401009

941-
def helpside(w, size, key):
942-
help(HELP_HEADER + HELP_SIDE + HELP_MAIN + HELP_LICENSE)
943-
9441010
self.var_list.listen("\\", change_var_state)
9451011
self.var_list.listen(" ", change_var_state)
9461012
self.var_list.listen("t", change_var_state)
9471013
self.var_list.listen("r", change_var_state)
9481014
self.var_list.listen("s", change_var_state)
9491015
self.var_list.listen("c", change_var_state)
950-
self.var_list.listen("h", change_var_state)
1016+
self.var_list.listen("H", change_var_state)
9511017
self.var_list.listen("@", change_var_state)
9521018
self.var_list.listen("*", change_var_state)
9531019
self.var_list.listen("w", change_var_state)
@@ -960,14 +1026,10 @@ def helpside(w, size, key):
9601026
self.var_list.listen("[", partial(change_rhs_box, 'variables', 0, -1))
9611027
self.var_list.listen("]", partial(change_rhs_box, 'variables', 0, 1))
9621028

963-
self.var_list.listen("j", self.rhs_scroll_down)
964-
self.var_list.listen("k", self.rhs_scroll_up)
965-
self.var_list.listen("f1", helpside)
966-
self.var_list.listen("?", helpside)
967-
9681029
# }}}
9691030

9701031
# {{{ stack listeners
1032+
9711033
def examine_frame(w, size, key):
9721034
_, pos = self.stack_list._w.get_focus()
9731035
self.debugger.set_frame_index(self.translate_ui_stack_index(pos))
@@ -990,14 +1052,10 @@ def move_stack_down(w, size, key):
9901052
self.stack_list.listen("[", partial(change_rhs_box, 'stack', 1, -1))
9911053
self.stack_list.listen("]", partial(change_rhs_box, 'stack', 1, 1))
9921054

993-
self.stack_list.listen("j", self.rhs_scroll_down)
994-
self.stack_list.listen("k", self.rhs_scroll_up)
995-
self.stack_list.listen("f1", helpside)
996-
self.stack_list.listen("?", helpside)
997-
9981055
# }}}
9991056

10001057
# {{{ breakpoint listeners
1058+
10011059
def save_breakpoints(w, size, key):
10021060
self.debugger.save_breakpoints()
10031061

@@ -1127,10 +1185,6 @@ def show_breakpoint(w, size, key):
11271185
self.bp_list.listen("[", partial(change_rhs_box, 'breakpoints', 2, -1))
11281186
self.bp_list.listen("]", partial(change_rhs_box, 'breakpoints', 2, 1))
11291187

1130-
self.bp_list.listen("j", self.rhs_scroll_down)
1131-
self.bp_list.listen("k", self.rhs_scroll_up)
1132-
self.bp_list.listen("f1", helpside)
1133-
self.bp_list.listen("?", helpside)
11341188
# }}}
11351189

11361190
# {{{ source listeners
@@ -1201,12 +1255,6 @@ def run_to_cursor(w, size, key):
12011255
self.debugger.set_continue()
12021256
end()
12031257

1204-
def move_home(w, size, key):
1205-
self.source.set_focus(0)
1206-
1207-
def move_end(w, size, key):
1208-
self.source.set_focus(len(self.source)-1)
1209-
12101258
def go_to_line(w, size, key):
12111259
_, line = self.source.get_focus()
12121260

@@ -1228,18 +1276,6 @@ def go_to_line(w, size, key):
12281276
lineno = min(max(0, int(lineno_edit.value())-1), len(self.source)-1)
12291277
self.source.set_focus(lineno)
12301278

1231-
def move_down(w, size, key):
1232-
w.keypress(size, "down")
1233-
1234-
def move_up(w, size, key):
1235-
w.keypress(size, "up")
1236-
1237-
def page_down(w, size, key):
1238-
w.keypress(size, "page down")
1239-
1240-
def page_up(w, size, key):
1241-
w.keypress(size, "page up")
1242-
12431279
def scroll_left(w, size, key):
12441280
self.source_hscroll_start = max(
12451281
0,
@@ -1465,33 +1501,20 @@ def helpmain(w, size, key):
14651501
self.source_sigwrap.listen("c", cont)
14661502
self.source_sigwrap.listen("t", run_to_cursor)
14671503

1468-
self.source_sigwrap.listen("j", move_down)
1469-
self.source_sigwrap.listen("k", move_up)
1470-
self.source_sigwrap.listen("ctrl d", page_down)
1471-
self.source_sigwrap.listen("ctrl u", page_up)
1472-
self.source_sigwrap.listen("ctrl f", page_down)
1473-
self.source_sigwrap.listen("ctrl b", page_up)
1474-
self.source_sigwrap.listen("h", scroll_left)
1475-
self.source_sigwrap.listen("l", scroll_right)
1476-
1504+
self.source_sigwrap.listen("L", go_to_line)
14771505
self.source_sigwrap.listen("/", search)
14781506
self.source_sigwrap.listen(",", search_previous)
14791507
self.source_sigwrap.listen(".", search_next)
14801508

1481-
self.source_sigwrap.listen("home", move_home)
1482-
self.source_sigwrap.listen("end", move_end)
1483-
self.source_sigwrap.listen("g", move_home)
1484-
self.source_sigwrap.listen("G", move_end)
1485-
self.source_sigwrap.listen("L", go_to_line)
1486-
14871509
self.source_sigwrap.listen("b", toggle_breakpoint)
14881510
self.source_sigwrap.listen("m", pick_module)
14891511

14901512
self.source_sigwrap.listen("H", move_stack_top)
14911513
self.source_sigwrap.listen("u", move_stack_up)
14921514
self.source_sigwrap.listen("d", move_stack_down)
1493-
self.source_sigwrap.listen("f1", helpmain)
1494-
self.source_sigwrap.listen("?", helpmain)
1515+
1516+
add_vi_nav_keys(self.source_sigwrap)
1517+
add_help_keys(self.source_sigwrap)
14951518

14961519
# }}}
14971520

@@ -2007,12 +2030,6 @@ def set_cmdline_state(self, state_on):
20072030
self.cmdline_on = state_on
20082031
self.set_cmdline_size(None if state_on else 0)
20092032

2010-
def rhs_scroll_down(self, w, size, key):
2011-
w.keypress(size, "down")
2012-
2013-
def rhs_scroll_up(self, w, size, key):
2014-
w.keypress(size, "up")
2015-
20162033
def translate_ui_stack_index(self, index):
20172034
# note: self-inverse
20182035

0 commit comments

Comments
 (0)