urwid 2.6.10__tar.gz → 2.6.12__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-2.6.10 → urwid-2.6.12}/PKG-INFO +1 -1
- urwid-2.6.12/black-requirements.txt +1 -0
- urwid-2.6.12/docs/examples/bigtext.py.xdotool +3 -0
- urwid-2.6.12/docs/examples/bigtext1.png +0 -0
- urwid-2.6.12/docs/examples/bigtext2.png +0 -0
- urwid-2.6.12/docs/examples/bigtext3.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/browse.py +1 -1
- urwid-2.6.12/docs/examples/edit1.png +0 -0
- urwid-2.6.12/docs/examples/edit2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/graph.py +26 -4
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/real_browse.py +1 -4
- urwid-2.6.12/docs/examples/tour.py.xdotool +2 -0
- urwid-2.6.12/docs/examples/tour1.png +0 -0
- urwid-2.6.12/docs/examples/tour2.png +0 -0
- urwid-2.6.12/docs/tutorial/hmenu1.png +0 -0
- urwid-2.6.12/docs/tutorial/hmenu2.png +0 -0
- urwid-2.6.12/docs/tutorial/hmenu3.png +0 -0
- urwid-2.6.12/docs/tutorial/hmenu4.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/browse.py +1 -4
- {urwid-2.6.10 → urwid-2.6.12}/examples/calc.py +1 -3
- {urwid-2.6.10 → urwid-2.6.12}/examples/dialog.py +2 -2
- {urwid-2.6.10 → urwid-2.6.12}/examples/graph.py +26 -4
- urwid-2.6.12/ruff-requirements.txt +1 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_scrollable.py +196 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/canvas.py +1 -1
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/_raw_display_base.py +1 -3
- {urwid-2.6.10 → urwid-2.6.12}/urwid/version.py +2 -2
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/bar_graph.py +2 -2
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/monitored_list.py +65 -19
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/padding.py +4 -2
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/popup.py +16 -13
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/scrollable.py +13 -7
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/widget.py +1 -1
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/widget_decoration.py +4 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid.egg-info/PKG-INFO +1 -1
- urwid-2.6.10/black-requirements.txt +0 -1
- urwid-2.6.10/docs/examples/bigtext.py.xdotool +0 -3
- urwid-2.6.10/docs/examples/bigtext1.png +0 -0
- urwid-2.6.10/docs/examples/bigtext2.png +0 -0
- urwid-2.6.10/docs/examples/bigtext3.png +0 -0
- urwid-2.6.10/docs/examples/edit1.png +0 -0
- urwid-2.6.10/docs/examples/edit2.png +0 -0
- urwid-2.6.10/docs/examples/tour.py.xdotool +0 -2
- urwid-2.6.10/docs/examples/tour1.png +0 -0
- urwid-2.6.10/docs/examples/tour2.png +0 -0
- urwid-2.6.10/docs/tutorial/hmenu1.png +0 -0
- urwid-2.6.10/docs/tutorial/hmenu2.png +0 -0
- urwid-2.6.10/docs/tutorial/hmenu3.png +0 -0
- urwid-2.6.10/docs/tutorial/hmenu4.png +0 -0
- urwid-2.6.10/ruff-requirements.txt +0 -1
- {urwid-2.6.10 → urwid-2.6.12}/.coveralls.yml +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.devcontainer/dev.dockerfile +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.devcontainer/devcontainer.json +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.dockerignore +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.editorconfig +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/CODE_OF_CONDUCT.md +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/ISSUE_TEMPLATE/docs.md +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/dependabot.yml +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/labeler.yml +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/release.yml +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/workflows/documentation.yml +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/workflows/isolated_static_check.yml +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/workflows/labels.yml +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/workflows/pythonpackage.yml +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.github/workflows/yamllint.yml +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.gitignore +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.pre-commit-config.yaml +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/.yamllint.yml +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/COPYING +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/MANIFEST.in +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/README.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/classifiers.txt +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/Makefile +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/changelog.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/conf.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/bigtext.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/browse.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/browse1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/browse2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/edit.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/edit.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/edit_text.txt +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/graph.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/graph1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/graph2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/index.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/palette_test.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/palette_test.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/palette_test1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/palette_test2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/pop_up.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/pop_up.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/pop_up1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/pop_up2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/real_edit.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/subproc.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/subproc.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/subproc1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/subproc2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/subproc2.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/examples/tour.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/index.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/bright_combinations.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/bright_combinations.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/bright_combinations1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/canvascache.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/displayattributes.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/displaymodules.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/encodings.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/images/display_modules.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/images/introduction.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/images/urwid_widgets.svgz +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/images/urwid_widgets_1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/images/urwid_widgets_1.xcf +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/images/urwid_widgets_2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/images/urwid_widgets_2.xcf +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/images/widget_layout.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/index.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/mainloop.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/overview.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/safe_combinations.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/safe_combinations.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/safe_combinations1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/textlayout.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/userinput.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/wanat.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/wanat_multi.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/wcur1.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/wcur2.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/widgets.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/wmod.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/manual/wsel.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/attrspec.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/canvas.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/command_map.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/constants.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/deprecated.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/display_modules.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/exceptions.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/global_settings.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/index.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/list_walkers.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/main_loop.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/meta.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/signals.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/text_layout.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/reference/widget.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tools/compile_pngs.sh +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tools/screenshots.sh +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tools/static/.placeholder +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tools/templates/indexcontent.html +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tools/templates/indexsidebar.html +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tools/templates/localtoc.html +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/adventure.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/adventure.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/adventure1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/adventure2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/adventure3.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/adventure4.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/cmenu.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/cmenu.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/cmenu1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/cmenu2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/cmenu3.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/cmenu4.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/highcolors.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/highcolors.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/highcolors1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/hmenu.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/hmenu.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/index.rst +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/input.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/input.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/input1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/input2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/input3.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/input4.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/input5.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/menu25.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/minimal.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/minimal.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/minimal1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/multiple.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/multiple.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/multiple1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/multiple2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/multiple3.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/multiple4.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/qa.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/qa.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/qa1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/qa2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/qa3.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/sig.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/sig.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/sig1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/sig2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/sig3.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/sig4.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/smenu.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/smenu.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/smenu1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/smenu2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/smenu3.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/urwid_attr.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/urwid_attr.py.xdotool +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/urwid_attr1.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/urwid_attr2.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/urwid_attr3.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/tutorial/urwid_attr4.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/docs/urwid-logo.png +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/asyncio_socket_server.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/bigtext.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/edit.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/fib.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/input_test.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/lcd_cf635.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/palette_test.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/pop_up.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/subproc.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/subproc2.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/terminal.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/tour.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/treesample.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/twisted_serve_ssh.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/examples/twisted_serve_ssh.tac +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/isort-requirements.txt +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/pylint-requirements.txt +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/pyproject.toml +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/requirements.txt +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/setup.cfg +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/setup.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/test_requirements.txt +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/__init__.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_canvas.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_columns.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_container.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_doctests.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_escapes.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_event_loops.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_filler.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_floatedit.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_font.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_frame.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_graphics.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_grid_flow.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_line_box.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_listbox.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_main_loop.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_moved_imports.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_overlay.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_padding.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_pile.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_raw_display.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_signals.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_str_util.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_text_layout.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_tree.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_util.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_vterm.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/test_widget.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tests/util.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/tox.ini +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/__init__.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/command_map.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/container.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/decoration.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/__init__.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/_posix_raw_display.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/_web.css +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/_web.js +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/_win32.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/_win32_raw_display.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/common.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/curses.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/escape.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/html_fragment.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/lcd.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/raw.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/display/web.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/event_loop/__init__.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/event_loop/abstract_loop.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/event_loop/asyncio_loop.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/event_loop/glib_loop.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/event_loop/main_loop.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/event_loop/select_loop.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/event_loop/tornado_loop.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/event_loop/trio_loop.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/event_loop/twisted_loop.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/event_loop/zmq_loop.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/font.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/graphics.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/numedit.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/signals.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/split_repr.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/str_util.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/text_layout.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/util.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/vterm.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/__init__.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/attr_map.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/attr_wrap.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/big_text.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/box_adapter.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/columns.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/constants.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/container.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/divider.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/edit.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/filler.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/frame.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/grid_flow.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/line_box.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/listbox.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/overlay.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/pile.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/progress_bar.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/solid_fill.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/text.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/treetools.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/widget/wimp.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid/wimp.py +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid.egg-info/SOURCES.txt +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid.egg-info/dependency_links.txt +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid.egg-info/not-zip-safe +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid.egg-info/requires.txt +0 -0
- {urwid-2.6.10 → urwid-2.6.12}/urwid.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
black==24.4.2
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -209,8 +209,30 @@ class GraphView(urwid.WidgetWrap):
|
|
|
209
209
|
bg = urwid.AttrMap(urwid.SolidFill("▒"), "screen edge")
|
|
210
210
|
shadow = urwid.AttrMap(urwid.SolidFill(" "), "main shadow")
|
|
211
211
|
|
|
212
|
-
bg = urwid.Overlay(
|
|
213
|
-
|
|
212
|
+
bg = urwid.Overlay(
|
|
213
|
+
shadow,
|
|
214
|
+
bg,
|
|
215
|
+
align=urwid.LEFT,
|
|
216
|
+
width=urwid.RELATIVE_100,
|
|
217
|
+
valign=urwid.TOP,
|
|
218
|
+
height=urwid.RELATIVE_100,
|
|
219
|
+
left=3,
|
|
220
|
+
right=1,
|
|
221
|
+
top=2,
|
|
222
|
+
bottom=1,
|
|
223
|
+
)
|
|
224
|
+
w = urwid.Overlay(
|
|
225
|
+
w,
|
|
226
|
+
bg,
|
|
227
|
+
align=urwid.LEFT,
|
|
228
|
+
width=urwid.RELATIVE_100,
|
|
229
|
+
valign=urwid.TOP,
|
|
230
|
+
height=urwid.RELATIVE_100,
|
|
231
|
+
left=2,
|
|
232
|
+
right=3,
|
|
233
|
+
top=1,
|
|
234
|
+
bottom=2,
|
|
235
|
+
)
|
|
214
236
|
return w
|
|
215
237
|
|
|
216
238
|
def bar_graph(self, smooth=False):
|
|
@@ -288,10 +310,10 @@ class GraphView(urwid.WidgetWrap):
|
|
|
288
310
|
def main_window(self):
|
|
289
311
|
self.graph = self.bar_graph()
|
|
290
312
|
self.graph_wrap = urwid.WidgetWrap(self.graph)
|
|
291
|
-
vline = urwid.AttrMap(urwid.SolidFill("
|
|
313
|
+
vline = urwid.AttrMap(urwid.SolidFill("│"), "line")
|
|
292
314
|
c = self.graph_controls()
|
|
293
315
|
w = urwid.Columns([(urwid.WEIGHT, 2, self.graph_wrap), (1, vline), c], dividechars=1, focus_column=2)
|
|
294
|
-
w = urwid.Padding(w,
|
|
316
|
+
w = urwid.Padding(w, urwid.LEFT, left=1)
|
|
295
317
|
w = urwid.AttrMap(w, "body")
|
|
296
318
|
w = urwid.LineBox(w)
|
|
297
319
|
w = urwid.AttrMap(w, "line")
|
|
@@ -346,10 +346,7 @@ def starts_expanded(name: str) -> bool:
|
|
|
346
346
|
if len(path_elements) > len(_initial_cwd):
|
|
347
347
|
return False
|
|
348
348
|
|
|
349
|
-
|
|
350
|
-
return False
|
|
351
|
-
|
|
352
|
-
return True
|
|
349
|
+
return path_elements == _initial_cwd[: len(path_elements)]
|
|
353
350
|
|
|
354
351
|
|
|
355
352
|
def escape_filename_sh(name: str) -> str:
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -346,10 +346,7 @@ def starts_expanded(name: str) -> bool:
|
|
|
346
346
|
if len(path_elements) > len(_initial_cwd):
|
|
347
347
|
return False
|
|
348
348
|
|
|
349
|
-
|
|
350
|
-
return False
|
|
351
|
-
|
|
352
|
-
return True
|
|
349
|
+
return path_elements == _initial_cwd[: len(path_elements)]
|
|
353
350
|
|
|
354
351
|
|
|
355
352
|
def escape_filename_sh(name: str) -> str:
|
|
@@ -137,9 +137,7 @@ class Cell:
|
|
|
137
137
|
return False
|
|
138
138
|
if next_cell is None:
|
|
139
139
|
return True
|
|
140
|
-
|
|
141
|
-
return False
|
|
142
|
-
return True
|
|
140
|
+
return not (self.op == next_cell.op == "+")
|
|
143
141
|
|
|
144
142
|
def setup_edit(self) -> None:
|
|
145
143
|
"""Create the standard edit widget for this cell."""
|
|
@@ -68,8 +68,8 @@ class DialogDisplay:
|
|
|
68
68
|
w = self.frame
|
|
69
69
|
|
|
70
70
|
# pad area around listbox
|
|
71
|
-
w = urwid.Padding(w,
|
|
72
|
-
w = urwid.Filler(w,
|
|
71
|
+
w = urwid.Padding(w, urwid.LEFT, left=2, right=2)
|
|
72
|
+
w = urwid.Filler(w, urwid.TOP, urwid.RELATIVE_100, top=1, bottom=1)
|
|
73
73
|
w = urwid.AttrMap(w, "body")
|
|
74
74
|
|
|
75
75
|
# "shadow" effect
|
|
@@ -209,8 +209,30 @@ class GraphView(urwid.WidgetWrap):
|
|
|
209
209
|
bg = urwid.AttrMap(urwid.SolidFill("▒"), "screen edge")
|
|
210
210
|
shadow = urwid.AttrMap(urwid.SolidFill(" "), "main shadow")
|
|
211
211
|
|
|
212
|
-
bg = urwid.Overlay(
|
|
213
|
-
|
|
212
|
+
bg = urwid.Overlay(
|
|
213
|
+
shadow,
|
|
214
|
+
bg,
|
|
215
|
+
align=urwid.LEFT,
|
|
216
|
+
width=urwid.RELATIVE_100,
|
|
217
|
+
valign=urwid.TOP,
|
|
218
|
+
height=urwid.RELATIVE_100,
|
|
219
|
+
left=3,
|
|
220
|
+
right=1,
|
|
221
|
+
top=2,
|
|
222
|
+
bottom=1,
|
|
223
|
+
)
|
|
224
|
+
w = urwid.Overlay(
|
|
225
|
+
w,
|
|
226
|
+
bg,
|
|
227
|
+
align=urwid.LEFT,
|
|
228
|
+
width=urwid.RELATIVE_100,
|
|
229
|
+
valign=urwid.TOP,
|
|
230
|
+
height=urwid.RELATIVE_100,
|
|
231
|
+
left=2,
|
|
232
|
+
right=3,
|
|
233
|
+
top=1,
|
|
234
|
+
bottom=2,
|
|
235
|
+
)
|
|
214
236
|
return w
|
|
215
237
|
|
|
216
238
|
def bar_graph(self, smooth=False):
|
|
@@ -288,10 +310,10 @@ class GraphView(urwid.WidgetWrap):
|
|
|
288
310
|
def main_window(self):
|
|
289
311
|
self.graph = self.bar_graph()
|
|
290
312
|
self.graph_wrap = urwid.WidgetWrap(self.graph)
|
|
291
|
-
vline = urwid.AttrMap(urwid.SolidFill("
|
|
313
|
+
vline = urwid.AttrMap(urwid.SolidFill("│"), "line")
|
|
292
314
|
c = self.graph_controls()
|
|
293
315
|
w = urwid.Columns([(urwid.WEIGHT, 2, self.graph_wrap), (1, vline), c], dividechars=1, focus_column=2)
|
|
294
|
-
w = urwid.Padding(w,
|
|
316
|
+
w = urwid.Padding(w, urwid.LEFT, left=1)
|
|
295
317
|
w = urwid.AttrMap(w, "body")
|
|
296
318
|
w = urwid.LineBox(w)
|
|
297
319
|
w = urwid.AttrMap(w, "line")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruff==0.4.4
|
|
@@ -291,6 +291,202 @@ class TestScrollBarListBox(unittest.TestCase):
|
|
|
291
291
|
|
|
292
292
|
self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
|
|
293
293
|
|
|
294
|
+
|
|
295
|
+
def trivial_AttrMap(widget):
|
|
296
|
+
return urwid.AttrMap(widget, {})
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
class TestScrollableAttrMap(unittest.TestCase):
|
|
300
|
+
def test_basic(self):
|
|
301
|
+
"""Test basic init and scroll."""
|
|
302
|
+
long_content = urwid.Text(LGPL_HEADER)
|
|
303
|
+
reduced_size = (80, 5)
|
|
304
|
+
content_size = long_content.pack()
|
|
305
|
+
|
|
306
|
+
widget = urwid.Scrollable(trivial_AttrMap(long_content))
|
|
307
|
+
self.assertEqual(frozenset((urwid.BOX,)), widget.sizing())
|
|
308
|
+
|
|
309
|
+
cropped_content_canvas = urwid.CompositeCanvas(long_content.render((reduced_size[0],)))
|
|
310
|
+
cropped_content_canvas.trim_end(content_size[1] - reduced_size[1])
|
|
311
|
+
top_decoded = cropped_content_canvas.decoded_text
|
|
312
|
+
|
|
313
|
+
self.assertEqual(
|
|
314
|
+
top_decoded,
|
|
315
|
+
widget.render(reduced_size).decoded_text,
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
for key_1, key_2 in (("down", "up"), ("page down", "page up"), ("end", "home")):
|
|
319
|
+
widget.keypress(reduced_size, key_1)
|
|
320
|
+
|
|
321
|
+
self.assertNotEqual(top_decoded, widget.render(reduced_size).decoded_text)
|
|
322
|
+
|
|
323
|
+
widget.keypress(reduced_size, key_2)
|
|
324
|
+
|
|
325
|
+
self.assertEqual(top_decoded, widget.render(reduced_size).decoded_text)
|
|
326
|
+
|
|
327
|
+
def test_negative(self):
|
|
328
|
+
with self.assertRaises(ValueError):
|
|
329
|
+
urwid.Scrollable(trivial_AttrMap(urwid.SolidFill(" ")))
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
class TestScrollBarAttrMap(unittest.TestCase):
|
|
333
|
+
def test_basic(self):
|
|
334
|
+
"""Test basic init and scroll.
|
|
335
|
+
|
|
336
|
+
Unlike `Scrollable`, `ScrollBar` can be also scrolled with a mouse wheel.
|
|
337
|
+
"""
|
|
338
|
+
|
|
339
|
+
long_content = urwid.Text(LGPL_HEADER)
|
|
340
|
+
reduced_size = (40, 5)
|
|
341
|
+
widget = urwid.ScrollBar(urwid.Scrollable(trivial_AttrMap(long_content)))
|
|
342
|
+
|
|
343
|
+
self.assertEqual(frozenset((urwid.BOX,)), widget.sizing())
|
|
344
|
+
|
|
345
|
+
top_position_rendered = (
|
|
346
|
+
" █",
|
|
347
|
+
"Copyright (C) <year> <name of author> ",
|
|
348
|
+
" ",
|
|
349
|
+
"This library is free software; you can ",
|
|
350
|
+
"redistribute it and/or ",
|
|
351
|
+
)
|
|
352
|
+
pos_1_down_rendered = (
|
|
353
|
+
"Copyright (C) <year> <name of author> ",
|
|
354
|
+
" █",
|
|
355
|
+
"This library is free software; you can ",
|
|
356
|
+
"redistribute it and/or ",
|
|
357
|
+
"modify it under the terms of the GNU ",
|
|
358
|
+
)
|
|
359
|
+
|
|
360
|
+
self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
|
|
361
|
+
|
|
362
|
+
widget.keypress(reduced_size, "down")
|
|
363
|
+
|
|
364
|
+
self.assertEqual(pos_1_down_rendered, widget.render(reduced_size).decoded_text)
|
|
365
|
+
|
|
366
|
+
widget.keypress(reduced_size, "up")
|
|
367
|
+
|
|
368
|
+
self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
|
|
369
|
+
|
|
370
|
+
widget.keypress(reduced_size, "page down")
|
|
371
|
+
|
|
372
|
+
self.assertEqual(
|
|
373
|
+
(
|
|
374
|
+
"redistribute it and/or ",
|
|
375
|
+
"modify it under the terms of the GNU █",
|
|
376
|
+
"Lesser General Public ",
|
|
377
|
+
"License as published by the Free ",
|
|
378
|
+
"Software Foundation; either ",
|
|
379
|
+
),
|
|
380
|
+
widget.render(reduced_size).decoded_text,
|
|
381
|
+
)
|
|
382
|
+
|
|
383
|
+
widget.keypress(reduced_size, "page up")
|
|
384
|
+
|
|
385
|
+
self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
|
|
386
|
+
|
|
387
|
+
widget.keypress(reduced_size, "end")
|
|
388
|
+
|
|
389
|
+
self.assertEqual(
|
|
390
|
+
(
|
|
391
|
+
"not, write to the Free Software ",
|
|
392
|
+
"Foundation, Inc., 51 Franklin Street, ",
|
|
393
|
+
"Fifth Floor, Boston, MA 02110-1301 ",
|
|
394
|
+
"USA ",
|
|
395
|
+
" █",
|
|
396
|
+
),
|
|
397
|
+
widget.render(reduced_size).decoded_text,
|
|
398
|
+
)
|
|
399
|
+
|
|
400
|
+
widget.keypress(reduced_size, "home")
|
|
401
|
+
|
|
402
|
+
self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
|
|
403
|
+
|
|
404
|
+
widget.mouse_event(reduced_size, "mouse press", 5, 1, 1, False)
|
|
405
|
+
|
|
406
|
+
self.assertEqual(pos_1_down_rendered, widget.render(reduced_size).decoded_text)
|
|
407
|
+
|
|
408
|
+
widget.mouse_event(reduced_size, "mouse press", 4, 1, 1, False)
|
|
409
|
+
|
|
410
|
+
self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
class TestScrollBarListBoxAttrMap(unittest.TestCase):
|
|
414
|
+
def test_relative_non_selectable(self):
|
|
415
|
+
widget = urwid.ScrollBar(
|
|
416
|
+
trivial_AttrMap(
|
|
417
|
+
urwid.ListBox(urwid.SimpleListWalker(urwid.Text(line) for line in LGPL_HEADER.splitlines()))
|
|
418
|
+
)
|
|
419
|
+
)
|
|
420
|
+
|
|
421
|
+
reduced_size = (40, 5)
|
|
422
|
+
|
|
423
|
+
top_position_rendered = (
|
|
424
|
+
" █",
|
|
425
|
+
"Copyright (C) <year> <name of author> ",
|
|
426
|
+
" ",
|
|
427
|
+
"This library is free software; you can ",
|
|
428
|
+
"redistribute it and/or ",
|
|
429
|
+
)
|
|
430
|
+
pos_1_down_rendered = (
|
|
431
|
+
"Copyright (C) <year> <name of author> ",
|
|
432
|
+
" █",
|
|
433
|
+
"This library is free software; you can ",
|
|
434
|
+
"redistribute it and/or ",
|
|
435
|
+
"modify it under the terms of the GNU ",
|
|
436
|
+
)
|
|
437
|
+
|
|
438
|
+
self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
|
|
439
|
+
|
|
440
|
+
widget.keypress(reduced_size, "down")
|
|
441
|
+
|
|
442
|
+
self.assertEqual(pos_1_down_rendered, widget.render(reduced_size).decoded_text)
|
|
443
|
+
|
|
444
|
+
widget.keypress(reduced_size, "up")
|
|
445
|
+
|
|
446
|
+
self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
|
|
447
|
+
|
|
448
|
+
widget.keypress(reduced_size, "page down")
|
|
449
|
+
|
|
450
|
+
self.assertEqual(
|
|
451
|
+
(
|
|
452
|
+
"modify it under the terms of the GNU ",
|
|
453
|
+
"Lesser General Public █",
|
|
454
|
+
"License as published by the Free ",
|
|
455
|
+
"Software Foundation; either ",
|
|
456
|
+
"version 2.1 of the License, or (at your ",
|
|
457
|
+
),
|
|
458
|
+
widget.render(reduced_size).decoded_text,
|
|
459
|
+
)
|
|
460
|
+
|
|
461
|
+
widget.keypress(reduced_size, "page up")
|
|
462
|
+
|
|
463
|
+
self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
|
|
464
|
+
|
|
465
|
+
widget.keypress(reduced_size, "end")
|
|
466
|
+
|
|
467
|
+
self.assertEqual(
|
|
468
|
+
(
|
|
469
|
+
"License along with this library; if ",
|
|
470
|
+
"not, write to the Free Software ",
|
|
471
|
+
"Foundation, Inc., 51 Franklin Street, ",
|
|
472
|
+
"Fifth Floor, Boston, MA 02110-1301 ",
|
|
473
|
+
"USA █",
|
|
474
|
+
),
|
|
475
|
+
widget.render(reduced_size).decoded_text,
|
|
476
|
+
)
|
|
477
|
+
|
|
478
|
+
widget.keypress(reduced_size, "home")
|
|
479
|
+
|
|
480
|
+
self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
|
|
481
|
+
|
|
482
|
+
widget.mouse_event(reduced_size, "mouse press", 5, 1, 1, False)
|
|
483
|
+
|
|
484
|
+
self.assertEqual(pos_1_down_rendered, widget.render(reduced_size).decoded_text)
|
|
485
|
+
|
|
486
|
+
widget.mouse_event(reduced_size, "mouse press", 4, 1, 1, False)
|
|
487
|
+
|
|
488
|
+
self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
|
|
489
|
+
|
|
294
490
|
def test_large_non_selectable(self):
|
|
295
491
|
top = urwid.Text("\n".join(string.ascii_letters))
|
|
296
492
|
bottom = urwid.Text("\n".join(string.digits))
|
|
@@ -935,7 +935,7 @@ def shard_body_row(sbody):
|
|
|
935
935
|
else: # noqa: PLR5501 # pylint: disable=else-if-used # readability
|
|
936
936
|
# need to skip this unchanged canvas
|
|
937
937
|
if row and isinstance(row[-1], int):
|
|
938
|
-
row[-1]
|
|
938
|
+
row[-1] += cview[2]
|
|
939
939
|
else:
|
|
940
940
|
row.append(cview[2])
|
|
941
941
|
|
|
@@ -544,9 +544,7 @@ class Screen(BaseScreen, RealTerminal):
|
|
|
544
544
|
def is_blank_row(row: list[tuple[object, Literal["0", "U"] | None], bytes]) -> bool:
|
|
545
545
|
if len(row) > 1:
|
|
546
546
|
return False
|
|
547
|
-
|
|
548
|
-
return False
|
|
549
|
-
return True
|
|
547
|
+
return not row[0][2].strip()
|
|
550
548
|
|
|
551
549
|
def attr_to_escape(a: AttrSpec | str | None) -> str:
|
|
552
550
|
if a in self._pal_escape:
|
|
@@ -380,7 +380,7 @@ class BarGraph(Widget, metaclass=BarGraphMeta):
|
|
|
380
380
|
row_combine_last(count, row)
|
|
381
381
|
y_count -= count # noqa: PLW2901
|
|
382
382
|
r += count
|
|
383
|
-
r
|
|
383
|
+
r %= 8
|
|
384
384
|
if not y_count:
|
|
385
385
|
continue
|
|
386
386
|
if r != 0:
|
|
@@ -508,7 +508,7 @@ def calculate_bargraph_display(bardata, top: float, bar_widths: list[int], maxro
|
|
|
508
508
|
|
|
509
509
|
for r in rows:
|
|
510
510
|
if r is None:
|
|
511
|
-
y_count
|
|
511
|
+
y_count += 1
|
|
512
512
|
continue
|
|
513
513
|
if y_count:
|
|
514
514
|
rowsets.append((y_count, last))
|
|
@@ -24,9 +24,9 @@ import typing
|
|
|
24
24
|
import warnings
|
|
25
25
|
|
|
26
26
|
if typing.TYPE_CHECKING:
|
|
27
|
-
from collections.abc import Callable, Collection, Iterator
|
|
27
|
+
from collections.abc import Callable, Collection, Iterable, Iterator
|
|
28
28
|
|
|
29
|
-
from typing_extensions import Concatenate, ParamSpec
|
|
29
|
+
from typing_extensions import Concatenate, ParamSpec, Self
|
|
30
30
|
|
|
31
31
|
ArgSpec = ParamSpec("ArgSpec")
|
|
32
32
|
Ret = typing.TypeVar("Ret")
|
|
@@ -88,23 +88,69 @@ class MonitoredList(typing.List[_T], typing.Generic[_T]):
|
|
|
88
88
|
for item in self:
|
|
89
89
|
yield None, item
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
91
|
+
@_call_modified
|
|
92
|
+
def __add__(self, __value: list[_T]) -> Self:
|
|
93
|
+
return super().__add__(__value)
|
|
94
|
+
|
|
95
|
+
@_call_modified
|
|
96
|
+
def __delitem__(self, __key: typing.SupportsIndex | slice) -> None:
|
|
97
|
+
super().__delitem__(__key)
|
|
98
|
+
|
|
99
|
+
@_call_modified
|
|
100
|
+
def __iadd__(self, __value: Iterable[_T]) -> Self:
|
|
101
|
+
return super().__iadd__(__value)
|
|
102
|
+
|
|
103
|
+
@_call_modified
|
|
104
|
+
def __rmul__(self, __value: typing.SupportsIndex) -> Self:
|
|
105
|
+
return super().__rmul__(__value)
|
|
106
|
+
|
|
107
|
+
@_call_modified
|
|
108
|
+
def __imul__(self, __value: typing.SupportsIndex) -> Self:
|
|
109
|
+
return super().__imul__(__value)
|
|
110
|
+
|
|
111
|
+
@typing.overload
|
|
112
|
+
@_call_modified
|
|
113
|
+
def __setitem__(self, __key: typing.SupportsIndex, __value: _T) -> None: ...
|
|
114
|
+
|
|
115
|
+
@typing.overload
|
|
116
|
+
@_call_modified
|
|
117
|
+
def __setitem__(self, __key: slice, __value: Iterable[_T]) -> None: ...
|
|
118
|
+
|
|
119
|
+
@_call_modified
|
|
120
|
+
def __setitem__(self, __key: typing.SupportsIndex | slice, __value: _T | Iterable[_T]) -> None:
|
|
121
|
+
super().__setitem__(__key, __value)
|
|
122
|
+
|
|
123
|
+
@_call_modified
|
|
124
|
+
def append(self, __object: _T) -> None:
|
|
125
|
+
super().append(__object)
|
|
126
|
+
|
|
127
|
+
@_call_modified
|
|
128
|
+
def extend(self, __iterable: Iterable[_T]) -> None:
|
|
129
|
+
super().extend(__iterable)
|
|
130
|
+
|
|
131
|
+
@_call_modified
|
|
132
|
+
def pop(self, __index: typing.SupportsIndex = -1) -> _T:
|
|
133
|
+
return super().pop(__index)
|
|
134
|
+
|
|
135
|
+
@_call_modified
|
|
136
|
+
def insert(self, __index: typing.SupportsIndex, __object: _T) -> None:
|
|
137
|
+
super().insert(__index, __object)
|
|
138
|
+
|
|
139
|
+
@_call_modified
|
|
140
|
+
def remove(self, __value: _T) -> None:
|
|
141
|
+
super().remove(__value)
|
|
142
|
+
|
|
143
|
+
@_call_modified
|
|
144
|
+
def reverse(self) -> None:
|
|
145
|
+
super().reverse()
|
|
146
|
+
|
|
147
|
+
@_call_modified
|
|
148
|
+
def sort(self, *, key: Callable[[_T], typing.Any] | None = None, reverse: bool = False) -> None:
|
|
149
|
+
super().sort(key=key, reverse=reverse)
|
|
150
|
+
|
|
151
|
+
@_call_modified
|
|
152
|
+
def clear(self) -> None:
|
|
153
|
+
super().clear()
|
|
108
154
|
|
|
109
155
|
|
|
110
156
|
class MonitoredFocusList(MonitoredList[_T], typing.Generic[_T]):
|
|
@@ -40,12 +40,14 @@ class Padding(WidgetDecoration[WrappedWidget], typing.Generic[WrappedWidget]):
|
|
|
40
40
|
self,
|
|
41
41
|
w: WrappedWidget,
|
|
42
42
|
align: (
|
|
43
|
-
Literal["left", "center", "right"]
|
|
43
|
+
Literal["left", "center", "right"]
|
|
44
|
+
| Align
|
|
45
|
+
| tuple[Literal["relative", WHSettings.RELATIVE, "fixed left", "fixed right"], int]
|
|
44
46
|
) = Align.LEFT,
|
|
45
47
|
width: (
|
|
46
48
|
int
|
|
47
49
|
| Literal["pack", "clip", WHSettings.PACK, WHSettings.CLIP]
|
|
48
|
-
| tuple[Literal["relative", WHSettings.RELATIVE], int]
|
|
50
|
+
| tuple[Literal["relative", WHSettings.RELATIVE, "fixed left", "fixed right"], int]
|
|
49
51
|
) = RELATIVE_100,
|
|
50
52
|
min_width: int | None = None,
|
|
51
53
|
left: int = 0,
|
|
@@ -24,7 +24,7 @@ import typing
|
|
|
24
24
|
|
|
25
25
|
from urwid.canvas import CompositeCanvas
|
|
26
26
|
|
|
27
|
-
from .constants import Sizing
|
|
27
|
+
from .constants import Align, Sizing, VAlign
|
|
28
28
|
from .overlay import Overlay
|
|
29
29
|
from .widget import delegate_to_widget_mixin
|
|
30
30
|
from .widget_decoration import WidgetDecoration
|
|
@@ -86,8 +86,7 @@ class PopUpLauncher(delegate_to_widget_mixin("_original_widget"), WidgetDecorati
|
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
class PopUpTarget(WidgetDecoration[WrappedWidget]):
|
|
89
|
-
# FIXME: this whole class is a terrible hack and must be fixed
|
|
90
|
-
# when layout and rendering are separated
|
|
89
|
+
# FIXME: this whole class is a terrible hack and must be fixed when layout and rendering are separated
|
|
91
90
|
_sizing = frozenset((Sizing.BOX,))
|
|
92
91
|
_selectable = True
|
|
93
92
|
|
|
@@ -105,19 +104,23 @@ class PopUpTarget(WidgetDecoration[WrappedWidget]):
|
|
|
105
104
|
if self._pop_up != w:
|
|
106
105
|
self._pop_up = w
|
|
107
106
|
self._current_widget = Overlay(
|
|
108
|
-
w,
|
|
109
|
-
self._original_widget,
|
|
110
|
-
|
|
111
|
-
overlay_width,
|
|
112
|
-
|
|
113
|
-
overlay_height,
|
|
107
|
+
top_w=w,
|
|
108
|
+
bottom_w=self._original_widget,
|
|
109
|
+
align=Align.LEFT,
|
|
110
|
+
width=overlay_width,
|
|
111
|
+
valign=VAlign.TOP,
|
|
112
|
+
height=overlay_height,
|
|
113
|
+
left=left,
|
|
114
|
+
top=top,
|
|
114
115
|
)
|
|
115
116
|
else:
|
|
116
117
|
self._current_widget.set_overlay_parameters(
|
|
117
|
-
|
|
118
|
-
overlay_width,
|
|
119
|
-
|
|
120
|
-
overlay_height,
|
|
118
|
+
align=Align.LEFT,
|
|
119
|
+
width=overlay_width,
|
|
120
|
+
valign=VAlign.TOP,
|
|
121
|
+
height=overlay_height,
|
|
122
|
+
left=left,
|
|
123
|
+
top=top,
|
|
121
124
|
)
|
|
122
125
|
else:
|
|
123
126
|
self._pop_up = None
|