urwid 2.6.11__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.
Files changed (318) hide show
  1. {urwid-2.6.11 → urwid-2.6.12}/PKG-INFO +1 -1
  2. urwid-2.6.12/black-requirements.txt +1 -0
  3. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/real_browse.py +1 -4
  4. {urwid-2.6.11 → urwid-2.6.12}/examples/browse.py +1 -4
  5. {urwid-2.6.11 → urwid-2.6.12}/examples/calc.py +1 -3
  6. urwid-2.6.12/ruff-requirements.txt +1 -0
  7. {urwid-2.6.11 → urwid-2.6.12}/tests/test_scrollable.py +196 -0
  8. {urwid-2.6.11 → urwid-2.6.12}/urwid/canvas.py +1 -1
  9. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/_raw_display_base.py +1 -3
  10. {urwid-2.6.11 → urwid-2.6.12}/urwid/version.py +2 -2
  11. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/bar_graph.py +2 -2
  12. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/scrollable.py +13 -7
  13. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/widget_decoration.py +4 -0
  14. {urwid-2.6.11 → urwid-2.6.12}/urwid.egg-info/PKG-INFO +1 -1
  15. urwid-2.6.11/black-requirements.txt +0 -1
  16. urwid-2.6.11/ruff-requirements.txt +0 -1
  17. {urwid-2.6.11 → urwid-2.6.12}/.coveralls.yml +0 -0
  18. {urwid-2.6.11 → urwid-2.6.12}/.devcontainer/dev.dockerfile +0 -0
  19. {urwid-2.6.11 → urwid-2.6.12}/.devcontainer/devcontainer.json +0 -0
  20. {urwid-2.6.11 → urwid-2.6.12}/.dockerignore +0 -0
  21. {urwid-2.6.11 → urwid-2.6.12}/.editorconfig +0 -0
  22. {urwid-2.6.11 → urwid-2.6.12}/.github/CODE_OF_CONDUCT.md +0 -0
  23. {urwid-2.6.11 → urwid-2.6.12}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  24. {urwid-2.6.11 → urwid-2.6.12}/.github/ISSUE_TEMPLATE/docs.md +0 -0
  25. {urwid-2.6.11 → urwid-2.6.12}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  26. {urwid-2.6.11 → urwid-2.6.12}/.github/ISSUE_TEMPLATE/question.md +0 -0
  27. {urwid-2.6.11 → urwid-2.6.12}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  28. {urwid-2.6.11 → urwid-2.6.12}/.github/dependabot.yml +0 -0
  29. {urwid-2.6.11 → urwid-2.6.12}/.github/labeler.yml +0 -0
  30. {urwid-2.6.11 → urwid-2.6.12}/.github/release.yml +0 -0
  31. {urwid-2.6.11 → urwid-2.6.12}/.github/workflows/documentation.yml +0 -0
  32. {urwid-2.6.11 → urwid-2.6.12}/.github/workflows/isolated_static_check.yml +0 -0
  33. {urwid-2.6.11 → urwid-2.6.12}/.github/workflows/labels.yml +0 -0
  34. {urwid-2.6.11 → urwid-2.6.12}/.github/workflows/pythonpackage.yml +0 -0
  35. {urwid-2.6.11 → urwid-2.6.12}/.github/workflows/yamllint.yml +0 -0
  36. {urwid-2.6.11 → urwid-2.6.12}/.gitignore +0 -0
  37. {urwid-2.6.11 → urwid-2.6.12}/.pre-commit-config.yaml +0 -0
  38. {urwid-2.6.11 → urwid-2.6.12}/.yamllint.yml +0 -0
  39. {urwid-2.6.11 → urwid-2.6.12}/COPYING +0 -0
  40. {urwid-2.6.11 → urwid-2.6.12}/MANIFEST.in +0 -0
  41. {urwid-2.6.11 → urwid-2.6.12}/README.rst +0 -0
  42. {urwid-2.6.11 → urwid-2.6.12}/classifiers.txt +0 -0
  43. {urwid-2.6.11 → urwid-2.6.12}/docs/Makefile +0 -0
  44. {urwid-2.6.11 → urwid-2.6.12}/docs/changelog.rst +0 -0
  45. {urwid-2.6.11 → urwid-2.6.12}/docs/conf.py +0 -0
  46. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/bigtext.py +0 -0
  47. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/bigtext.py.xdotool +0 -0
  48. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/bigtext1.png +0 -0
  49. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/bigtext2.png +0 -0
  50. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/bigtext3.png +0 -0
  51. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/browse.py +0 -0
  52. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/browse.py.xdotool +0 -0
  53. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/browse1.png +0 -0
  54. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/browse2.png +0 -0
  55. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/edit.py +0 -0
  56. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/edit.py.xdotool +0 -0
  57. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/edit1.png +0 -0
  58. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/edit2.png +0 -0
  59. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/edit_text.txt +0 -0
  60. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/graph.py +0 -0
  61. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/graph.py.xdotool +0 -0
  62. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/graph1.png +0 -0
  63. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/graph2.png +0 -0
  64. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/index.rst +0 -0
  65. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/palette_test.py +0 -0
  66. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/palette_test.py.xdotool +0 -0
  67. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/palette_test1.png +0 -0
  68. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/palette_test2.png +0 -0
  69. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/pop_up.py +0 -0
  70. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/pop_up.py.xdotool +0 -0
  71. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/pop_up1.png +0 -0
  72. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/pop_up2.png +0 -0
  73. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/real_edit.py +0 -0
  74. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/subproc.py +0 -0
  75. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/subproc.py.xdotool +0 -0
  76. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/subproc1.png +0 -0
  77. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/subproc2.png +0 -0
  78. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/subproc2.py +0 -0
  79. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/tour.py +0 -0
  80. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/tour.py.xdotool +0 -0
  81. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/tour1.png +0 -0
  82. {urwid-2.6.11 → urwid-2.6.12}/docs/examples/tour2.png +0 -0
  83. {urwid-2.6.11 → urwid-2.6.12}/docs/index.rst +0 -0
  84. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/bright_combinations.py +0 -0
  85. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/bright_combinations.py.xdotool +0 -0
  86. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/bright_combinations1.png +0 -0
  87. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/canvascache.rst +0 -0
  88. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/displayattributes.rst +0 -0
  89. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/displaymodules.rst +0 -0
  90. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/encodings.rst +0 -0
  91. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/images/display_modules.png +0 -0
  92. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/images/introduction.png +0 -0
  93. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/images/urwid_widgets.svgz +0 -0
  94. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/images/urwid_widgets_1.png +0 -0
  95. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/images/urwid_widgets_1.xcf +0 -0
  96. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/images/urwid_widgets_2.png +0 -0
  97. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/images/urwid_widgets_2.xcf +0 -0
  98. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/images/widget_layout.png +0 -0
  99. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/index.rst +0 -0
  100. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/mainloop.rst +0 -0
  101. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/overview.rst +0 -0
  102. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/safe_combinations.py +0 -0
  103. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/safe_combinations.py.xdotool +0 -0
  104. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/safe_combinations1.png +0 -0
  105. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/textlayout.rst +0 -0
  106. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/userinput.rst +0 -0
  107. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/wanat.py +0 -0
  108. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/wanat_multi.py +0 -0
  109. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/wcur1.py +0 -0
  110. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/wcur2.py +0 -0
  111. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/widgets.rst +0 -0
  112. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/wmod.py +0 -0
  113. {urwid-2.6.11 → urwid-2.6.12}/docs/manual/wsel.py +0 -0
  114. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/attrspec.rst +0 -0
  115. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/canvas.rst +0 -0
  116. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/command_map.rst +0 -0
  117. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/constants.rst +0 -0
  118. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/deprecated.rst +0 -0
  119. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/display_modules.rst +0 -0
  120. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/exceptions.rst +0 -0
  121. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/global_settings.rst +0 -0
  122. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/index.rst +0 -0
  123. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/list_walkers.rst +0 -0
  124. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/main_loop.rst +0 -0
  125. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/meta.rst +0 -0
  126. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/signals.rst +0 -0
  127. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/text_layout.rst +0 -0
  128. {urwid-2.6.11 → urwid-2.6.12}/docs/reference/widget.rst +0 -0
  129. {urwid-2.6.11 → urwid-2.6.12}/docs/tools/compile_pngs.sh +0 -0
  130. {urwid-2.6.11 → urwid-2.6.12}/docs/tools/screenshots.sh +0 -0
  131. {urwid-2.6.11 → urwid-2.6.12}/docs/tools/static/.placeholder +0 -0
  132. {urwid-2.6.11 → urwid-2.6.12}/docs/tools/templates/indexcontent.html +0 -0
  133. {urwid-2.6.11 → urwid-2.6.12}/docs/tools/templates/indexsidebar.html +0 -0
  134. {urwid-2.6.11 → urwid-2.6.12}/docs/tools/templates/localtoc.html +0 -0
  135. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/adventure.py +0 -0
  136. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/adventure.py.xdotool +0 -0
  137. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/adventure1.png +0 -0
  138. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/adventure2.png +0 -0
  139. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/adventure3.png +0 -0
  140. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/adventure4.png +0 -0
  141. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/cmenu.py +0 -0
  142. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/cmenu.py.xdotool +0 -0
  143. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/cmenu1.png +0 -0
  144. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/cmenu2.png +0 -0
  145. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/cmenu3.png +0 -0
  146. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/cmenu4.png +0 -0
  147. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/highcolors.py +0 -0
  148. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/highcolors.py.xdotool +0 -0
  149. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/highcolors1.png +0 -0
  150. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/hmenu.py +0 -0
  151. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/hmenu.py.xdotool +0 -0
  152. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/hmenu1.png +0 -0
  153. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/hmenu2.png +0 -0
  154. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/hmenu3.png +0 -0
  155. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/hmenu4.png +0 -0
  156. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/index.rst +0 -0
  157. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/input.py +0 -0
  158. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/input.py.xdotool +0 -0
  159. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/input1.png +0 -0
  160. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/input2.png +0 -0
  161. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/input3.png +0 -0
  162. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/input4.png +0 -0
  163. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/input5.png +0 -0
  164. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/menu25.png +0 -0
  165. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/minimal.py +0 -0
  166. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/minimal.py.xdotool +0 -0
  167. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/minimal1.png +0 -0
  168. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/multiple.py +0 -0
  169. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/multiple.py.xdotool +0 -0
  170. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/multiple1.png +0 -0
  171. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/multiple2.png +0 -0
  172. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/multiple3.png +0 -0
  173. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/multiple4.png +0 -0
  174. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/qa.py +0 -0
  175. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/qa.py.xdotool +0 -0
  176. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/qa1.png +0 -0
  177. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/qa2.png +0 -0
  178. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/qa3.png +0 -0
  179. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/sig.py +0 -0
  180. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/sig.py.xdotool +0 -0
  181. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/sig1.png +0 -0
  182. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/sig2.png +0 -0
  183. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/sig3.png +0 -0
  184. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/sig4.png +0 -0
  185. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/smenu.py +0 -0
  186. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/smenu.py.xdotool +0 -0
  187. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/smenu1.png +0 -0
  188. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/smenu2.png +0 -0
  189. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/smenu3.png +0 -0
  190. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/urwid_attr.py +0 -0
  191. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/urwid_attr.py.xdotool +0 -0
  192. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/urwid_attr1.png +0 -0
  193. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/urwid_attr2.png +0 -0
  194. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/urwid_attr3.png +0 -0
  195. {urwid-2.6.11 → urwid-2.6.12}/docs/tutorial/urwid_attr4.png +0 -0
  196. {urwid-2.6.11 → urwid-2.6.12}/docs/urwid-logo.png +0 -0
  197. {urwid-2.6.11 → urwid-2.6.12}/examples/asyncio_socket_server.py +0 -0
  198. {urwid-2.6.11 → urwid-2.6.12}/examples/bigtext.py +0 -0
  199. {urwid-2.6.11 → urwid-2.6.12}/examples/dialog.py +0 -0
  200. {urwid-2.6.11 → urwid-2.6.12}/examples/edit.py +0 -0
  201. {urwid-2.6.11 → urwid-2.6.12}/examples/fib.py +0 -0
  202. {urwid-2.6.11 → urwid-2.6.12}/examples/graph.py +0 -0
  203. {urwid-2.6.11 → urwid-2.6.12}/examples/input_test.py +0 -0
  204. {urwid-2.6.11 → urwid-2.6.12}/examples/lcd_cf635.py +0 -0
  205. {urwid-2.6.11 → urwid-2.6.12}/examples/palette_test.py +0 -0
  206. {urwid-2.6.11 → urwid-2.6.12}/examples/pop_up.py +0 -0
  207. {urwid-2.6.11 → urwid-2.6.12}/examples/subproc.py +0 -0
  208. {urwid-2.6.11 → urwid-2.6.12}/examples/subproc2.py +0 -0
  209. {urwid-2.6.11 → urwid-2.6.12}/examples/terminal.py +0 -0
  210. {urwid-2.6.11 → urwid-2.6.12}/examples/tour.py +0 -0
  211. {urwid-2.6.11 → urwid-2.6.12}/examples/treesample.py +0 -0
  212. {urwid-2.6.11 → urwid-2.6.12}/examples/twisted_serve_ssh.py +0 -0
  213. {urwid-2.6.11 → urwid-2.6.12}/examples/twisted_serve_ssh.tac +0 -0
  214. {urwid-2.6.11 → urwid-2.6.12}/isort-requirements.txt +0 -0
  215. {urwid-2.6.11 → urwid-2.6.12}/pylint-requirements.txt +0 -0
  216. {urwid-2.6.11 → urwid-2.6.12}/pyproject.toml +0 -0
  217. {urwid-2.6.11 → urwid-2.6.12}/requirements.txt +0 -0
  218. {urwid-2.6.11 → urwid-2.6.12}/setup.cfg +0 -0
  219. {urwid-2.6.11 → urwid-2.6.12}/setup.py +0 -0
  220. {urwid-2.6.11 → urwid-2.6.12}/test_requirements.txt +0 -0
  221. {urwid-2.6.11 → urwid-2.6.12}/tests/__init__.py +0 -0
  222. {urwid-2.6.11 → urwid-2.6.12}/tests/test_canvas.py +0 -0
  223. {urwid-2.6.11 → urwid-2.6.12}/tests/test_columns.py +0 -0
  224. {urwid-2.6.11 → urwid-2.6.12}/tests/test_container.py +0 -0
  225. {urwid-2.6.11 → urwid-2.6.12}/tests/test_doctests.py +0 -0
  226. {urwid-2.6.11 → urwid-2.6.12}/tests/test_escapes.py +0 -0
  227. {urwid-2.6.11 → urwid-2.6.12}/tests/test_event_loops.py +0 -0
  228. {urwid-2.6.11 → urwid-2.6.12}/tests/test_filler.py +0 -0
  229. {urwid-2.6.11 → urwid-2.6.12}/tests/test_floatedit.py +0 -0
  230. {urwid-2.6.11 → urwid-2.6.12}/tests/test_font.py +0 -0
  231. {urwid-2.6.11 → urwid-2.6.12}/tests/test_frame.py +0 -0
  232. {urwid-2.6.11 → urwid-2.6.12}/tests/test_graphics.py +0 -0
  233. {urwid-2.6.11 → urwid-2.6.12}/tests/test_grid_flow.py +0 -0
  234. {urwid-2.6.11 → urwid-2.6.12}/tests/test_line_box.py +0 -0
  235. {urwid-2.6.11 → urwid-2.6.12}/tests/test_listbox.py +0 -0
  236. {urwid-2.6.11 → urwid-2.6.12}/tests/test_main_loop.py +0 -0
  237. {urwid-2.6.11 → urwid-2.6.12}/tests/test_moved_imports.py +0 -0
  238. {urwid-2.6.11 → urwid-2.6.12}/tests/test_overlay.py +0 -0
  239. {urwid-2.6.11 → urwid-2.6.12}/tests/test_padding.py +0 -0
  240. {urwid-2.6.11 → urwid-2.6.12}/tests/test_pile.py +0 -0
  241. {urwid-2.6.11 → urwid-2.6.12}/tests/test_raw_display.py +0 -0
  242. {urwid-2.6.11 → urwid-2.6.12}/tests/test_signals.py +0 -0
  243. {urwid-2.6.11 → urwid-2.6.12}/tests/test_str_util.py +0 -0
  244. {urwid-2.6.11 → urwid-2.6.12}/tests/test_text_layout.py +0 -0
  245. {urwid-2.6.11 → urwid-2.6.12}/tests/test_tree.py +0 -0
  246. {urwid-2.6.11 → urwid-2.6.12}/tests/test_util.py +0 -0
  247. {urwid-2.6.11 → urwid-2.6.12}/tests/test_vterm.py +0 -0
  248. {urwid-2.6.11 → urwid-2.6.12}/tests/test_widget.py +0 -0
  249. {urwid-2.6.11 → urwid-2.6.12}/tests/util.py +0 -0
  250. {urwid-2.6.11 → urwid-2.6.12}/tox.ini +0 -0
  251. {urwid-2.6.11 → urwid-2.6.12}/urwid/__init__.py +0 -0
  252. {urwid-2.6.11 → urwid-2.6.12}/urwid/command_map.py +0 -0
  253. {urwid-2.6.11 → urwid-2.6.12}/urwid/container.py +0 -0
  254. {urwid-2.6.11 → urwid-2.6.12}/urwid/decoration.py +0 -0
  255. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/__init__.py +0 -0
  256. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/_posix_raw_display.py +0 -0
  257. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/_web.css +0 -0
  258. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/_web.js +0 -0
  259. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/_win32.py +0 -0
  260. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/_win32_raw_display.py +0 -0
  261. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/common.py +0 -0
  262. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/curses.py +0 -0
  263. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/escape.py +0 -0
  264. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/html_fragment.py +0 -0
  265. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/lcd.py +0 -0
  266. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/raw.py +0 -0
  267. {urwid-2.6.11 → urwid-2.6.12}/urwid/display/web.py +0 -0
  268. {urwid-2.6.11 → urwid-2.6.12}/urwid/event_loop/__init__.py +0 -0
  269. {urwid-2.6.11 → urwid-2.6.12}/urwid/event_loop/abstract_loop.py +0 -0
  270. {urwid-2.6.11 → urwid-2.6.12}/urwid/event_loop/asyncio_loop.py +0 -0
  271. {urwid-2.6.11 → urwid-2.6.12}/urwid/event_loop/glib_loop.py +0 -0
  272. {urwid-2.6.11 → urwid-2.6.12}/urwid/event_loop/main_loop.py +0 -0
  273. {urwid-2.6.11 → urwid-2.6.12}/urwid/event_loop/select_loop.py +0 -0
  274. {urwid-2.6.11 → urwid-2.6.12}/urwid/event_loop/tornado_loop.py +0 -0
  275. {urwid-2.6.11 → urwid-2.6.12}/urwid/event_loop/trio_loop.py +0 -0
  276. {urwid-2.6.11 → urwid-2.6.12}/urwid/event_loop/twisted_loop.py +0 -0
  277. {urwid-2.6.11 → urwid-2.6.12}/urwid/event_loop/zmq_loop.py +0 -0
  278. {urwid-2.6.11 → urwid-2.6.12}/urwid/font.py +0 -0
  279. {urwid-2.6.11 → urwid-2.6.12}/urwid/graphics.py +0 -0
  280. {urwid-2.6.11 → urwid-2.6.12}/urwid/numedit.py +0 -0
  281. {urwid-2.6.11 → urwid-2.6.12}/urwid/signals.py +0 -0
  282. {urwid-2.6.11 → urwid-2.6.12}/urwid/split_repr.py +0 -0
  283. {urwid-2.6.11 → urwid-2.6.12}/urwid/str_util.py +0 -0
  284. {urwid-2.6.11 → urwid-2.6.12}/urwid/text_layout.py +0 -0
  285. {urwid-2.6.11 → urwid-2.6.12}/urwid/util.py +0 -0
  286. {urwid-2.6.11 → urwid-2.6.12}/urwid/vterm.py +0 -0
  287. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/__init__.py +0 -0
  288. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/attr_map.py +0 -0
  289. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/attr_wrap.py +0 -0
  290. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/big_text.py +0 -0
  291. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/box_adapter.py +0 -0
  292. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/columns.py +0 -0
  293. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/constants.py +0 -0
  294. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/container.py +0 -0
  295. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/divider.py +0 -0
  296. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/edit.py +0 -0
  297. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/filler.py +0 -0
  298. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/frame.py +0 -0
  299. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/grid_flow.py +0 -0
  300. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/line_box.py +0 -0
  301. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/listbox.py +0 -0
  302. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/monitored_list.py +0 -0
  303. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/overlay.py +0 -0
  304. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/padding.py +0 -0
  305. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/pile.py +0 -0
  306. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/popup.py +0 -0
  307. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/progress_bar.py +0 -0
  308. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/solid_fill.py +0 -0
  309. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/text.py +0 -0
  310. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/treetools.py +0 -0
  311. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/widget.py +0 -0
  312. {urwid-2.6.11 → urwid-2.6.12}/urwid/widget/wimp.py +0 -0
  313. {urwid-2.6.11 → urwid-2.6.12}/urwid/wimp.py +0 -0
  314. {urwid-2.6.11 → urwid-2.6.12}/urwid.egg-info/SOURCES.txt +0 -0
  315. {urwid-2.6.11 → urwid-2.6.12}/urwid.egg-info/dependency_links.txt +0 -0
  316. {urwid-2.6.11 → urwid-2.6.12}/urwid.egg-info/not-zip-safe +0 -0
  317. {urwid-2.6.11 → urwid-2.6.12}/urwid.egg-info/requires.txt +0 -0
  318. {urwid-2.6.11 → urwid-2.6.12}/urwid.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: urwid
