Skip to content

Commit

Permalink
Unbreak focus setting after gh-603
Browse files Browse the repository at this point in the history
  • Loading branch information
inducer committed May 23, 2023
1 parent 7642bea commit 6739956
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 17 deletions.
34 changes: 17 additions & 17 deletions pudb/debugger.py
Original file line number Diff line number Diff line change
Expand Up @@ -582,9 +582,10 @@ def runcall(self, *args, **kwargs):

# UI stuff --------------------------------------------------------------------

from pudb.ui_tools import \
make_hotkey_markup, labelled_value, find_widget_in_container, \
SelectableText, SignalWrap, StackFrame, BreakpointFrame
from pudb.ui_tools import (
make_hotkey_markup, labelled_value,
focus_widget_in_container,
SelectableText, SignalWrap, StackFrame, BreakpointFrame)

from pudb.var_view import FrameVarInfoKeeper

Expand Down Expand Up @@ -1362,6 +1363,7 @@ def show_breakpoint(w, size, key):
bp = self._get_bp_list()[pos]
self.show_line(bp.line,
FileSourceCodeProvider(self.debugger, bp.file))
self.columns.focus_position = 0

self.bp_list.listen("enter", show_breakpoint)
self.bp_list.listen("d", handle_delete_breakpoint)
Expand Down Expand Up @@ -1506,7 +1508,7 @@ def go_to_line(w, size, key):
value = lineno_edit.value()
if value:
lineno = min(max(0, int(value)-1), len(self.source)-1)
self.source.focus = lineno
self.source_list.focus_position = lineno

def scroll_left(w, size, key):
self.source_hscroll_start = max(
Expand Down Expand Up @@ -1534,7 +1536,7 @@ def toggle_breakpoint(w, size, key):
self.source_code_provider.get_source_identifier()

if bp_source_identifier:
pos = self.source.focus
pos = self.source_list.focus_position
sline = self.source[pos]
lineno = pos+1

Expand Down Expand Up @@ -1916,20 +1918,20 @@ def cmdline_history_next(w, size, key):
cmdline_history_browse(1)

def toggle_cmdline_focus(w, size, key):
self.columns.focus_position = \
find_widget_in_container(self.columns, self.lhs_col)
focus_widget_in_container(self.columns, self.lhs_col)
if self.lhs_col.focus is self.cmdline_sigwrap:
if CONFIG["hide_cmdline_win"]:
self.set_cmdline_state(False)
self.lhs_col.focus = (
focus_widget_in_container(
self.lhs_col,
self.search_controller.search_AttrMap
if self.search_controller.search_box else
self.source_attr)
else:
if CONFIG["hide_cmdline_win"]:
self.set_cmdline_state(True)
self.cmdline_pile.focus = self.cmdline_edit_bar
self.lhs_col.focus = self.cmdline_sigwrap
focus_widget_in_container(self.cmdline_pile, self.cmdline_edit_bar)
focus_widget_in_container(self.lhs_col, self.cmdline_sigwrap)

self.cmdline_edit_sigwrap.listen("tab", cmdline_tab_complete)
self.cmdline_edit_sigwrap.listen("ctrl v", cmdline_append_newline)
Expand Down Expand Up @@ -2137,18 +2139,16 @@ def run_cmdline(w, size, key):
return run_external_cmdline(w, size, key)

def focus_code(w, size, key):
self.columns.focus_position = \
find_widget_in_container(self.columns, self.lhs_col)
self.lhs_col.focus = self.source_attr
focus_widget_in_container(self.columns, self.lhs_col)
focus_widget_in_container(self.lhs_col, self.source_attr)

class RHColumnFocuser:
def __init__(self, idx):
self.idx = idx

def __call__(subself, w, size, key): # noqa # pylint: disable=no-self-argument
self.columns.focus_position = \
find_widget_in_container(self.columns, self.rhs_col_sigwrap)
self.rhs_col.focus = subself.idx
focus_widget_in_container(self.columns, self.rhs_col_sigwrap)
self.rhs_col.focus_position = subself.idx

def quit(w, size, key):
with open(self.cmdline_history_path, "w") as history:
Expand Down Expand Up @@ -2826,7 +2826,7 @@ def show_line(self, line, source_code_provider=None):

line -= 1
if line >= 0 and line < len(self.source):
self.source_list.set_focus(line)
self.source_list.focus_position = line
if changed_file:
self.source_list.set_focus_valign("middle")

Expand Down
4 changes: 4 additions & 0 deletions pudb/ui_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@ def find_widget_in_container(container, widget) -> int:
raise ValueError(f"Widget not found in '{type(container).__name__}': {widget!r}")


def focus_widget_in_container(container, widget) -> None:
container.focus_position = find_widget_in_container(container, widget)


class SelectableText(urwid.Text):
def selectable(self):
return True
Expand Down

0 comments on commit 6739956

Please sign in to comment.