urwid 2.6.13__tar.gz → 2.6.15__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.
Files changed (318) hide show
  1. {urwid-2.6.13 → urwid-2.6.15}/.pre-commit-config.yaml +1 -1
  2. {urwid-2.6.13 → urwid-2.6.15}/PKG-INFO +1 -1
  3. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/subproc.py +2 -2
  4. {urwid-2.6.13 → urwid-2.6.15}/examples/subproc.py +2 -2
  5. urwid-2.6.15/pylint-requirements.txt +1 -0
  6. urwid-2.6.15/ruff-requirements.txt +1 -0
  7. {urwid-2.6.13 → urwid-2.6.15}/test_requirements.txt +1 -1
  8. {urwid-2.6.13 → urwid-2.6.15}/tests/test_grid_flow.py +24 -0
  9. {urwid-2.6.13 → urwid-2.6.15}/tests/test_scrollable.py +25 -10
  10. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/_posix_raw_display.py +2 -2
  11. {urwid-2.6.13 → urwid-2.6.15}/urwid/version.py +2 -2
  12. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/grid_flow.py +18 -8
  13. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/listbox.py +12 -11
  14. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/scrollable.py +1 -1
  15. {urwid-2.6.13 → urwid-2.6.15}/urwid.egg-info/PKG-INFO +1 -1
  16. urwid-2.6.13/pylint-requirements.txt +0 -1
  17. urwid-2.6.13/ruff-requirements.txt +0 -1
  18. {urwid-2.6.13 → urwid-2.6.15}/.coveralls.yml +0 -0
  19. {urwid-2.6.13 → urwid-2.6.15}/.devcontainer/dev.dockerfile +0 -0
  20. {urwid-2.6.13 → urwid-2.6.15}/.devcontainer/devcontainer.json +0 -0
  21. {urwid-2.6.13 → urwid-2.6.15}/.dockerignore +0 -0
  22. {urwid-2.6.13 → urwid-2.6.15}/.editorconfig +0 -0
  23. {urwid-2.6.13 → urwid-2.6.15}/.github/CODE_OF_CONDUCT.md +0 -0
  24. {urwid-2.6.13 → urwid-2.6.15}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  25. {urwid-2.6.13 → urwid-2.6.15}/.github/ISSUE_TEMPLATE/docs.md +0 -0
  26. {urwid-2.6.13 → urwid-2.6.15}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  27. {urwid-2.6.13 → urwid-2.6.15}/.github/ISSUE_TEMPLATE/question.md +0 -0
  28. {urwid-2.6.13 → urwid-2.6.15}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  29. {urwid-2.6.13 → urwid-2.6.15}/.github/dependabot.yml +0 -0
  30. {urwid-2.6.13 → urwid-2.6.15}/.github/labeler.yml +0 -0
  31. {urwid-2.6.13 → urwid-2.6.15}/.github/release.yml +0 -0
  32. {urwid-2.6.13 → urwid-2.6.15}/.github/workflows/documentation.yml +0 -0
  33. {urwid-2.6.13 → urwid-2.6.15}/.github/workflows/isolated_static_check.yml +0 -0
  34. {urwid-2.6.13 → urwid-2.6.15}/.github/workflows/labels.yml +0 -0
  35. {urwid-2.6.13 → urwid-2.6.15}/.github/workflows/pythonpackage.yml +0 -0
  36. {urwid-2.6.13 → urwid-2.6.15}/.github/workflows/yamllint.yml +0 -0
  37. {urwid-2.6.13 → urwid-2.6.15}/.gitignore +0 -0
  38. {urwid-2.6.13 → urwid-2.6.15}/.yamllint.yml +0 -0
  39. {urwid-2.6.13 → urwid-2.6.15}/COPYING +0 -0
  40. {urwid-2.6.13 → urwid-2.6.15}/MANIFEST.in +0 -0
  41. {urwid-2.6.13 → urwid-2.6.15}/README.rst +0 -0
  42. {urwid-2.6.13 → urwid-2.6.15}/black-requirements.txt +0 -0
  43. {urwid-2.6.13 → urwid-2.6.15}/classifiers.txt +0 -0
  44. {urwid-2.6.13 → urwid-2.6.15}/docs/Makefile +0 -0
  45. {urwid-2.6.13 → urwid-2.6.15}/docs/changelog.rst +0 -0
  46. {urwid-2.6.13 → urwid-2.6.15}/docs/conf.py +0 -0
  47. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/bigtext.py +0 -0
  48. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/bigtext.py.xdotool +0 -0
  49. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/bigtext1.png +0 -0
  50. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/bigtext2.png +0 -0
  51. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/bigtext3.png +0 -0
  52. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/browse.py +0 -0
  53. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/browse.py.xdotool +0 -0
  54. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/browse1.png +0 -0
  55. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/browse2.png +0 -0
  56. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/edit.py +0 -0
  57. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/edit.py.xdotool +0 -0
  58. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/edit1.png +0 -0
  59. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/edit2.png +0 -0
  60. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/edit_text.txt +0 -0
  61. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/graph.py +0 -0
  62. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/graph.py.xdotool +0 -0
  63. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/graph1.png +0 -0
  64. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/graph2.png +0 -0
  65. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/index.rst +0 -0
  66. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/palette_test.py +0 -0
  67. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/palette_test.py.xdotool +0 -0
  68. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/palette_test1.png +0 -0
  69. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/palette_test2.png +0 -0
  70. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/pop_up.py +0 -0
  71. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/pop_up.py.xdotool +0 -0
  72. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/pop_up1.png +0 -0
  73. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/pop_up2.png +0 -0
  74. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/real_browse.py +0 -0
  75. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/real_edit.py +0 -0
  76. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/subproc.py.xdotool +0 -0
  77. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/subproc1.png +0 -0
  78. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/subproc2.png +0 -0
  79. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/subproc2.py +0 -0
  80. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/tour.py +0 -0
  81. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/tour.py.xdotool +0 -0
  82. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/tour1.png +0 -0
  83. {urwid-2.6.13 → urwid-2.6.15}/docs/examples/tour2.png +0 -0
  84. {urwid-2.6.13 → urwid-2.6.15}/docs/index.rst +0 -0
  85. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/bright_combinations.py +0 -0
  86. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/bright_combinations.py.xdotool +0 -0
  87. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/bright_combinations1.png +0 -0
  88. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/canvascache.rst +0 -0
  89. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/displayattributes.rst +0 -0
  90. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/displaymodules.rst +0 -0
  91. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/encodings.rst +0 -0
  92. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/images/display_modules.png +0 -0
  93. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/images/introduction.png +0 -0
  94. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/images/urwid_widgets.svgz +0 -0
  95. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/images/urwid_widgets_1.png +0 -0
  96. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/images/urwid_widgets_1.xcf +0 -0
  97. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/images/urwid_widgets_2.png +0 -0
  98. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/images/urwid_widgets_2.xcf +0 -0
  99. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/images/widget_layout.png +0 -0
  100. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/index.rst +0 -0
  101. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/mainloop.rst +0 -0
  102. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/overview.rst +0 -0
  103. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/safe_combinations.py +0 -0
  104. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/safe_combinations.py.xdotool +0 -0
  105. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/safe_combinations1.png +0 -0
  106. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/textlayout.rst +0 -0
  107. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/userinput.rst +0 -0
  108. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/wanat.py +0 -0
  109. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/wanat_multi.py +0 -0
  110. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/wcur1.py +0 -0
  111. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/wcur2.py +0 -0
  112. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/widgets.rst +0 -0
  113. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/wmod.py +0 -0
  114. {urwid-2.6.13 → urwid-2.6.15}/docs/manual/wsel.py +0 -0
  115. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/attrspec.rst +0 -0
  116. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/canvas.rst +0 -0
  117. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/command_map.rst +0 -0
  118. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/constants.rst +0 -0
  119. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/deprecated.rst +0 -0
  120. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/display_modules.rst +0 -0
  121. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/exceptions.rst +0 -0
  122. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/global_settings.rst +0 -0
  123. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/index.rst +0 -0
  124. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/list_walkers.rst +0 -0
  125. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/main_loop.rst +0 -0
  126. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/meta.rst +0 -0
  127. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/signals.rst +0 -0
  128. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/text_layout.rst +0 -0
  129. {urwid-2.6.13 → urwid-2.6.15}/docs/reference/widget.rst +0 -0
  130. {urwid-2.6.13 → urwid-2.6.15}/docs/tools/compile_pngs.sh +0 -0
  131. {urwid-2.6.13 → urwid-2.6.15}/docs/tools/screenshots.sh +0 -0
  132. {urwid-2.6.13 → urwid-2.6.15}/docs/tools/static/.placeholder +0 -0
  133. {urwid-2.6.13 → urwid-2.6.15}/docs/tools/templates/indexcontent.html +0 -0
  134. {urwid-2.6.13 → urwid-2.6.15}/docs/tools/templates/indexsidebar.html +0 -0
  135. {urwid-2.6.13 → urwid-2.6.15}/docs/tools/templates/localtoc.html +0 -0
  136. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/adventure.py +0 -0
  137. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/adventure.py.xdotool +0 -0
  138. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/adventure1.png +0 -0
  139. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/adventure2.png +0 -0
  140. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/adventure3.png +0 -0
  141. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/adventure4.png +0 -0
  142. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/cmenu.py +0 -0
  143. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/cmenu.py.xdotool +0 -0
  144. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/cmenu1.png +0 -0
  145. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/cmenu2.png +0 -0
  146. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/cmenu3.png +0 -0
  147. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/cmenu4.png +0 -0
  148. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/highcolors.py +0 -0
  149. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/highcolors.py.xdotool +0 -0
  150. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/highcolors1.png +0 -0
  151. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/hmenu.py +0 -0
  152. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/hmenu.py.xdotool +0 -0
  153. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/hmenu1.png +0 -0
  154. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/hmenu2.png +0 -0
  155. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/hmenu3.png +0 -0
  156. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/hmenu4.png +0 -0
  157. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/index.rst +0 -0
  158. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/input.py +0 -0
  159. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/input.py.xdotool +0 -0
  160. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/input1.png +0 -0
  161. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/input2.png +0 -0
  162. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/input3.png +0 -0
  163. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/input4.png +0 -0
  164. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/input5.png +0 -0
  165. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/menu25.png +0 -0
  166. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/minimal.py +0 -0
  167. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/minimal.py.xdotool +0 -0
  168. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/minimal1.png +0 -0
  169. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/multiple.py +0 -0
  170. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/multiple.py.xdotool +0 -0
  171. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/multiple1.png +0 -0
  172. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/multiple2.png +0 -0
  173. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/multiple3.png +0 -0
  174. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/multiple4.png +0 -0
  175. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/qa.py +0 -0
  176. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/qa.py.xdotool +0 -0
  177. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/qa1.png +0 -0
  178. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/qa2.png +0 -0
  179. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/qa3.png +0 -0
  180. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/sig.py +0 -0
  181. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/sig.py.xdotool +0 -0
  182. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/sig1.png +0 -0
  183. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/sig2.png +0 -0
  184. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/sig3.png +0 -0
  185. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/sig4.png +0 -0
  186. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/smenu.py +0 -0
  187. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/smenu.py.xdotool +0 -0
  188. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/smenu1.png +0 -0
  189. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/smenu2.png +0 -0
  190. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/smenu3.png +0 -0
  191. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/urwid_attr.py +0 -0
  192. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/urwid_attr.py.xdotool +0 -0
  193. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/urwid_attr1.png +0 -0
  194. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/urwid_attr2.png +0 -0
  195. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/urwid_attr3.png +0 -0
  196. {urwid-2.6.13 → urwid-2.6.15}/docs/tutorial/urwid_attr4.png +0 -0
  197. {urwid-2.6.13 → urwid-2.6.15}/docs/urwid-logo.png +0 -0
  198. {urwid-2.6.13 → urwid-2.6.15}/examples/asyncio_socket_server.py +0 -0
  199. {urwid-2.6.13 → urwid-2.6.15}/examples/bigtext.py +0 -0
  200. {urwid-2.6.13 → urwid-2.6.15}/examples/browse.py +0 -0
  201. {urwid-2.6.13 → urwid-2.6.15}/examples/calc.py +0 -0
  202. {urwid-2.6.13 → urwid-2.6.15}/examples/dialog.py +0 -0
  203. {urwid-2.6.13 → urwid-2.6.15}/examples/edit.py +0 -0
  204. {urwid-2.6.13 → urwid-2.6.15}/examples/fib.py +0 -0
  205. {urwid-2.6.13 → urwid-2.6.15}/examples/graph.py +0 -0
  206. {urwid-2.6.13 → urwid-2.6.15}/examples/input_test.py +0 -0
  207. {urwid-2.6.13 → urwid-2.6.15}/examples/lcd_cf635.py +0 -0
  208. {urwid-2.6.13 → urwid-2.6.15}/examples/palette_test.py +0 -0
  209. {urwid-2.6.13 → urwid-2.6.15}/examples/pop_up.py +0 -0
  210. {urwid-2.6.13 → urwid-2.6.15}/examples/subproc2.py +0 -0
  211. {urwid-2.6.13 → urwid-2.6.15}/examples/terminal.py +0 -0
  212. {urwid-2.6.13 → urwid-2.6.15}/examples/tour.py +0 -0
  213. {urwid-2.6.13 → urwid-2.6.15}/examples/treesample.py +0 -0
  214. {urwid-2.6.13 → urwid-2.6.15}/examples/twisted_serve_ssh.py +0 -0
  215. {urwid-2.6.13 → urwid-2.6.15}/examples/twisted_serve_ssh.tac +0 -0
  216. {urwid-2.6.13 → urwid-2.6.15}/isort-requirements.txt +0 -0
  217. {urwid-2.6.13 → urwid-2.6.15}/pyproject.toml +0 -0
  218. {urwid-2.6.13 → urwid-2.6.15}/requirements.txt +0 -0
  219. {urwid-2.6.13 → urwid-2.6.15}/setup.cfg +0 -0
  220. {urwid-2.6.13 → urwid-2.6.15}/setup.py +0 -0
  221. {urwid-2.6.13 → urwid-2.6.15}/tests/__init__.py +0 -0
  222. {urwid-2.6.13 → urwid-2.6.15}/tests/test_canvas.py +0 -0
  223. {urwid-2.6.13 → urwid-2.6.15}/tests/test_columns.py +0 -0
  224. {urwid-2.6.13 → urwid-2.6.15}/tests/test_container.py +0 -0
  225. {urwid-2.6.13 → urwid-2.6.15}/tests/test_doctests.py +0 -0
  226. {urwid-2.6.13 → urwid-2.6.15}/tests/test_escapes.py +0 -0
  227. {urwid-2.6.13 → urwid-2.6.15}/tests/test_event_loops.py +0 -0
  228. {urwid-2.6.13 → urwid-2.6.15}/tests/test_filler.py +0 -0
  229. {urwid-2.6.13 → urwid-2.6.15}/tests/test_floatedit.py +0 -0
  230. {urwid-2.6.13 → urwid-2.6.15}/tests/test_font.py +0 -0
  231. {urwid-2.6.13 → urwid-2.6.15}/tests/test_frame.py +0 -0
  232. {urwid-2.6.13 → urwid-2.6.15}/tests/test_graphics.py +0 -0
  233. {urwid-2.6.13 → urwid-2.6.15}/tests/test_line_box.py +0 -0
  234. {urwid-2.6.13 → urwid-2.6.15}/tests/test_listbox.py +0 -0
  235. {urwid-2.6.13 → urwid-2.6.15}/tests/test_main_loop.py +0 -0
  236. {urwid-2.6.13 → urwid-2.6.15}/tests/test_moved_imports.py +0 -0
  237. {urwid-2.6.13 → urwid-2.6.15}/tests/test_overlay.py +0 -0
  238. {urwid-2.6.13 → urwid-2.6.15}/tests/test_padding.py +0 -0
  239. {urwid-2.6.13 → urwid-2.6.15}/tests/test_pile.py +0 -0
  240. {urwid-2.6.13 → urwid-2.6.15}/tests/test_raw_display.py +0 -0
  241. {urwid-2.6.13 → urwid-2.6.15}/tests/test_signals.py +0 -0
  242. {urwid-2.6.13 → urwid-2.6.15}/tests/test_str_util.py +0 -0
  243. {urwid-2.6.13 → urwid-2.6.15}/tests/test_text_layout.py +0 -0
  244. {urwid-2.6.13 → urwid-2.6.15}/tests/test_tree.py +0 -0
  245. {urwid-2.6.13 → urwid-2.6.15}/tests/test_util.py +0 -0
  246. {urwid-2.6.13 → urwid-2.6.15}/tests/test_vterm.py +0 -0
  247. {urwid-2.6.13 → urwid-2.6.15}/tests/test_widget.py +0 -0
  248. {urwid-2.6.13 → urwid-2.6.15}/tests/util.py +0 -0
  249. {urwid-2.6.13 → urwid-2.6.15}/tox.ini +0 -0
  250. {urwid-2.6.13 → urwid-2.6.15}/urwid/__init__.py +0 -0
  251. {urwid-2.6.13 → urwid-2.6.15}/urwid/canvas.py +0 -0
  252. {urwid-2.6.13 → urwid-2.6.15}/urwid/command_map.py +0 -0
  253. {urwid-2.6.13 → urwid-2.6.15}/urwid/container.py +0 -0
  254. {urwid-2.6.13 → urwid-2.6.15}/urwid/decoration.py +0 -0
  255. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/__init__.py +0 -0
  256. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/_raw_display_base.py +0 -0
  257. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/_web.css +0 -0
  258. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/_web.js +0 -0
  259. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/_win32.py +0 -0
  260. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/_win32_raw_display.py +0 -0
  261. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/common.py +0 -0
  262. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/curses.py +0 -0
  263. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/escape.py +0 -0
  264. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/html_fragment.py +0 -0
  265. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/lcd.py +0 -0
  266. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/raw.py +0 -0
  267. {urwid-2.6.13 → urwid-2.6.15}/urwid/display/web.py +0 -0
  268. {urwid-2.6.13 → urwid-2.6.15}/urwid/event_loop/__init__.py +0 -0
  269. {urwid-2.6.13 → urwid-2.6.15}/urwid/event_loop/abstract_loop.py +0 -0
  270. {urwid-2.6.13 → urwid-2.6.15}/urwid/event_loop/asyncio_loop.py +0 -0
  271. {urwid-2.6.13 → urwid-2.6.15}/urwid/event_loop/glib_loop.py +0 -0
  272. {urwid-2.6.13 → urwid-2.6.15}/urwid/event_loop/main_loop.py +0 -0
  273. {urwid-2.6.13 → urwid-2.6.15}/urwid/event_loop/select_loop.py +0 -0
  274. {urwid-2.6.13 → urwid-2.6.15}/urwid/event_loop/tornado_loop.py +0 -0
  275. {urwid-2.6.13 → urwid-2.6.15}/urwid/event_loop/trio_loop.py +0 -0
  276. {urwid-2.6.13 → urwid-2.6.15}/urwid/event_loop/twisted_loop.py +0 -0
  277. {urwid-2.6.13 → urwid-2.6.15}/urwid/event_loop/zmq_loop.py +0 -0
  278. {urwid-2.6.13 → urwid-2.6.15}/urwid/font.py +0 -0
  279. {urwid-2.6.13 → urwid-2.6.15}/urwid/graphics.py +0 -0
  280. {urwid-2.6.13 → urwid-2.6.15}/urwid/numedit.py +0 -0
  281. {urwid-2.6.13 → urwid-2.6.15}/urwid/signals.py +0 -0
  282. {urwid-2.6.13 → urwid-2.6.15}/urwid/split_repr.py +0 -0
  283. {urwid-2.6.13 → urwid-2.6.15}/urwid/str_util.py +0 -0
  284. {urwid-2.6.13 → urwid-2.6.15}/urwid/text_layout.py +0 -0
  285. {urwid-2.6.13 → urwid-2.6.15}/urwid/util.py +0 -0
  286. {urwid-2.6.13 → urwid-2.6.15}/urwid/vterm.py +0 -0
  287. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/__init__.py +0 -0
  288. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/attr_map.py +0 -0
  289. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/attr_wrap.py +0 -0
  290. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/bar_graph.py +0 -0
  291. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/big_text.py +0 -0
  292. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/box_adapter.py +0 -0
  293. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/columns.py +0 -0
  294. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/constants.py +0 -0
  295. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/container.py +0 -0
  296. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/divider.py +0 -0
  297. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/edit.py +0 -0
  298. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/filler.py +0 -0
  299. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/frame.py +0 -0
  300. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/line_box.py +0 -0
  301. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/monitored_list.py +0 -0
  302. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/overlay.py +0 -0
  303. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/padding.py +0 -0
  304. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/pile.py +0 -0
  305. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/popup.py +0 -0
  306. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/progress_bar.py +0 -0
  307. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/solid_fill.py +0 -0
  308. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/text.py +0 -0
  309. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/treetools.py +0 -0
  310. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/widget.py +0 -0
  311. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/widget_decoration.py +0 -0
  312. {urwid-2.6.13 → urwid-2.6.15}/urwid/widget/wimp.py +0 -0
  313. {urwid-2.6.13 → urwid-2.6.15}/urwid/wimp.py +0 -0
  314. {urwid-2.6.13 → urwid-2.6.15}/urwid.egg-info/SOURCES.txt +0 -0
  315. {urwid-2.6.13 → urwid-2.6.15}/urwid.egg-info/dependency_links.txt +0 -0
  316. {urwid-2.6.13 → urwid-2.6.15}/urwid.egg-info/not-zip-safe +0 -0
  317. {urwid-2.6.13 → urwid-2.6.15}/urwid.egg-info/requires.txt +0 -0
  318. {urwid-2.6.13 → urwid-2.6.15}/urwid.egg-info/top_level.txt +0 -0
