67
67
o - show console/output screen
68
68
m - open module
69
69
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
+
74
76
L - show (file/line) location / go to line
75
77
/ - search
76
78
,/. - search next/previous
80
82
B - focus breakpoint list
81
83
C - focus code
82
84
83
- f1/?/H - show this help screen
85
+ F1/? - show this help screen
84
86
q - quit
85
87
86
88
Ctrl-c - when in continue mode, break back to PuDB
107
109
Keys in variables list:
108
110
\/enter/space - expand/collapse
109
111
t/r/s/c - show type/repr/str/custom for this variable
110
- h - toggle highlighting
112
+ H - toggle highlighting
111
113
@ - toggle repetition at top
112
114
* - cycle attribute visibility: public/_private/__dunder__
113
115
m - toggle method visibility
123
125
b - toggle breakpoint
124
126
d - delete breakpoint
125
127
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
126
145
"""
127
146
128
147
HELP_LICENSE = r"""
@@ -663,6 +682,50 @@ def __init__(self, dbg, stdin, stdout, term_size):
663
682
664
683
# {{{ build ui
665
684
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
+
666
729
# {{{ left/source column
667
730
668
731
self .source = urwid .SimpleListWalker ([])
@@ -741,6 +804,12 @@ def clear_cmdline_history(btn):
741
804
])
742
805
self .rhs_col_sigwrap = SignalWrap (self .rhs_col )
743
806
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
+
744
813
# }}}
745
814
746
815
self .columns = urwid .Columns (
@@ -797,7 +866,7 @@ def change_var_state(w, size, key):
797
866
iinfo .display_type = "str"
798
867
elif key == "c" :
799
868
iinfo .display_type = CONFIG ["custom_stringifier" ]
800
- elif key == "h " :
869
+ elif key == "H " :
801
870
iinfo .highlighted = not iinfo .highlighted
802
871
elif key == "@" :
803
872
iinfo .repeated_at_top = not iinfo .repeated_at_top
@@ -938,16 +1007,13 @@ def insert_watch(w, size, key):
938
1007
fvi .watches .append (we )
939
1008
self .update_var_view ()
940
1009
941
- def helpside (w , size , key ):
942
- help (HELP_HEADER + HELP_SIDE + HELP_MAIN + HELP_LICENSE )
943
-
944
1010
self .var_list .listen ("\\ " , change_var_state )
945
1011
self .var_list .listen (" " , change_var_state )
946
1012
self .var_list .listen ("t" , change_var_state )
947
1013
self .var_list .listen ("r" , change_var_state )
948
1014
self .var_list .listen ("s" , change_var_state )
949
1015
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 )
951
1017
self .var_list .listen ("@" , change_var_state )
952
1018
self .var_list .listen ("*" , change_var_state )
953
1019
self .var_list .listen ("w" , change_var_state )
@@ -960,14 +1026,10 @@ def helpside(w, size, key):
960
1026
self .var_list .listen ("[" , partial (change_rhs_box , 'variables' , 0 , - 1 ))
961
1027
self .var_list .listen ("]" , partial (change_rhs_box , 'variables' , 0 , 1 ))
962
1028
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
-
968
1029
# }}}
969
1030
970
1031
# {{{ stack listeners
1032
+
971
1033
def examine_frame (w , size , key ):
972
1034
_ , pos = self .stack_list ._w .get_focus ()
973
1035
self .debugger .set_frame_index (self .translate_ui_stack_index (pos ))
@@ -990,14 +1052,10 @@ def move_stack_down(w, size, key):
990
1052
self .stack_list .listen ("[" , partial (change_rhs_box , 'stack' , 1 , - 1 ))
991
1053
self .stack_list .listen ("]" , partial (change_rhs_box , 'stack' , 1 , 1 ))
992
1054
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
-
998
1055
# }}}
999
1056
1000
1057
# {{{ breakpoint listeners
1058
+
1001
1059
def save_breakpoints (w , size , key ):
1002
1060
self .debugger .save_breakpoints ()
1003
1061
@@ -1127,10 +1185,6 @@ def show_breakpoint(w, size, key):
1127
1185
self .bp_list .listen ("[" , partial (change_rhs_box , 'breakpoints' , 2 , - 1 ))
1128
1186
self .bp_list .listen ("]" , partial (change_rhs_box , 'breakpoints' , 2 , 1 ))
1129
1187
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 )
1134
1188
# }}}
1135
1189
1136
1190
# {{{ source listeners
@@ -1201,12 +1255,6 @@ def run_to_cursor(w, size, key):
1201
1255
self .debugger .set_continue ()
1202
1256
end ()
1203
1257
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
-
1210
1258
def go_to_line (w , size , key ):
1211
1259
_ , line = self .source .get_focus ()
1212
1260
@@ -1228,18 +1276,6 @@ def go_to_line(w, size, key):
1228
1276
lineno = min (max (0 , int (lineno_edit .value ())- 1 ), len (self .source )- 1 )
1229
1277
self .source .set_focus (lineno )
1230
1278
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
-
1243
1279
def scroll_left (w , size , key ):
1244
1280
self .source_hscroll_start = max (
1245
1281
0 ,
@@ -1465,33 +1501,20 @@ def helpmain(w, size, key):
1465
1501
self .source_sigwrap .listen ("c" , cont )
1466
1502
self .source_sigwrap .listen ("t" , run_to_cursor )
1467
1503
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 )
1477
1505
self .source_sigwrap .listen ("/" , search )
1478
1506
self .source_sigwrap .listen ("," , search_previous )
1479
1507
self .source_sigwrap .listen ("." , search_next )
1480
1508
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
-
1487
1509
self .source_sigwrap .listen ("b" , toggle_breakpoint )
1488
1510
self .source_sigwrap .listen ("m" , pick_module )
1489
1511
1490
1512
self .source_sigwrap .listen ("H" , move_stack_top )
1491
1513
self .source_sigwrap .listen ("u" , move_stack_up )
1492
1514
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 )
1495
1518
1496
1519
# }}}
1497
1520
@@ -2007,12 +2030,6 @@ def set_cmdline_state(self, state_on):
2007
2030
self .cmdline_on = state_on
2008
2031
self .set_cmdline_size (None if state_on else 0 )
2009
2032
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
-
2016
2033
def translate_ui_stack_index (self , index ):
2017
2034
# note: self-inverse
2018
2035
0 commit comments