3
- Version: 2.6.11
3
+ Version: 2.6.12
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>
@@ -0,0 +1 @@
1
+ black==24.4.2
@@ -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
- if path_elements != _initial_cwd[: len(path_elements)]:
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:
@@ -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
- if path_elements != _initial_cwd[: len(path_elements)]:
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
- if self.op == next_cell.op == "+":
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."""
@@ -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] = row[-1] + cview[2]
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
- if row[0][2].strip():
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:
@@ -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.11'
16
- __version_tuple__ = version_tuple = (2, 6, 11)
15
+ __version__ = version = '2.6.12'
16
+ __version_tuple__ = version_tuple = (2, 6, 12)
@@ -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 = r % 8
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 = y_count + 1
511
+ y_count += 1
512
512
  continue
513
513
  if y_count:
514
514
  rowsets.append((y_count, last))
@@ -137,6 +137,17 @@ class SupportsRelativeScroll(WidgetProto, Protocol):
137
137
  def get_visible_amount(self, size: tuple[int, int], focus: bool = False) -> int: ...
138
138
 
139
139
 
140
+ def orig_iter(w: Widget) -> Iterator[Widget]:
141
+ visited = {w}
142
+ yield w
143
+ while hasattr(w, "original_widget"):
144
+ w = w.original_widget
145
+ if w in visited:
146
+ break
147
+ visited.add(w)
148
+ yield w
149
+
150
+
140
151
  class Scrollable(WidgetDecoration[WrappedWidget]):
141
152
  def sizing(self) -> frozenset[Sizing]:
142
153
  return frozenset((Sizing.BOX,))
@@ -481,7 +492,8 @@ class ScrollBar(WidgetDecoration[WrappedWidget]):
481
492
  """
