urwid 4.2.3__tar.gz → 4.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {urwid-4.2.3/urwid.egg-info → urwid-4.2.4}/PKG-INFO +1 -1
- {urwid-4.2.3 → urwid-4.2.4}/urwid/version.py +3 -3
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/listbox.py +8 -1
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/text.py +22 -4
- {urwid-4.2.3 → urwid-4.2.4/urwid.egg-info}/PKG-INFO +1 -1
- urwid-4.2.4/urwid.egg-info/scm_version.json +8 -0
- urwid-4.2.3/urwid.egg-info/scm_version.json +0 -8
- {urwid-4.2.3 → urwid-4.2.4}/.devcontainer/dev.dockerfile +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.devcontainer/devcontainer.json +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.dockerignore +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.editorconfig +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/CODE_OF_CONDUCT.md +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/ISSUE_TEMPLATE/docs.md +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/dependabot.yml +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/labeler.yml +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/release.yml +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/workflows/documentation.yml +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/workflows/isolated_mypy.yml +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/workflows/isolated_pylint.yml +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/workflows/labels.yml +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/workflows/pythonpackage.yml +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.github/workflows/yamllint.yml +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.gitignore +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.pre-commit-config.yaml +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/.yamllint.yml +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/COPYING +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/MANIFEST.in +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/README.rst +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/SECURITY.md +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/classifiers.txt +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/conftest.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/mypy-requirements.txt +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/pylint-requirements.txt +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/pyproject.toml +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/pytest_requirements.txt +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/requirements.txt +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/setup.cfg +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/tox.ini +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/__init__.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/ansi_parser.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/canvas.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/command_map.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/__init__.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/_posix_raw_display.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/_raw_display_base.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/_web.css +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/_web.js +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/_win32.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/_win32_raw_display.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/common.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/curses.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/escape.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/html_fragment.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/lcd.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/raw.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/display/web.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/event_loop/__init__.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/event_loop/abstract_loop.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/event_loop/asyncio_loop.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/event_loop/glib_loop.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/event_loop/main_loop.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/event_loop/select_loop.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/event_loop/tornado_loop.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/event_loop/trio_loop.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/event_loop/twisted_loop.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/event_loop/zmq_loop.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/font.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/graphics.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/numedit.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/py.typed +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/signals.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/split_repr.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/str_util.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/text_layout.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/util.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/vterm.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/__init__.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/ansi_text.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/attr_map.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/attr_wrap.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/bar_graph.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/big_text.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/box_adapter.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/columns.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/constants.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/container.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/deque_walker.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/divider.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/edit.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/filler.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/frame.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/grid_flow.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/line_box.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/list_walker.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/monitored_deque.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/monitored_list.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/overlay.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/padding.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/pile.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/popup.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/progress_bar.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/scrollable.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/solid_fill.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/treetools.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/widget.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/widget_decoration.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid/widget/wimp.py +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid.egg-info/SOURCES.txt +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid.egg-info/dependency_links.txt +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid.egg-info/not-zip-safe +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid.egg-info/requires.txt +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid.egg-info/scm_file_list.json +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/urwid.egg-info/top_level.txt +0 -0
- {urwid-4.2.3 → urwid-4.2.4}/yamllint-requirements.txt +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '4.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (4, 2,
|
|
21
|
+
__version__ = version = '4.2.4'
|
|
22
|
+
__version_tuple__ = version_tuple = (4, 2, 4)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gb84a230c2'
|
|
@@ -900,7 +900,14 @@ class ListBox(Widget, WidgetContainerMixin[_K]):
|
|
|
900
900
|
raise TypeError(f"{type(self._body)}.set_focus is not implemented.")
|
|
901
901
|
|
|
902
902
|
# restore old focus temporarily
|
|
903
|
-
|
|
903
|
+
try:
|
|
904
|
+
self._body.set_focus(focus_pos)
|
|
905
|
+
except (IndexError, KeyError):
|
|
906
|
+
# A focus that did move means a "modified" signal callback raised, not that the position is gone.
|
|
907
|
+
if self._body.get_focus()[1] != position:
|
|
908
|
+
raise
|
|
909
|
+
# The body lost the old focus position after ListBox.set_focus().
|
|
910
|
+
# The walker still focuses the new position, and the placement below starts from it.
|
|
904
911
|
|
|
905
912
|
middle, top, bottom = self.calculate_visible((maxcol, maxrow), focus)
|
|
906
913
|
if middle is None or top is None or bottom is None:
|
|
@@ -316,6 +316,17 @@ class Text(Widget):
|
|
|
316
316
|
"""Return the number of screen columns and rows required for this Text widget.
|
|
317
317
|
|
|
318
318
|
The widget is expected to be displayed without wrapping or clipping, as a single element tuple.
|
|
319
|
+
With *maxcol* the size is taken from the layout at that width.
|
|
320
|
+
Without it the width is searched for::
|
|
321
|
+
|
|
322
|
+
maxcol = text width + 1, with StandardTextLayout tabs at their widest
|
|
323
|
+
|
|
|
324
|
+
v
|
|
325
|
+
lay out at maxcol --> layout has pack()? --no--> widest line, line count
|
|
326
|
+
^ |
|
|
327
|
+
| yes
|
|
328
|
+
| v
|
|
329
|
+
double maxcol <--no-- layout.pack() < maxcol? --yes--> pack() columns, line count
|
|
319
330
|
|
|
320
331
|
:param size: ``None`` or ``()`` for unlimited screen columns (like FIXED sizing)
|
|
321
332
|
or (*maxcol*,) to specify a maximum column size
|
|
@@ -354,12 +365,19 @@ class Text(Widget):
|
|
|
354
365
|
cols = self.layout.pack(maxcol, trans)
|
|
355
366
|
return (cols, len(trans))
|
|
356
367
|
|
|
357
|
-
|
|
368
|
+
layout = self.layout
|
|
369
|
+
# No line is wider than the whole text with every tab taking the widest gap between tab stops.
|
|
370
|
+
# A custom layout may still widen a line.
|
|
358
371
|
maxcol = calc_width(text, 0, len(text)) + 1
|
|
372
|
+
tabs = text.count("\t") if isinstance(text, str) else text.count(b"\t")
|
|
373
|
+
if tabs and isinstance(layout, text_layout.StandardTextLayout):
|
|
374
|
+
stops = (0, *layout.tab_stops)
|
|
375
|
+
widest_tab = max((layout.tab_stop_every, *(end - start for start, end in zip(stops, stops[1:]))))
|
|
376
|
+
maxcol += widest_tab * tabs
|
|
359
377
|
while True:
|
|
360
|
-
trans =
|
|
361
|
-
if not hasattr(
|
|
378
|
+
trans = layout.layout(text, maxcol, self._align_mode, self._wrap_mode)
|
|
379
|
+
if not hasattr(layout, "pack"):
|
|
362
380
|
return max(text_layout.line_width(line) for line in trans), len(trans)
|
|
363
|
-
if (cols :=
|
|
381
|
+
if (cols := layout.pack(maxcol, trans)) < maxcol:
|
|
364
382
|
return cols, len(trans)
|
|
365
383
|
maxcol *= 2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|