@@ -26,7 +26,7 @@ repos:
26
26
 
27
27
  - repo: https://github.com/astral-sh/ruff-pre-commit
28
28
  # Ruff version.
29
- rev: v0.4.7
29
+ rev: v0.5.0
30
30
  hooks:
31
31
  - id: ruff
32
32
  args: [ --fix, --exit-non-zero-on-fix ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: urwid
3
- Version: 2.6.13
3
+ Version: 2.6.15
4
4
  Summary: A full-featured console (xterm et al.) user interface library
5
5
  Home-page: https://urwid.org/
6
6
  Author-email: Ian Ward <ian@excess.org>
@@ -34,8 +34,8 @@ def received_output(data: bytes) -> bool:
34
34
 
35
35
 
36
36
  write_fd = loop.watch_pipe(received_output)
37
- with subprocess.Popen(
38
- ["python", "-u", run_me, str(factor_me)], # noqa: S603,S607 # Example can be insecure
37
+ with subprocess.Popen( # noqa: S603
38
+ ["python", "-u", run_me, str(factor_me)], # noqa: S607 # Example can be insecure
39
39
  stdout=write_fd,
40
40
  close_fds=True,
41
41
  ) as proc:
@@ -34,8 +34,8 @@ def received_output(data: bytes) -> bool:
34
34
 
35
35
 
36
36
  write_fd = loop.watch_pipe(received_output)
37
- with subprocess.Popen(
38
- ["python", "-u", run_me, str(factor_me)], # noqa: S603,S607 # Example can be insecure
37
+ with subprocess.Popen( # noqa: S603
38
+ ["python", "-u", run_me, str(factor_me)], # noqa: S607 # Example can be insecure
39
39
  stdout=write_fd,
40
40
  close_fds=True,
41
41
  ) as proc:
@@ -0,0 +1 @@
1
+ pylint==3.2.5
@@ -0,0 +1 @@
1
+ ruff==0.5.0
@@ -2,7 +2,7 @@ tornado>=5
2
2
  twisted
3
3
  trio
4
4
  zmq
5
- exceptiongroups;python_version<'3.11'
5
+ exceptiongroup;python_version<'3.11'
6
6
  windows-curses;sys_platform=="win32"
7
7
  pyserial
8
8
  # for test run
@@ -204,3 +204,27 @@ class GridFlowTest(unittest.TestCase):
204
204
  gf.set_focus(t1)
205
205
  self.assertEqual(gf.focus_position, 0)
206
206
  self.assertRaises(ValueError, lambda: gf.set_focus("nonexistant"))
207
+
208
+ def test_empty(self):
209
+ """Test behaviour of empty widget."""
210
+ grid = urwid.GridFlow(
211
+ (),
212
+ cell_width=10,
213
+ h_sep=1,
214
+ v_sep=1,
215
+ align=urwid.CENTER,
216
+ )
217
+ self.assertEqual(frozenset((urwid.FLOW,)), grid.sizing(), "Empty grid can not be handled as FIXED")
218
+ rows = 1
219
+ with self.subTest("Flow"):
220
+ maxcol = 1
221
+ self.assertEqual((maxcol, rows), grid.pack((maxcol,)))
222
+ rendered = grid.render((maxcol,))
223
+ self.assertEqual(maxcol, rendered.cols())
224
+ self.assertEqual(rows, rendered.rows())
225
+
226
+ with self.subTest("Fixed"):
227
+ maxcol = 0
228
+ self.assertEqual((maxcol, rows), grid.pack(()))
229
+ with self.assertRaises(ValueError):
230
+ grid.render(())
@@ -133,11 +133,11 @@ class TestScrollBarScrollable(unittest.TestCase):
133
133
 
134
134
  self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
135
135
 
136
- widget.mouse_event(reduced_size, "mouse press", 5, 1, 1, False)
136
+ self.assertTrue(widget.mouse_event(reduced_size, "mouse press", 5, 1, 1, False))
137
137
 
138
138
  self.assertEqual(pos_1_down_rendered, widget.render(reduced_size).decoded_text)
139
139
 
140
- widget.mouse_event(reduced_size, "mouse press", 4, 1, 1, False)
140
+ self.assertTrue(widget.mouse_event(reduced_size, "mouse press", 4, 1, 1, False))
141
141
 
142
142
  self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
143
143
 
@@ -283,14 +283,29 @@ class TestScrollBarListBox(unittest.TestCase):
283
283
 
284
284
  self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
285
285
 
286
- widget.mouse_event(reduced_size, "mouse press", 5, 1, 1, False)
286
+ self.assertTrue(widget.mouse_event(reduced_size, "mouse press", 5, 1, 1, False))
287
287
 
288
288
  self.assertEqual(pos_1_down_rendered, widget.render(reduced_size).decoded_text)
289
289
 
290
- widget.mouse_event(reduced_size, "mouse press", 4, 1, 1, False)
290
+ self.assertTrue(widget.mouse_event(reduced_size, "mouse press", 4, 1, 1, False))
291
291
 
292
292
  self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
293
293
 
294
+ def test_empty(self):
295
+ """Empty widget should be correctly rendered."""
296
+ widget = urwid.ScrollBar(urwid.ListBox(urwid.SimpleListWalker(())))
297
+ reduced_size = (10, 5)
298
+ self.assertEqual(
299
+ (
300
+ " ",
301
+ " ",
302
+ " ",
303
+ " ",
304
+ " ",
305
+ ),
306
+ widget.render(reduced_size).decoded_text,
307
+ )
308
+
294
309
 
295
310
  def trivial_AttrMap(widget):
296
311
  return urwid.AttrMap(widget, {})
@@ -401,11 +416,11 @@ class TestScrollBarAttrMap(unittest.TestCase):
401
416
 
402
417
  self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
403
418
 
404
- widget.mouse_event(reduced_size, "mouse press", 5, 1, 1, False)
419
+ self.assertTrue(widget.mouse_event(reduced_size, "mouse press", 5, 1, 1, False))
405
420
 
406
421
  self.assertEqual(pos_1_down_rendered, widget.render(reduced_size).decoded_text)
407
422
 
408
- widget.mouse_event(reduced_size, "mouse press", 4, 1, 1, False)
423
+ self.assertTrue(widget.mouse_event(reduced_size, "mouse press", 4, 1, 1, False))
409
424
 
410
425
  self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
411
426
 
@@ -479,11 +494,11 @@ class TestScrollBarListBoxAttrMap(unittest.TestCase):
479
494
 
480
495
  self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
481
496
 
482
- widget.mouse_event(reduced_size, "mouse press", 5, 1, 1, False)
497
+ self.assertTrue(widget.mouse_event(reduced_size, "mouse press", 5, 1, 1, False))
483
498
 
484
499
  self.assertEqual(pos_1_down_rendered, widget.render(reduced_size).decoded_text)
485
500
 
486
- widget.mouse_event(reduced_size, "mouse press", 4, 1, 1, False)
501
+ self.assertTrue(widget.mouse_event(reduced_size, "mouse press", 4, 1, 1, False))
487
502
 
488
503
  self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
489
504
 
@@ -518,11 +533,11 @@ class TestScrollBarListBoxAttrMap(unittest.TestCase):
518
533
 
519
534
  self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
520
535
 
521
- widget.mouse_event(reduced_size, "mouse press", 5, 1, 1, False)
536
+ self.assertTrue(widget.mouse_event(reduced_size, "mouse press", 5, 1, 1, False))
522
537
 
523
538
  self.assertEqual(pos_1_down_rendered, widget.render(reduced_size).decoded_text)
524
539
 
525
- widget.mouse_event(reduced_size, "mouse press", 4, 1, 1, False)
540
+ self.assertTrue(widget.mouse_event(reduced_size, "mouse press", 4, 1, 1, False))
526
541
 
527
542
  self.assertEqual(top_position_rendered, widget.render(reduced_size).decoded_text)
528
543
 
@@ -148,8 +148,8 @@ class Screen(_raw_display_base.Screen):
148
148
  if not os.environ.get("TERM", "").lower().startswith("linux"):
149
149
  return
150
150
 
151
- m = Popen( # pylint: disable=consider-using-with
152
- ["/usr/bin/mev", "-e", "158"], # noqa: S603
151
+ m = Popen( # noqa: S603 # pylint: disable=consider-using-with
152
+ ["/usr/bin/mev", "-e", "158"],
153
153
  stdin=PIPE,
154
154
  stdout=PIPE,
155
155
  close_fds=True,
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '2.6.13'
16
- __version_tuple__ = version_tuple = (2, 6, 13)
15
+ __version__ = version = '2.6.15'
16
+ __version_tuple__ = version_tuple = (2, 6, 15)
@@ -30,13 +30,18 @@ class GridFlowWarning(WidgetWarning):
30
30
 
31
31
  class GridFlow(WidgetWrap[Pile], WidgetContainerMixin, WidgetContainerListContentsMixin):
32
32
  """
33
- The GridFlow widget is a flow widget that renders all the widgets it
34
- contains the same width and it arranges them from left to right and top to
35
- bottom.
33
+ The GridFlow widget is a flow widget that renders all the widgets it contains the same width,
34
+ and it arranges them from left to right and top to bottom.
36
35
  """
37
36
 
38
37
  def sizing(self) -> frozenset[Sizing]:
39
- return frozenset((Sizing.FLOW, Sizing.FIXED))
38
+ """Widget sizing.
39
+
40
+ ..note:: Empty widget sizing is limited to the FLOW due to no data for width.
41
+ """
42
+ if self:
43
+ return frozenset((Sizing.FLOW, Sizing.FIXED))
44
+ return frozenset((Sizing.FLOW,))
40
45
 
41
46
  def __init__(
42
47
  self,
@@ -422,14 +427,16 @@ class GridFlow(WidgetWrap[Pile], WidgetContainerMixin, WidgetContainerListConten
422
427
  def _get_maxcol(self, size: tuple[int] | tuple[()]) -> int:
423
428
  if size:
424
429
  (maxcol,) = size
425
- if maxcol < self.cell_width:
430
+ if self and maxcol < self.cell_width:
426
431
  warnings.warn(
427
432
  f"Size is smaller than cell width ({maxcol!r} < {self.cell_width!r})",
428
433
  GridFlowWarning,
429
434
  stacklevel=3,
430
435
  )
431
- else:
436
+ elif self:
432
437
  maxcol = len(self) * self.cell_width + (len(self) - 1) * self.h_sep
438
+ else:
439
+ maxcol = 0
433
440
  return maxcol
434
441
 
435
442
  def get_display_widget(self, size: tuple[int] | tuple[()]) -> Divider | Pile:
@@ -525,7 +532,7 @@ class GridFlow(WidgetWrap[Pile], WidgetContainerMixin, WidgetContainerListConten
525
532
 
526
533
  def keypress(
527
534
  self,
528
- size: tuple[int], # type: ignore[override]
535
+ size: tuple[int] | tuple[()], # type: ignore[override]
529
536
  key: str,
530
537
  ) -> str | None:
531
538
  """
@@ -545,7 +552,10 @@ class GridFlow(WidgetWrap[Pile], WidgetContainerMixin, WidgetContainerListConten
545
552
  ) -> tuple[int, int]:
546
553
  if size:
547
554
  return super().pack(size, focus)
548
- cols = len(self) * self.cell_width + (len(self) - 1) * self.h_sep
555
+ if self:
556
+ cols = len(self) * self.cell_width + (len(self) - 1) * self.h_sep
557
+ else:
558
+ cols = 0
549
559
  return cols, self.rows((cols,), focus)
550
560
 
551
561
  def rows(self, size: tuple[int], focus: bool = False) -> int:
@@ -645,17 +645,18 @@ class ListBox(Widget, WidgetContainerMixin):
645
645
  rows = 0
646
646
 
647
647
  focused_w, idx = self.body.get_focus()
648
- rows += focused_w.rows((cols,), focus)
649
-
650
- prev, pos = self._body.get_prev(idx)
651
- while prev is not None:
652
- rows += prev.rows((cols,), False)
653
- prev, pos = self._body.get_prev(pos)
654
-
655
- next_, pos = self.body.get_next(idx)
656
- while next_ is not None:
657
- rows += next_.rows((cols,), True)
658
- next_, pos = self._body.get_next(pos)
648
+ if focused_w:
649
+ rows += focused_w.rows((cols,), focus)
650
+
651
+ prev, pos = self._body.get_prev(idx)
652
+ while prev is not None:
653
+ rows += prev.rows((cols,), False)
654
+ prev, pos = self._body.get_prev(pos)
655
+
656
+ next_, pos = self.body.get_next(idx)
657
+ while next_ is not None:
658
+ rows += next_.rows((cols,), True)
659
+ next_, pos = self._body.get_next(pos)
659
660
 
660
661
  self._rows_max_cached = rows
661
662
 
@@ -668,4 +668,4 @@ class ScrollBar(WidgetDecoration[WrappedWidget]):
668
668
  ow.set_scrollpos(pos + 1)
669
669
  return True
670
670
 
671
- return False
671
+ return handled
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: urwid
3
- Version: 2.6.13
3
+ Version: 2.6.15
4
4
  Summary: A full-featured console (xterm et al.) user interface library
5
5
  Home-page: https://urwid.org/
6
6
  Author-email: Ian Ward <ian@excess.org>
@@ -1 +0,0 @@
1
- pylint==3.2.2
@@ -1 +0,0 @@
1
- ruff==0.4.7
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