482
493
  if Sizing.BOX not in widget.sizing():
483
494
  raise ValueError(f"Not a box widget: {widget!r}")
484
- if not isinstance(widget, SupportsScroll):
495
+
496
+ if not any(isinstance(w, SupportsScroll) for w in orig_iter(widget)):
485
497
  raise TypeError(f"Not a scrollable widget: {widget!r}")
486
498
 
487
499
  super().__init__(widget)
@@ -612,12 +624,6 @@ class ScrollBar(WidgetDecoration[WrappedWidget]):
612
624
  def scrolling_base_widget(self) -> SupportsScroll | SupportsRelativeScroll:
613
625
  """Nearest `original_widget` that is compatible with the scrolling API"""
614
626
 
615
- def orig_iter(w: Widget) -> Iterator[Widget]:
616
- while hasattr(w, "original_widget"):
617
- w = w.original_widget
618
- yield w
619
- yield w
620
-
621
627
  w = self
622
628
 
623
629
  for w in orig_iter(self):
@@ -105,9 +105,13 @@ class WidgetDecoration(Widget, typing.Generic[WrappedWidget]): # pylint: disabl
105
105
  >>> wd3.base_widget is t
106
106
  True
107
107
  """
108
+ visited = {self}
108
109
  w = self
109
110
  while hasattr(w, "_original_widget"):
110
111
  w = w._original_widget
112
+ if w in visited:
113
+ break
114
+ visited.add(w)
111
115
  return w
112
116
 
113
117
  def _get_base_widget(self) -> Widget:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: urwid
3
- Version: 2.6.11
3
+ Version: 2.6.12
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
- black==24.4.0
@@ -1 +0,0 @@
1
- ruff==0.4.1
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