urwid 4.0.1__tar.gz → 4.0.3__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 (316) hide show
  1. {urwid-4.0.1 → urwid-4.0.3}/.github/workflows/documentation.yml +1 -1
  2. {urwid-4.0.1 → urwid-4.0.3}/.github/workflows/isolated_static_check.yml +3 -3
  3. {urwid-4.0.1 → urwid-4.0.3}/.github/workflows/pythonpackage.yml +6 -6
  4. {urwid-4.0.1 → urwid-4.0.3}/.github/workflows/yamllint.yml +1 -1
  5. {urwid-4.0.1 → urwid-4.0.3}/.pre-commit-config.yaml +13 -7
  6. {urwid-4.0.1 → urwid-4.0.3}/PKG-INFO +5 -4
  7. {urwid-4.0.1 → urwid-4.0.3}/docs/changelog.rst +49 -0
  8. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/bigtext.py +0 -1
  9. {urwid-4.0.1 → urwid-4.0.3}/examples/bigtext.py +0 -1
  10. {urwid-4.0.1 → urwid-4.0.3}/examples/twisted_serve_ssh.py +2 -11
  11. {urwid-4.0.1 → urwid-4.0.3}/pyproject.toml +251 -212
  12. urwid-4.0.3/requirements.txt +2 -0
  13. urwid-4.0.3/ruff-requirements.txt +1 -0
  14. {urwid-4.0.1 → urwid-4.0.3}/tests/test_canvas.py +0 -8
  15. {urwid-4.0.1 → urwid-4.0.3}/tests/test_listbox.py +25 -0
  16. {urwid-4.0.1 → urwid-4.0.3}/urwid/__init__.py +203 -1
  17. {urwid-4.0.1 → urwid-4.0.3}/urwid/canvas.py +214 -134
  18. {urwid-4.0.1 → urwid-4.0.3}/urwid/command_map.py +11 -1
  19. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/__init__.py +4 -4
  20. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/_posix_raw_display.py +49 -28
  21. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/_raw_display_base.py +166 -132
  22. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/_win32.py +24 -11
  23. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/_win32_raw_display.py +19 -7
  24. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/common.py +41 -30
  25. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/curses.py +34 -29
  26. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/escape.py +62 -44
  27. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/html_fragment.py +15 -8
  28. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/lcd.py +13 -13
  29. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/raw.py +1 -1
  30. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/web.py +26 -20
  31. {urwid-4.0.1 → urwid-4.0.3}/urwid/event_loop/abstract_loop.py +13 -6
  32. {urwid-4.0.1 → urwid-4.0.3}/urwid/event_loop/asyncio_loop.py +3 -3
  33. {urwid-4.0.1 → urwid-4.0.3}/urwid/event_loop/glib_loop.py +8 -9
  34. {urwid-4.0.1 → urwid-4.0.3}/urwid/event_loop/main_loop.py +11 -10
  35. {urwid-4.0.1 → urwid-4.0.3}/urwid/event_loop/tornado_loop.py +6 -3
  36. {urwid-4.0.1 → urwid-4.0.3}/urwid/event_loop/trio_loop.py +16 -13
  37. {urwid-4.0.1 → urwid-4.0.3}/urwid/event_loop/twisted_loop.py +25 -16
  38. {urwid-4.0.1 → urwid-4.0.3}/urwid/event_loop/zmq_loop.py +11 -12
  39. {urwid-4.0.1 → urwid-4.0.3}/urwid/graphics.py +9 -4
  40. {urwid-4.0.1 → urwid-4.0.3}/urwid/numedit.py +27 -25
  41. urwid-4.0.3/urwid/py.typed +0 -0
  42. {urwid-4.0.1 → urwid-4.0.3}/urwid/signals.py +15 -9
  43. {urwid-4.0.1 → urwid-4.0.3}/urwid/split_repr.py +18 -10
  44. {urwid-4.0.1 → urwid-4.0.3}/urwid/str_util.py +2 -2
  45. {urwid-4.0.1 → urwid-4.0.3}/urwid/text_layout.py +119 -66
  46. {urwid-4.0.1 → urwid-4.0.3}/urwid/util.py +59 -34
  47. {urwid-4.0.1 → urwid-4.0.3}/urwid/version.py +3 -3
  48. {urwid-4.0.1 → urwid-4.0.3}/urwid/vterm.py +83 -60
  49. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/attr_map.py +11 -7
  50. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/attr_wrap.py +12 -6
  51. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/bar_graph.py +12 -2
  52. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/big_text.py +9 -7
  53. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/box_adapter.py +1 -1
  54. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/columns.py +136 -64
  55. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/constants.py +6 -6
  56. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/container.py +40 -15
  57. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/edit.py +8 -6
  58. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/filler.py +1 -1
  59. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/frame.py +26 -23
  60. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/grid_flow.py +27 -19
  61. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/line_box.py +3 -1
  62. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/listbox.py +29 -3
  63. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/monitored_list.py +5 -2
  64. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/overlay.py +41 -22
  65. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/pile.py +146 -77
  66. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/popup.py +4 -4
  67. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/progress_bar.py +5 -5
  68. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/scrollable.py +20 -14
  69. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/text.py +14 -10
  70. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/treetools.py +12 -10
  71. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/widget.py +59 -30
  72. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/widget_decoration.py +1 -1
  73. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/wimp.py +26 -12
  74. {urwid-4.0.1 → urwid-4.0.3}/urwid.egg-info/PKG-INFO +5 -4
  75. {urwid-4.0.1 → urwid-4.0.3}/urwid.egg-info/SOURCES.txt +3 -0
  76. {urwid-4.0.1 → urwid-4.0.3}/urwid.egg-info/requires.txt +2 -1
  77. urwid-4.0.3/urwid.egg-info/scm_file_list.json +307 -0
  78. urwid-4.0.3/urwid.egg-info/scm_version.json +8 -0
  79. urwid-4.0.1/requirements.txt +0 -1
  80. urwid-4.0.1/ruff-requirements.txt +0 -1
  81. {urwid-4.0.1 → urwid-4.0.3}/.coveralls.yml +0 -0
  82. {urwid-4.0.1 → urwid-4.0.3}/.devcontainer/dev.dockerfile +0 -0
  83. {urwid-4.0.1 → urwid-4.0.3}/.devcontainer/devcontainer.json +0 -0
  84. {urwid-4.0.1 → urwid-4.0.3}/.dockerignore +0 -0
  85. {urwid-4.0.1 → urwid-4.0.3}/.editorconfig +0 -0
  86. {urwid-4.0.1 → urwid-4.0.3}/.github/CODE_OF_CONDUCT.md +0 -0
  87. {urwid-4.0.1 → urwid-4.0.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  88. {urwid-4.0.1 → urwid-4.0.3}/.github/ISSUE_TEMPLATE/docs.md +0 -0
  89. {urwid-4.0.1 → urwid-4.0.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  90. {urwid-4.0.1 → urwid-4.0.3}/.github/ISSUE_TEMPLATE/question.md +0 -0
  91. {urwid-4.0.1 → urwid-4.0.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  92. {urwid-4.0.1 → urwid-4.0.3}/.github/dependabot.yml +0 -0
  93. {urwid-4.0.1 → urwid-4.0.3}/.github/labeler.yml +0 -0
  94. {urwid-4.0.1 → urwid-4.0.3}/.github/release.yml +0 -0
  95. {urwid-4.0.1 → urwid-4.0.3}/.github/workflows/labels.yml +0 -0
  96. {urwid-4.0.1 → urwid-4.0.3}/.gitignore +0 -0
  97. {urwid-4.0.1 → urwid-4.0.3}/.yamllint.yml +0 -0
  98. {urwid-4.0.1 → urwid-4.0.3}/COPYING +0 -0
  99. {urwid-4.0.1 → urwid-4.0.3}/MANIFEST.in +0 -0
  100. {urwid-4.0.1 → urwid-4.0.3}/README.rst +0 -0
  101. {urwid-4.0.1 → urwid-4.0.3}/SECURITY.md +0 -0
  102. {urwid-4.0.1 → urwid-4.0.3}/classifiers.txt +0 -0
  103. {urwid-4.0.1 → urwid-4.0.3}/docs/Makefile +0 -0
  104. {urwid-4.0.1 → urwid-4.0.3}/docs/conf.py +0 -0
  105. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/bigtext.py.xdotool +0 -0
  106. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/bigtext1.png +0 -0
  107. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/bigtext2.png +0 -0
  108. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/bigtext3.png +0 -0
  109. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/browse.py +0 -0
  110. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/browse.py.xdotool +0 -0
  111. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/browse1.png +0 -0
  112. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/browse2.png +0 -0
  113. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/edit.py +0 -0
  114. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/edit.py.xdotool +0 -0
  115. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/edit1.png +0 -0
  116. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/edit2.png +0 -0
  117. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/edit_text.txt +0 -0
  118. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/graph.py +0 -0
  119. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/graph.py.xdotool +0 -0
  120. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/graph1.png +0 -0
  121. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/graph2.png +0 -0
  122. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/index.rst +0 -0
  123. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/palette_test.py +0 -0
  124. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/palette_test.py.xdotool +0 -0
  125. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/palette_test1.png +0 -0
  126. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/palette_test2.png +0 -0
  127. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/pop_up.py +0 -0
  128. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/pop_up.py.xdotool +0 -0
  129. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/pop_up1.png +0 -0
  130. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/pop_up2.png +0 -0
  131. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/real_browse.py +0 -0
  132. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/real_edit.py +0 -0
  133. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/subproc.py +0 -0
  134. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/subproc.py.xdotool +0 -0
  135. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/subproc1.png +0 -0
  136. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/subproc2.png +0 -0
  137. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/subproc2.py +0 -0
  138. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/tour.py +0 -0
  139. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/tour.py.xdotool +0 -0
  140. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/tour1.png +0 -0
  141. {urwid-4.0.1 → urwid-4.0.3}/docs/examples/tour2.png +0 -0
  142. {urwid-4.0.1 → urwid-4.0.3}/docs/index.rst +0 -0
  143. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/bright_combinations.py +0 -0
  144. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/bright_combinations.py.xdotool +0 -0
  145. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/bright_combinations1.png +0 -0
  146. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/canvascache.rst +0 -0
  147. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/displayattributes.rst +0 -0
  148. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/displaymodules.rst +0 -0
  149. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/encodings.rst +0 -0
  150. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/images/display_modules.png +0 -0
  151. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/images/introduction.png +0 -0
  152. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/images/urwid_widgets.svgz +0 -0
  153. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/images/urwid_widgets_1.png +0 -0
  154. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/images/urwid_widgets_1.xcf +0 -0
  155. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/images/urwid_widgets_2.png +0 -0
  156. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/images/urwid_widgets_2.xcf +0 -0
  157. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/images/widget_layout.png +0 -0
  158. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/index.rst +0 -0
  159. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/mainloop.rst +0 -0
  160. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/overview.rst +0 -0
  161. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/safe_combinations.py +0 -0
  162. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/safe_combinations.py.xdotool +0 -0
  163. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/safe_combinations1.png +0 -0
  164. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/textlayout.rst +0 -0
  165. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/userinput.rst +0 -0
  166. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/wanat.py +0 -0
  167. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/wanat_multi.py +0 -0
  168. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/wcur1.py +0 -0
  169. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/wcur2.py +0 -0
  170. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/widgets.rst +0 -0
  171. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/wmod.py +0 -0
  172. {urwid-4.0.1 → urwid-4.0.3}/docs/manual/wsel.py +0 -0
  173. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/attrspec.rst +0 -0
  174. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/canvas.rst +0 -0
  175. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/command_map.rst +0 -0
  176. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/constants.rst +0 -0
  177. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/deprecated.rst +0 -0
  178. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/display_modules.rst +0 -0
  179. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/exceptions.rst +0 -0
  180. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/global_settings.rst +0 -0
  181. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/index.rst +0 -0
  182. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/list_walkers.rst +0 -0
  183. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/main_loop.rst +0 -0
  184. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/meta.rst +0 -0
  185. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/signals.rst +0 -0
  186. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/text_layout.rst +0 -0
  187. {urwid-4.0.1 → urwid-4.0.3}/docs/reference/widget.rst +0 -0
  188. {urwid-4.0.1 → urwid-4.0.3}/docs/tools/compile_pngs.sh +0 -0
  189. {urwid-4.0.1 → urwid-4.0.3}/docs/tools/screenshots.sh +0 -0
  190. {urwid-4.0.1 → urwid-4.0.3}/docs/tools/static/.placeholder +0 -0
  191. {urwid-4.0.1 → urwid-4.0.3}/docs/tools/templates/indexcontent.html +0 -0
  192. {urwid-4.0.1 → urwid-4.0.3}/docs/tools/templates/indexsidebar.html +0 -0
  193. {urwid-4.0.1 → urwid-4.0.3}/docs/tools/templates/localtoc.html +0 -0
  194. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/adventure.py +0 -0
  195. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/adventure.py.xdotool +0 -0
  196. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/adventure1.png +0 -0
  197. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/adventure2.png +0 -0
  198. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/adventure3.png +0 -0
  199. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/adventure4.png +0 -0
  200. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/cmenu.py +0 -0
  201. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/cmenu.py.xdotool +0 -0
  202. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/cmenu1.png +0 -0
  203. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/cmenu2.png +0 -0
  204. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/cmenu3.png +0 -0
  205. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/cmenu4.png +0 -0
  206. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/highcolors.py +0 -0
  207. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/highcolors.py.xdotool +0 -0
  208. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/highcolors1.png +0 -0
  209. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/hmenu.py +0 -0
  210. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/hmenu.py.xdotool +0 -0
  211. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/hmenu1.png +0 -0
  212. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/hmenu2.png +0 -0
  213. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/hmenu3.png +0 -0
  214. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/hmenu4.png +0 -0
  215. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/index.rst +0 -0
  216. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/input.py +0 -0
  217. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/input.py.xdotool +0 -0
  218. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/input1.png +0 -0
  219. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/input2.png +0 -0
  220. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/input3.png +0 -0
  221. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/input4.png +0 -0
  222. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/input5.png +0 -0
  223. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/menu25.png +0 -0
  224. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/minimal.py +0 -0
  225. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/minimal.py.xdotool +0 -0
  226. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/minimal1.png +0 -0
  227. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/multiple.py +0 -0
  228. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/multiple.py.xdotool +0 -0
  229. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/multiple1.png +0 -0
  230. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/multiple2.png +0 -0
  231. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/multiple3.png +0 -0
  232. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/multiple4.png +0 -0
  233. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/qa.py +0 -0
  234. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/qa.py.xdotool +0 -0
  235. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/qa1.png +0 -0
  236. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/qa2.png +0 -0
  237. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/qa3.png +0 -0
  238. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/sig.py +0 -0
  239. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/sig.py.xdotool +0 -0
  240. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/sig1.png +0 -0
  241. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/sig2.png +0 -0
  242. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/sig3.png +0 -0
  243. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/sig4.png +0 -0
  244. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/smenu.py +0 -0
  245. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/smenu.py.xdotool +0 -0
  246. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/smenu1.png +0 -0
  247. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/smenu2.png +0 -0
  248. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/smenu3.png +0 -0
  249. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/urwid_attr.py +0 -0
  250. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/urwid_attr.py.xdotool +0 -0
  251. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/urwid_attr1.png +0 -0
  252. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/urwid_attr2.png +0 -0
  253. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/urwid_attr3.png +0 -0
  254. {urwid-4.0.1 → urwid-4.0.3}/docs/tutorial/urwid_attr4.png +0 -0
  255. {urwid-4.0.1 → urwid-4.0.3}/docs/urwid-logo.png +0 -0
  256. {urwid-4.0.1 → urwid-4.0.3}/examples/asyncio_socket_server.py +0 -0
  257. {urwid-4.0.1 → urwid-4.0.3}/examples/browse.py +0 -0
  258. {urwid-4.0.1 → urwid-4.0.3}/examples/calc.py +0 -0
  259. {urwid-4.0.1 → urwid-4.0.3}/examples/dialog.py +0 -0
  260. {urwid-4.0.1 → urwid-4.0.3}/examples/edit.py +0 -0
  261. {urwid-4.0.1 → urwid-4.0.3}/examples/fib.py +0 -0
  262. {urwid-4.0.1 → urwid-4.0.3}/examples/graph.py +0 -0
  263. {urwid-4.0.1 → urwid-4.0.3}/examples/input_test.py +0 -0
  264. {urwid-4.0.1 → urwid-4.0.3}/examples/lcd_cf635.py +0 -0
  265. {urwid-4.0.1 → urwid-4.0.3}/examples/palette_test.py +0 -0
  266. {urwid-4.0.1 → urwid-4.0.3}/examples/pop_up.py +0 -0
  267. {urwid-4.0.1 → urwid-4.0.3}/examples/subproc.py +0 -0
  268. {urwid-4.0.1 → urwid-4.0.3}/examples/subproc2.py +0 -0
  269. {urwid-4.0.1 → urwid-4.0.3}/examples/terminal.py +0 -0
  270. {urwid-4.0.1 → urwid-4.0.3}/examples/tour.py +0 -0
  271. {urwid-4.0.1 → urwid-4.0.3}/examples/treesample.py +0 -0
  272. {urwid-4.0.1 → urwid-4.0.3}/examples/twisted_serve_ssh.tac +0 -0
  273. {urwid-4.0.1 → urwid-4.0.3}/pylint-requirements.txt +0 -0
  274. {urwid-4.0.1 → urwid-4.0.3}/setup.cfg +0 -0
  275. {urwid-4.0.1 → urwid-4.0.3}/test_requirements.txt +0 -0
  276. {urwid-4.0.1 → urwid-4.0.3}/tests/__init__.py +0 -0
  277. {urwid-4.0.1 → urwid-4.0.3}/tests/test_columns.py +0 -0
  278. {urwid-4.0.1 → urwid-4.0.3}/tests/test_container.py +0 -0
  279. {urwid-4.0.1 → urwid-4.0.3}/tests/test_doctests.py +0 -0
  280. {urwid-4.0.1 → urwid-4.0.3}/tests/test_escapes.py +0 -0
  281. {urwid-4.0.1 → urwid-4.0.3}/tests/test_event_loops.py +0 -0
  282. {urwid-4.0.1 → urwid-4.0.3}/tests/test_filler.py +0 -0
  283. {urwid-4.0.1 → urwid-4.0.3}/tests/test_floatedit.py +0 -0
  284. {urwid-4.0.1 → urwid-4.0.3}/tests/test_font.py +0 -0
  285. {urwid-4.0.1 → urwid-4.0.3}/tests/test_frame.py +0 -0
  286. {urwid-4.0.1 → urwid-4.0.3}/tests/test_grapheme_clusters.py +0 -0
  287. {urwid-4.0.1 → urwid-4.0.3}/tests/test_graphics.py +0 -0
  288. {urwid-4.0.1 → urwid-4.0.3}/tests/test_grid_flow.py +0 -0
  289. {urwid-4.0.1 → urwid-4.0.3}/tests/test_line_box.py +0 -0
  290. {urwid-4.0.1 → urwid-4.0.3}/tests/test_main_loop.py +0 -0
  291. {urwid-4.0.1 → urwid-4.0.3}/tests/test_overlay.py +0 -0
  292. {urwid-4.0.1 → urwid-4.0.3}/tests/test_padding.py +0 -0
  293. {urwid-4.0.1 → urwid-4.0.3}/tests/test_pile.py +0 -0
  294. {urwid-4.0.1 → urwid-4.0.3}/tests/test_raw_display.py +0 -0
  295. {urwid-4.0.1 → urwid-4.0.3}/tests/test_scrollable.py +0 -0
  296. {urwid-4.0.1 → urwid-4.0.3}/tests/test_signals.py +0 -0
  297. {urwid-4.0.1 → urwid-4.0.3}/tests/test_str_util.py +0 -0
  298. {urwid-4.0.1 → urwid-4.0.3}/tests/test_text_layout.py +0 -0
  299. {urwid-4.0.1 → urwid-4.0.3}/tests/test_tree.py +0 -0
  300. {urwid-4.0.1 → urwid-4.0.3}/tests/test_util.py +0 -0
  301. {urwid-4.0.1 → urwid-4.0.3}/tests/test_vterm.py +0 -0
  302. {urwid-4.0.1 → urwid-4.0.3}/tests/test_widget.py +0 -0
  303. {urwid-4.0.1 → urwid-4.0.3}/tests/util.py +0 -0
  304. {urwid-4.0.1 → urwid-4.0.3}/tox.ini +0 -0
  305. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/_web.css +0 -0
  306. {urwid-4.0.1 → urwid-4.0.3}/urwid/display/_web.js +0 -0
  307. {urwid-4.0.1 → urwid-4.0.3}/urwid/event_loop/__init__.py +0 -0
  308. {urwid-4.0.1 → urwid-4.0.3}/urwid/event_loop/select_loop.py +0 -0
  309. {urwid-4.0.1 → urwid-4.0.3}/urwid/font.py +0 -0
  310. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/__init__.py +0 -0
  311. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/divider.py +0 -0
  312. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/padding.py +0 -0
  313. {urwid-4.0.1 → urwid-4.0.3}/urwid/widget/solid_fill.py +0 -0
  314. {urwid-4.0.1 → urwid-4.0.3}/urwid.egg-info/dependency_links.txt +0 -0
  315. {urwid-4.0.1 → urwid-4.0.3}/urwid.egg-info/not-zip-safe +0 -0
  316. {urwid-4.0.1 → urwid-4.0.3}/urwid.egg-info/top_level.txt +0 -0
@@ -23,7 +23,7 @@ jobs:
23
23
  Build:
24
24
  runs-on: ubuntu-latest
25
25
  steps:
26
- - uses: actions/checkout@v6
26
+ - uses: actions/checkout@v7
27
27
  with:
28
28
  fetch-depth: 0 # need for setuptools_scm
29
29
  - name: Set up Python
@@ -14,7 +14,7 @@ jobs:
14
14
  name: Validate formatting
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
- - uses: actions/checkout@v6
17
+ - uses: actions/checkout@v7
18
18
  - name: Set up Python
19
19
  uses: actions/setup-python@v6
20
20
  with:
@@ -32,7 +32,7 @@ jobs:
32
32
  name: Check with Ruff
33
33
  runs-on: ubuntu-latest
34
34
  steps:
35
- - uses: actions/checkout@v6
35
+ - uses: actions/checkout@v7
36
36
  - name: Set up Python
37
37
  uses: actions/setup-python@v6
38
38
  with:
@@ -50,7 +50,7 @@ jobs:
50
50
  name: Check with pylint
51
51
  runs-on: ubuntu-latest
52
52
  steps:
53
- - uses: actions/checkout@v6
53
+ - uses: actions/checkout@v7
54
54
  - name: Install Ubuntu dependencies
55
55
  run: |
56
56
  sudo apt-get -qq update
@@ -30,7 +30,7 @@ jobs:
30
30
  name: Validate formatting
31
31
  runs-on: ubuntu-latest
32
32
  steps:
33
- - uses: actions/checkout@v6
33
+ - uses: actions/checkout@v7
34
34
  - name: Set up Python
35
35
  uses: actions/setup-python@v6
36
36
  with:
@@ -48,7 +48,7 @@ jobs:
48
48
  name: Check with Ruff
49
49
  runs-on: ubuntu-latest
50
50
  steps:
51
- - uses: actions/checkout@v6
51
+ - uses: actions/checkout@v7
52
52
  - name: Set up Python
53
53
  uses: actions/setup-python@v6
54
54
  with:
@@ -66,7 +66,7 @@ jobs:
66
66
  name: Check with pylint
67
67
  runs-on: ubuntu-latest
68
68
  steps:
69
- - uses: actions/checkout@v6
69
+ - uses: actions/checkout@v7
70
70
  - name: Install Ubuntu dependencies
71
71
  run: |
72
72
  sudo apt-get -qq update
@@ -102,7 +102,7 @@ jobs:
102
102
  python-version: "3.14"
103
103
 
104
104
  steps:
105
- - uses: actions/checkout@v6
105
+ - uses: actions/checkout@v7
106
106
  with:
107
107
  fetch-depth: 0 # need for setuptools_scm
108
108
  - name: Set up Python ${{ matrix.python-version }}
@@ -158,7 +158,7 @@ jobs:
158
158
  needs: [ Test, Ruff-format, Ruff, PyLint ]
159
159
  runs-on: ubuntu-latest
160
160
  steps:
161
- - uses: actions/checkout@v6
161
+ - uses: actions/checkout@v7
162
162
  with:
163
163
  fetch-depth: 0 # need for setuptools_scm
164
164
 
@@ -189,7 +189,7 @@ jobs:
189
189
  runs-on: ubuntu-latest
190
190
  needs: [ build ]
191
191
  steps:
192
- - uses: actions/checkout@v6
192
+ - uses: actions/checkout@v7
193
193
  - name: Set up Python
194
194
  uses: actions/setup-python@v6
195
195
  with:
@@ -10,7 +10,7 @@ jobs:
10
10
  check:
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
- - uses: actions/checkout@v6
13
+ - uses: actions/checkout@v7
14
14
  - name: Set up Python
15
15
  uses: actions/setup-python@v6
16
16
  with:
@@ -2,23 +2,29 @@ repos:
2
2
  - repo: https://github.com/pre-commit/pre-commit-hooks
3
3
  rev: v6.0.0
4
4
  hooks:
5
- - id: check-yaml
6
5
  - id: end-of-file-fixer
7
6
  - id: trailing-whitespace
8
7
  - id: mixed-line-ending
8
+ args: [ --fix=lf ]
9
+ - id: check-yaml
10
+ - id: check-toml
11
+ - id: check-json
12
+ - id: check-merge-conflict
9
13
 
10
14
  - repo: https://github.com/astral-sh/ruff-pre-commit
11
- # Ruff version.
12
- rev: v0.14.5
15
+ rev: v0.15.18
13
16
  hooks:
14
- # Run the linter.
15
17
  - id: ruff-check
16
- args: [ --fix ]
17
- # Run the formatter.
18
+ args: [ --show-fixes, --fix ]
18
19
  - id: ruff-format
19
20
 
21
+ - repo: https://github.com/tox-dev/pyproject-fmt
22
+ rev: v2.25.0
23
+ hooks:
24
+ - id: pyproject-fmt
25
+
20
26
  - repo: https://github.com/adrienverge/yamllint.git
21
- rev: v1.37.1
27
+ rev: v1.38.0
22
28
  hooks:
23
29
  - id: yamllint
24
30
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: urwid
3
- Version: 4.0.1
3
+ Version: 4.0.3
4
4
  Summary: A full-featured console (xterm et al.) user interface library
5
5
  Author-email: Ian Ward <ian@excess.org>
6
6
  License-Expression: LGPL-2.1-only
@@ -8,7 +8,7 @@ Project-URL: Homepage, https://urwid.org/
8
8
  Project-URL: Documentation, https://urwid.org/manual/index.html
9
9
  Project-URL: Repository, https://github.com/urwid/urwid
10
10
  Project-URL: Bug Tracker, https://github.com/urwid/urwid/issues
11
- Keywords: curses,ui,widget,scroll,listbox,user interface,text layout,console,ncurses
11
+ Keywords: console,curses,listbox,ncurses,scroll,text layout,ui,user interface,widget
12
12
  Platform: unix-like
13
13
  Classifier: Development Status :: 5 - Production/Stable
14
14
  Classifier: Environment :: Console
@@ -34,15 +34,16 @@ Requires-Python: >=3.9.0
34
34
  Description-Content-Type: text/x-rst
35
35
  License-File: COPYING
36
36
  Requires-Dist: wcwidth>=0.4
37
+ Requires-Dist: typing-extensions
37
38
  Provides-Extra: curses
38
39
  Requires-Dist: windows-curses; sys_platform == "win32" and extra == "curses"
39
40
  Provides-Extra: glib
40
- Requires-Dist: PyGObject; extra == "glib"
41
+ Requires-Dist: pygobject; extra == "glib"
41
42
  Provides-Extra: tornado
42
43
  Requires-Dist: tornado>=5.0; extra == "tornado"
43
44
  Provides-Extra: trio
44
- Requires-Dist: trio>=0.24.0; extra == "trio"
45
45
  Requires-Dist: exceptiongroup; python_version < "3.11" and extra == "trio"
46
+ Requires-Dist: trio>=0.24.0; extra == "trio"
46
47
  Provides-Extra: twisted
47
48
  Requires-Dist: twisted; extra == "twisted"
48
49
  Provides-Extra: zmq
@@ -2,6 +2,55 @@
2
2
  Changelog
3
3
  ---------
4
4
 
5
+ Urwid 4.0.3
6
+ ===========
7
+
8
+ 2026-06-25
9
+
10
+ Deprecations ⚡
11
+ ++++++++++++++
12
+ * Deprecate `content_delta` as unused by @penguinolog in https://github.com/urwid/urwid/pull/1151
13
+ Bug fixes 🕷
14
+ ++++++++++++
15
+ * Fix `shard_body_row`: falsy content_iter raises ValueError by @penguinolog in https://github.com/urwid/urwid/pull/1162
16
+ Documentation 🕮
17
+ ++++++++++++++++
18
+ * Mass typing annotations fixes.
19
+
20
+ **Full Changelog**: https://github.com/urwid/urwid/compare/4.0.2...4.0.3
21
+
22
+ Urwid 4.0.2
23
+ ===========
24
+
25
+ 2026-06-02
26
+
27
+ New features 🗹
28
+ +++++++++++++++
29
+ * Initial typing support for urwid package by @penguinolog in https://github.com/urwid/urwid/pull/1144
30
+ Bug fixes 🕷
31
+ ++++++++++++
32
+ * Fix ListBoxError in _keypress_page_down when snapping to a widget above the top by @neutralinsomniac in https://github.com/urwid/urwid/pull/1133
33
+ * Fix lazy_import of display modules if __package__ is not defined by @penguinolog in https://github.com/urwid/urwid/pull/1136
34
+ Documentation 🕮
35
+ ++++++++++++++++
36
+ * Adjust typing for `urwid.display` and `urwid.event_loop` by @penguinolog in https://github.com/urwid/urwid/pull/1138
37
+ * Typing: extend typing information for `urwid.display` by @penguinolog in https://github.com/urwid/urwid/pull/1139
38
+ * Typing: adjust event loop types by @penguinolog in https://github.com/urwid/urwid/pull/1140
39
+ * Typing: adjust types for vterm, numedit and graphics by @penguinolog in https://github.com/urwid/urwid/pull/1141
40
+ * Typing: adjust types for `urwid.widget` by @penguinolog in https://github.com/urwid/urwid/pull/1142
41
+ Refactoring 🛠
42
+ ++++++++++++++
43
+ * Feat: refactor `urwid.widget.scrollable` by @penguinolog in https://github.com/urwid/urwid/pull/1143
44
+ Other Changes
45
+ +++++++++++++
46
+ * Web display: tighten security by using more complex identifiers by @penguinolog in https://github.com/urwid/urwid/pull/1137
47
+
48
+ New Contributors
49
+ ++++++++++++++++
50
+ * @neutralinsomniac made their first contribution in https://github.com/urwid/urwid/pull/1133
51
+
52
+ **Full Changelog**: https://github.com/urwid/urwid/compare/4.0.1...4.0.2
53
+
5
54
  Urwid 4.0.1
6
55
  ===========
7
56
 
@@ -28,7 +28,6 @@ from __future__ import annotations
28
28
  import typing
29
29
 
30
30
  import urwid
31
- import urwid.display.raw
32
31
 
33
32
  if typing.TYPE_CHECKING:
34
33
  from collections.abc import Callable
@@ -28,7 +28,6 @@ from __future__ import annotations
28
28
  import typing
29
29
 
30
30
  import urwid
31
- import urwid.display.raw
32
31
 
33
32
  if typing.TYPE_CHECKING:
34
33
  from collections.abc import Callable
@@ -269,20 +269,11 @@ class TwistedScreen(Screen):
269
269
  self.terminal.write(data)
270
270
 
271
271
  # Private
272
- def _on_update_palette_entry(self, name, *attrspecs):
272
+ def _on_update_palette_entry(self, name: str | None, *attrspecs: urwid.AttrSpec) -> None:
273
273
  # copy the attribute to a dictionary containing the escape sequences
274
274
  self._pal_escape[name] = self._attrspec_to_escape(attrspecs[{16: 0, 1: 1, 88: 2, 256: 3}[self.colors]])
275
275
 
276
- def _attr_to_escape(self, a):
277
- if a in self._pal_escape:
278
- return self._pal_escape[a]
279
- if isinstance(a, urwid.AttrSpec):
280
- return self._attrspec_to_escape(a)
281
- # undefined attributes use default/default
282
- # TODO: track and report these
283
- return self._attrspec_to_escape(urwid.AttrSpec("default", "default"))
284
-
285
- def _attrspec_to_escape(self, a):
276
+ def _attrspec_to_escape(self, a: urwid.AttrSpec) -> str:
286
277
  """
287
278
  Convert AttrSpec instance a to an escape sequence for the terminal
288
279