urwid 2.6.8__tar.gz → 2.6.10__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/.editorconfig +22 -0
- {urwid-2.6.8 → urwid-2.6.10}/.pre-commit-config.yaml +1 -1
- {urwid-2.6.8 → urwid-2.6.10}/PKG-INFO +1 -1
- urwid-2.6.10/black-requirements.txt +1 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/conf.py +3 -3
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/real_browse.py +10 -3
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/highcolors.py +1 -1
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/input.py +1 -1
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/qa.py +1 -1
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/urwid_attr.py +1 -1
- {urwid-2.6.8 → urwid-2.6.10}/examples/browse.py +10 -3
- {urwid-2.6.8 → urwid-2.6.10}/examples/twisted_serve_ssh.py +2 -2
- {urwid-2.6.8 → urwid-2.6.10}/pyproject.toml +14 -8
- urwid-2.6.10/ruff-requirements.txt +1 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_scrollable.py +75 -1
- {urwid-2.6.8 → urwid-2.6.10}/tox.ini +10 -10
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/escape.py +7 -9
- {urwid-2.6.8 → urwid-2.6.10}/urwid/event_loop/asyncio_loop.py +4 -3
- {urwid-2.6.8 → urwid-2.6.10}/urwid/event_loop/trio_loop.py +4 -3
- {urwid-2.6.8 → urwid-2.6.10}/urwid/version.py +2 -2
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/listbox.py +178 -63
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/monitored_list.py +1 -1
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/scrollable.py +70 -25
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/treetools.py +4 -4
- {urwid-2.6.8 → urwid-2.6.10}/urwid.egg-info/PKG-INFO +1 -1
- {urwid-2.6.8 → urwid-2.6.10}/urwid.egg-info/SOURCES.txt +1 -0
- urwid-2.6.8/black-requirements.txt +0 -1
- urwid-2.6.8/ruff-requirements.txt +0 -1
- {urwid-2.6.8 → urwid-2.6.10}/.coveralls.yml +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.devcontainer/dev.dockerfile +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.devcontainer/devcontainer.json +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.dockerignore +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/CODE_OF_CONDUCT.md +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/ISSUE_TEMPLATE/docs.md +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/dependabot.yml +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/labeler.yml +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/release.yml +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/workflows/documentation.yml +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/workflows/isolated_static_check.yml +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/workflows/labels.yml +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/workflows/pythonpackage.yml +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.github/workflows/yamllint.yml +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.gitignore +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/.yamllint.yml +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/COPYING +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/MANIFEST.in +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/README.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/classifiers.txt +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/Makefile +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/changelog.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/bigtext.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/bigtext.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/bigtext1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/bigtext2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/bigtext3.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/browse.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/browse.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/browse1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/browse2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/edit.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/edit.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/edit1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/edit2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/edit_text.txt +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/graph.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/graph.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/graph1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/graph2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/index.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/palette_test.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/palette_test.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/palette_test1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/palette_test2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/pop_up.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/pop_up.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/pop_up1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/pop_up2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/real_edit.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/subproc.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/subproc.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/subproc1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/subproc2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/subproc2.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/tour.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/tour.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/tour1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/examples/tour2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/index.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/bright_combinations.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/bright_combinations.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/bright_combinations1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/canvascache.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/displayattributes.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/displaymodules.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/encodings.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/images/display_modules.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/images/introduction.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/images/urwid_widgets.svgz +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/images/urwid_widgets_1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/images/urwid_widgets_1.xcf +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/images/urwid_widgets_2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/images/urwid_widgets_2.xcf +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/images/widget_layout.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/index.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/mainloop.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/overview.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/safe_combinations.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/safe_combinations.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/safe_combinations1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/textlayout.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/userinput.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/wanat.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/wanat_multi.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/wcur1.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/wcur2.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/widgets.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/wmod.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/manual/wsel.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/attrspec.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/canvas.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/command_map.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/constants.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/deprecated.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/display_modules.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/exceptions.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/global_settings.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/index.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/list_walkers.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/main_loop.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/meta.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/signals.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/text_layout.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/reference/widget.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tools/compile_pngs.sh +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tools/screenshots.sh +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tools/static/.placeholder +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tools/templates/indexcontent.html +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tools/templates/indexsidebar.html +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tools/templates/localtoc.html +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/adventure.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/adventure.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/adventure1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/adventure2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/adventure3.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/adventure4.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/cmenu.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/cmenu.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/cmenu1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/cmenu2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/cmenu3.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/cmenu4.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/highcolors.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/highcolors1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/hmenu.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/hmenu.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/hmenu1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/hmenu2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/hmenu3.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/hmenu4.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/index.rst +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/input.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/input1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/input2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/input3.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/input4.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/input5.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/menu25.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/minimal.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/minimal.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/minimal1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/multiple.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/multiple.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/multiple1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/multiple2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/multiple3.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/multiple4.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/qa.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/qa1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/qa2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/qa3.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/sig.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/sig.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/sig1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/sig2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/sig3.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/sig4.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/smenu.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/smenu.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/smenu1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/smenu2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/smenu3.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/urwid_attr.py.xdotool +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/urwid_attr1.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/urwid_attr2.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/urwid_attr3.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/tutorial/urwid_attr4.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/docs/urwid-logo.png +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/asyncio_socket_server.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/bigtext.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/calc.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/dialog.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/edit.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/fib.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/graph.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/input_test.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/lcd_cf635.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/palette_test.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/pop_up.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/subproc.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/subproc2.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/terminal.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/tour.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/treesample.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/examples/twisted_serve_ssh.tac +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/isort-requirements.txt +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/pylint-requirements.txt +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/requirements.txt +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/setup.cfg +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/setup.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/test_requirements.txt +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/__init__.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_canvas.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_columns.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_container.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_doctests.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_escapes.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_event_loops.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_filler.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_floatedit.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_font.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_frame.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_graphics.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_grid_flow.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_line_box.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_listbox.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_main_loop.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_moved_imports.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_overlay.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_padding.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_pile.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_raw_display.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_signals.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_str_util.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_text_layout.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_tree.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_util.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_vterm.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/test_widget.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/tests/util.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/__init__.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/canvas.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/command_map.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/container.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/decoration.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/__init__.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/_posix_raw_display.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/_raw_display_base.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/_web.css +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/_web.js +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/_win32.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/_win32_raw_display.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/common.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/curses.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/html_fragment.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/lcd.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/raw.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/display/web.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/event_loop/__init__.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/event_loop/abstract_loop.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/event_loop/glib_loop.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/event_loop/main_loop.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/event_loop/select_loop.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/event_loop/tornado_loop.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/event_loop/twisted_loop.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/event_loop/zmq_loop.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/font.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/graphics.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/numedit.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/signals.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/split_repr.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/str_util.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/text_layout.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/util.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/vterm.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/__init__.py +15 -15
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/attr_map.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/attr_wrap.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/bar_graph.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/big_text.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/box_adapter.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/columns.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/constants.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/container.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/divider.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/edit.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/filler.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/frame.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/grid_flow.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/line_box.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/overlay.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/padding.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/pile.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/popup.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/progress_bar.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/solid_fill.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/text.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/widget.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/widget_decoration.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/widget/wimp.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid/wimp.py +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid.egg-info/dependency_links.txt +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid.egg-info/not-zip-safe +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid.egg-info/requires.txt +0 -0
- {urwid-2.6.8 → urwid-2.6.10}/urwid.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
root = true
|
|
2
|
+
|
|
3
|
+
[*]
|
|
4
|
+
charset = utf-8
|
|
5
|
+
end_of_line = lf
|
|
6
|
+
indent_style = space
|
|
7
|
+
insert_final_newline = true
|
|
8
|
+
trim_trailing_whitespace = true
|
|
9
|
+
|
|
10
|
+
[*.{py,pyi,pyx,pxd}]
|
|
11
|
+
indent_size = 4
|
|
12
|
+
max_line_length = 120
|
|
13
|
+
|
|
14
|
+
[*.{yml,yaml,json,ini,toml}]
|
|
15
|
+
indent_size = 2
|
|
16
|
+
max_line_length = 120
|
|
17
|
+
|
|
18
|
+
[*.{rst,md}]
|
|
19
|
+
indent_size = 2
|
|
20
|
+
|
|
21
|
+
[{Makefile,Makefile.in}]
|
|
22
|
+
indent_style = tab
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
black==24.3.0
|
|
@@ -226,11 +226,11 @@ htmlhelp_basename = "Urwiddoc"
|
|
|
226
226
|
|
|
227
227
|
latex_elements = {
|
|
228
228
|
# The paper size ('letterpaper' or 'a4paper').
|
|
229
|
-
#'papersize': 'letterpaper',
|
|
229
|
+
# 'papersize': 'letterpaper',
|
|
230
230
|
# The font size ('10pt', '11pt' or '12pt').
|
|
231
|
-
#'pointsize': '10pt',
|
|
231
|
+
# 'pointsize': '10pt',
|
|
232
232
|
# Additional stuff for the LaTeX preamble.
|
|
233
|
-
#'preamble': '',
|
|
233
|
+
# 'preamble': '',
|
|
234
234
|
}
|
|
235
235
|
|
|
236
236
|
# Grouping the document tree into LaTeX files. List of tuples
|
|
@@ -274,7 +274,14 @@ class DirectoryBrowser:
|
|
|
274
274
|
self.listbox.offset_rows = 1
|
|
275
275
|
self.footer = urwid.AttrMap(urwid.Text(self.footer_text), "foot")
|
|
276
276
|
self.view = urwid.Frame(
|
|
277
|
-
urwid.AttrMap(
|
|
277
|
+
urwid.AttrMap(
|
|
278
|
+
urwid.ScrollBar(
|
|
279
|
+
self.listbox,
|
|
280
|
+
thumb_char=urwid.ScrollBar.Symbols.FULL_BLOCK,
|
|
281
|
+
trough_char=urwid.ScrollBar.Symbols.LITE_SHADE,
|
|
282
|
+
),
|
|
283
|
+
"body",
|
|
284
|
+
),
|
|
278
285
|
header=urwid.AttrMap(self.header, "head"),
|
|
279
286
|
footer=self.footer,
|
|
280
287
|
)
|
|
@@ -379,9 +386,9 @@ def escape_filename_sh_ansic(name: str) -> str:
|
|
|
379
386
|
SPLIT_RE = re.compile(r"[a-zA-Z]+|\d+")
|
|
380
387
|
|
|
381
388
|
|
|
382
|
-
def alphabetize(s):
|
|
389
|
+
def alphabetize(s: str) -> list[str]:
|
|
383
390
|
L = []
|
|
384
|
-
for isdigit, group in itertools.groupby(SPLIT_RE.findall(s), key=
|
|
391
|
+
for isdigit, group in itertools.groupby(SPLIT_RE.findall(s), key=str.isdigit):
|
|
385
392
|
if isdigit:
|
|
386
393
|
L.extend(("", int(n)) for n in group)
|
|
387
394
|
else:
|
|
@@ -274,7 +274,14 @@ class DirectoryBrowser:
|
|
|
274
274
|
self.listbox.offset_rows = 1
|
|
275
275
|
self.footer = urwid.AttrMap(urwid.Text(self.footer_text), "foot")
|
|
276
276
|
self.view = urwid.Frame(
|
|
277
|
-
urwid.AttrMap(
|
|
277
|
+
urwid.AttrMap(
|
|
278
|
+
urwid.ScrollBar(
|
|
279
|
+
self.listbox,
|
|
280
|
+
thumb_char=urwid.ScrollBar.Symbols.FULL_BLOCK,
|
|
281
|
+
trough_char=urwid.ScrollBar.Symbols.LITE_SHADE,
|
|
282
|
+
),
|
|
283
|
+
"body",
|
|
284
|
+
),
|
|
278
285
|
header=urwid.AttrMap(self.header, "head"),
|
|
279
286
|
footer=self.footer,
|
|
280
287
|
)
|
|
@@ -379,9 +386,9 @@ def escape_filename_sh_ansic(name: str) -> str:
|
|
|
379
386
|
SPLIT_RE = re.compile(r"[a-zA-Z]+|\d+")
|
|
380
387
|
|
|
381
388
|
|
|
382
|
-
def alphabetize(s):
|
|
389
|
+
def alphabetize(s: str) -> list[str]:
|
|
383
390
|
L = []
|
|
384
|
-
for isdigit, group in itertools.groupby(SPLIT_RE.findall(s), key=
|
|
391
|
+
for isdigit, group in itertools.groupby(SPLIT_RE.findall(s), key=str.isdigit):
|
|
385
392
|
if isdigit:
|
|
386
393
|
L.extend(("", int(n)) for n in group)
|
|
387
394
|
else:
|
|
@@ -201,7 +201,7 @@ class TwistedScreen(Screen):
|
|
|
201
201
|
tuples. This very simple implementation iterates each row and simply
|
|
202
202
|
writes it out.
|
|
203
203
|
"""
|
|
204
|
-
(
|
|
204
|
+
(_maxcol, _maxrow) = size
|
|
205
205
|
# self.terminal.eraseDisplay()
|
|
206
206
|
lasta = None
|
|
207
207
|
for i, row in enumerate(canvas.content()):
|
|
@@ -400,7 +400,7 @@ class UrwidTerminalSession(TerminalSession):
|
|
|
400
400
|
|
|
401
401
|
def windowChanged(self, dimensions):
|
|
402
402
|
"""Called when the window size has changed."""
|
|
403
|
-
(h, w,
|
|
403
|
+
(h, w, _x, _y) = dimensions
|
|
404
404
|
self.chained_protocol.terminalProtocol.terminalSize(h, w)
|
|
405
405
|
|
|
406
406
|
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
# Minimum requirements for the build system to execute.
|
|
3
3
|
# PEP 508 specifications for PEP 518.
|
|
4
4
|
requires = [
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
"setuptools >= 61.0.0",
|
|
6
|
+
"setuptools_scm[toml]>=7.0",
|
|
7
|
+
"wheel",
|
|
8
8
|
]
|
|
9
9
|
build-backend="setuptools.build_meta"
|
|
10
10
|
|
|
@@ -178,8 +178,8 @@ extend-select = [
|
|
|
178
178
|
"TRY", "UP", "I", "PL", "PERF", "RUF", # tryceratops, pyupgrade, isort, pylint + perflint, Ruff-specific
|
|
179
179
|
]
|
|
180
180
|
extend-ignore = [
|
|
181
|
-
"PLR6301", "E203",
|
|
182
|
-
|
|
181
|
+
"PLR6301", "E203",
|
|
182
|
+
# refactor rules (too many statements/arguments/branches)
|
|
183
183
|
"PLR0904", "PLR0911", "PLR0912", "PLR0913", "PLR0914", "PLR0915", "PLR0917", "PLR2004",
|
|
184
184
|
"PLC0415", # We have a lot of imports outside of top-level
|
|
185
185
|
"RET504", # Unnecessary variable assignment before return statement
|
|
@@ -197,6 +197,15 @@ known-third-party = []
|
|
|
197
197
|
[tool.ruff.lint.pydocstyle]
|
|
198
198
|
convention = "pep257"
|
|
199
199
|
|
|
200
|
+
[tool.ruff.lint.pylint]
|
|
201
|
+
allow-dunder-method-names = [
|
|
202
|
+
"__rich_repr__",
|
|
203
|
+
# class generation
|
|
204
|
+
"_contents__getitem__",
|
|
205
|
+
"_contents__setitem__",
|
|
206
|
+
"_contents__delitem__",
|
|
207
|
+
]
|
|
208
|
+
|
|
200
209
|
[tool.pylint]
|
|
201
210
|
extension-pkg-whitelist = []
|
|
202
211
|
ignore = ["CVS", "_version.py"]
|
|
@@ -236,8 +245,6 @@ disable = [
|
|
|
236
245
|
"broad-exception-raised",
|
|
237
246
|
"logging-fstring-interpolation",
|
|
238
247
|
"logging-format-interpolation",
|
|
239
|
-
"consider-alternative-union-syntax",
|
|
240
|
-
"deprecated-typing-alias",
|
|
241
248
|
"fixme",
|
|
242
249
|
"invalid-name",
|
|
243
250
|
"import-outside-toplevel",
|
|
@@ -247,7 +254,6 @@ disable = [
|
|
|
247
254
|
"unused-argument",
|
|
248
255
|
"unused-private-member",
|
|
249
256
|
"arguments-differ",
|
|
250
|
-
"consider-alternative-union-syntax",
|
|
251
257
|
"consider-using-assignment-expr",
|
|
252
258
|
"superfluous-parens",
|
|
253
259
|
# Magic part
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruff==0.3.4
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import string
|
|
4
|
+
import typing
|
|
4
5
|
import unittest
|
|
5
6
|
|
|
6
7
|
import urwid
|
|
7
8
|
|
|
9
|
+
if typing.TYPE_CHECKING:
|
|
10
|
+
from collections.abc import Iterable
|
|
11
|
+
|
|
8
12
|
LGPL_HEADER = """
|
|
9
13
|
Copyright (C) <year> <name of author>
|
|
10
14
|
|
|
@@ -192,9 +196,28 @@ class TestScrollBarScrollable(unittest.TestCase):
|
|
|
192
196
|
with self.assertRaises(TypeError):
|
|
193
197
|
urwid.ScrollBar(urwid.SolidFill(" "))
|
|
194
198
|
|
|
199
|
+
def test_no_scrollbar(self):
|
|
200
|
+
"""If widget fit without scroll - no scrollbar needed"""
|
|
201
|
+
widget = urwid.ScrollBar(
|
|
202
|
+
urwid.Scrollable(urwid.BigText("1", urwid.HalfBlockHeavy6x5Font())),
|
|
203
|
+
trough_char=urwid.ScrollBar.Symbols.LITE_SHADE,
|
|
204
|
+
thumb_char=urwid.ScrollBar.Symbols.DARK_SHADE,
|
|
205
|
+
)
|
|
206
|
+
reduced_size = (8, 5)
|
|
207
|
+
self.assertEqual(
|
|
208
|
+
(
|
|
209
|
+
" ▐█▌ ",
|
|
210
|
+
" ▀█▌ ",
|
|
211
|
+
" █▌ ",
|
|
212
|
+
" █▌ ",
|
|
213
|
+
" ███▌ ",
|
|
214
|
+
),
|
|
215
|
+
widget.render(reduced_size).decoded_text,
|
|
216
|
+
)
|
|
217
|
+
|
|
195
218
|
|
|
196
219
|
class TestScrollBarListBox(unittest.TestCase):
|
|
197
|
-
def
|
|
220
|
+
def test_relative_non_selectable(self):
|
|
198
221
|
widget = urwid.ScrollBar(
|
|
199
222
|
urwid.ListBox(urwid.SimpleListWalker(urwid.Text(line) for line in LGPL_HEADER.splitlines()))
|
|
200
223
|
)
|
|
@@ -323,3 +346,54 @@ class TestScrollBarListBox(unittest.TestCase):
|
|
|
323
346
|
widget.keypress(reduced_size, "down")
|
|
324
347
|
|
|
325
348
|
self.assertEqual(pos_1_down_rendered, widget.render(reduced_size).decoded_text)
|
|
349
|
+
|
|
350
|
+
def test_hinted_len(self):
|
|
351
|
+
class HintedWalker(urwid.ListWalker):
|
|
352
|
+
def __init__(self, items: Iterable[str]) -> None:
|
|
353
|
+
self.items: tuple[str] = tuple(items)
|
|
354
|
+
self.focus = 0
|
|
355
|
+
self.requested_numbers: set[int] = set()
|
|
356
|
+
|
|
357
|
+
def __length_hint__(self) -> int:
|
|
358
|
+
return len(self.items)
|
|
359
|
+
|
|
360
|
+
def __getitem__(self, item: int) -> urwid.Text:
|
|
361
|
+
self.requested_numbers.add(item)
|
|
362
|
+
return urwid.Text(self.items[item])
|
|
363
|
+
|
|
364
|
+
def set_focus(self, item: int) -> None:
|
|
365
|
+
self.focus = item
|
|
366
|
+
|
|
367
|
+
def next_position(self, position: int) -> int:
|
|
368
|
+
if position + 1 < len(self.items):
|
|
369
|
+
return position + 1
|
|
370
|
+
raise IndexError
|
|
371
|
+
|
|
372
|
+
def prev_position(self, position: int) -> int:
|
|
373
|
+
if position - 1 >= 0:
|
|
374
|
+
return position - 1
|
|
375
|
+
raise IndexError
|
|
376
|
+
|
|
377
|
+
widget = urwid.ScrollBar(urwid.ListBox(HintedWalker((f"Line {idx:02}") for idx in range(1, 51))))
|
|
378
|
+
size = (10, 10)
|
|
379
|
+
widget.original_widget.focus_position = 19
|
|
380
|
+
self.assertEqual(
|
|
381
|
+
(
|
|
382
|
+
"Line 16 ",
|
|
383
|
+
"Line 17 ",
|
|
384
|
+
"Line 18 ",
|
|
385
|
+
"Line 19 █",
|
|
386
|
+
"Line 20 █",
|
|
387
|
+
"Line 21 ",
|
|
388
|
+
"Line 22 ",
|
|
389
|
+
"Line 23 ",
|
|
390
|
+
"Line 24 ",
|
|
391
|
+
"Line 25 ",
|
|
392
|
+
),
|
|
393
|
+
widget.render(size).decoded_text,
|
|
394
|
+
)
|
|
395
|
+
self.assertNotIn(
|
|
396
|
+
30,
|
|
397
|
+
widget.original_widget.body.requested_numbers,
|
|
398
|
+
"Requested index out of range [0, last shown]. This means not relative scroll bar built.",
|
|
399
|
+
)
|
|
@@ -7,8 +7,8 @@ usedevelop = true
|
|
|
7
7
|
deps = -r {toxinidir}/test_requirements.txt
|
|
8
8
|
|
|
9
9
|
commands =
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
coverage run -m unittest discover -s tests -v
|
|
11
|
+
coverage report
|
|
12
12
|
|
|
13
13
|
[testenv:readme]
|
|
14
14
|
deps =
|
|
@@ -21,7 +21,7 @@ commands =
|
|
|
21
21
|
[testenv:isort]
|
|
22
22
|
skip_install = true
|
|
23
23
|
deps =
|
|
24
|
-
|
|
24
|
+
isort
|
|
25
25
|
commands =
|
|
26
26
|
isort .
|
|
27
27
|
|
|
@@ -41,18 +41,18 @@ commands = ruff check .
|
|
|
41
41
|
|
|
42
42
|
[testenv:docs]
|
|
43
43
|
deps =
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
-r {toxinidir}/test_requirements.txt
|
|
45
|
+
PyGObject
|
|
46
|
+
sphinx
|
|
47
|
+
sphinx-github-changelog
|
|
48
48
|
commands = sphinx-build docs/ build/documentation
|
|
49
49
|
|
|
50
50
|
[testenv:pylint]
|
|
51
51
|
depends = black,isort
|
|
52
52
|
deps =
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
-r {toxinidir}/test_requirements.txt
|
|
54
|
+
PyGObject
|
|
55
|
+
pylint
|
|
56
56
|
commands = pylint urwid
|
|
57
57
|
|
|
58
58
|
[testenv:refurb]
|
|
@@ -310,17 +310,15 @@ class KeyqueueTrie:
|
|
|
310
310
|
|
|
311
311
|
(b, x, y) = (int(val) for val in value[:-1].split(";"))
|
|
312
312
|
action = value[-1]
|
|
313
|
-
|
|
314
|
-
#
|
|
315
|
-
# can
|
|
316
|
-
#
|
|
317
|
-
#
|
|
318
|
-
# registered click is below a certain threshold. This threshold
|
|
319
|
-
# is normally set in the operating system itself, so setting one
|
|
320
|
-
# here will cause an inconsistent behaviour. I do not plan to use
|
|
321
|
-
# that feature, so I won't implement it.
|
|
313
|
+
# Double and triple clicks are not supported.
|
|
314
|
+
# They can be implemented by using a timer.
|
|
315
|
+
# This timer can check if the last registered click is below a certain threshold.
|
|
316
|
+
# This threshold is normally set in the operating system itself,
|
|
317
|
+
# so setting one here will cause an inconsistent behaviour.
|
|
322
318
|
|
|
323
319
|
prefixes = []
|
|
320
|
+
if b & 4:
|
|
321
|
+
prefixes.append("shift ")
|
|
324
322
|
if b & 8:
|
|
325
323
|
prefixes.append("meta ")
|
|
326
324
|
if b & 16:
|
|
@@ -222,9 +222,10 @@ class AsyncioEventLoop(EventLoop):
|
|
|
222
222
|
loop.default_exception_handler(context)
|
|
223
223
|
|
|
224
224
|
def run(self) -> None:
|
|
225
|
-
"""
|
|
226
|
-
|
|
227
|
-
|
|
225
|
+
"""Start the event loop.
|
|
226
|
+
|
|
227
|
+
Exit the loop when any callback raises an exception.
|
|
228
|
+
If ExitMainLoop is raised, exit cleanly.
|
|
228
229
|
"""
|
|
229
230
|
self._loop.set_exception_handler(self._exception_handler)
|
|
230
231
|
self._loop.run_forever()
|
|
@@ -160,9 +160,10 @@ class TrioEventLoop(EventLoop):
|
|
|
160
160
|
trio.run(self._main_task, instruments=[emulate_idle_callbacks])
|
|
161
161
|
|
|
162
162
|
async def run_async(self) -> None:
|
|
163
|
-
"""Starts the main loop and blocks asynchronously until the main loop
|
|
164
|
-
|
|
165
|
-
Trio event loop is already running.
|
|
163
|
+
"""Starts the main loop and blocks asynchronously until the main loop exits.
|
|
164
|
+
|
|
165
|
+
This allows one to embed an urwid app in a Trio app even if the Trio event loop is already running.
|
|
166
|
+
Example::
|
|
166
167
|
|
|
167
168
|
with trio.open_nursery() as nursery:
|
|
168
169
|
event_loop = urwid.TrioEventLoop()
|