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