omdev 0.0.0.dev472__tar.gz → 0.0.0.dev474__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 (371) hide show
  1. {omdev-0.0.0.dev472/omdev.egg-info → omdev-0.0.0.dev474}/PKG-INFO +4 -4
  2. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/__about__.py +1 -1
  3. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/pyproject/pkg.py +7 -2
  4. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/scripts/ci.py +4 -4
  5. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/scripts/pyproject.py +7 -2
  6. omdev-0.0.0.dev474/omdev/tui/apps/edit/main.py +163 -0
  7. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/apps/irc/app.py +15 -15
  8. omdev-0.0.0.dev474/omdev/tui/apps/markdown/__init__.py +0 -0
  9. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/textual/__init__.py +1 -0
  10. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474/omdev.egg-info}/PKG-INFO +4 -4
  11. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev.egg-info/SOURCES.txt +2 -0
  12. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev.egg-info/requires.txt +3 -3
  13. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/pyproject.toml +4 -4
  14. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/LICENSE +0 -0
  15. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/MANIFEST.in +0 -0
  16. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/README.md +0 -0
  17. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/.omlish-manifests.json +0 -0
  18. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/__init__.py +0 -0
  19. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/__init__.py +0 -0
  20. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/__main__.py +0 -0
  21. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/cli/__init__.py +0 -0
  22. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/cli/main.py +0 -0
  23. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/gen/__init__.py +0 -0
  24. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/gen/gen.py +0 -0
  25. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/gen/imports.py +0 -0
  26. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/gen/manifests.py +0 -0
  27. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/gen/resources.py +0 -0
  28. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/gen/srcfiles.py +0 -0
  29. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/gen/strip.py +0 -0
  30. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/gen/types.py +0 -0
  31. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/gen/typing.py +0 -0
  32. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/amalg/sources.py +0 -0
  33. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/__init__.py +0 -0
  34. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/compute/__init__.py +0 -0
  35. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/compute/cache.py +0 -0
  36. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/compute/contexts.py +0 -0
  37. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/compute/currents.py +0 -0
  38. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/compute/fns.py +0 -0
  39. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/compute/resolvers.py +0 -0
  40. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/compute/storage.py +0 -0
  41. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/compute/types.py +0 -0
  42. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/data/__init__.py +0 -0
  43. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/data/actions.py +0 -0
  44. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/data/cache.py +0 -0
  45. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/data/consts.py +0 -0
  46. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/data/defaults.py +0 -0
  47. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/data/manifests.py +0 -0
  48. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cache/data/specs.py +0 -0
  49. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/capi/__init__.py +0 -0
  50. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/capi/darwin/__init__.py +0 -0
  51. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/capi/darwin/aps.py +0 -0
  52. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/capi/darwin/ax.py +0 -0
  53. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/capi/darwin/cf.py +0 -0
  54. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/capi/darwin/cg.py +0 -0
  55. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/capi/linux/__init__.py +0 -0
  56. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/capi/linux/x11.py +0 -0
  57. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cc/__init__.py +0 -0
  58. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cc/__main__.py +0 -0
  59. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cc/cdeps.py +0 -0
  60. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cc/cdeps.toml +0 -0
  61. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cc/cli.py +0 -0
  62. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cc/srclangs.py +0 -0
  63. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/__init__.py +0 -0
  64. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_boilerplate.cc +0 -0
  65. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/LICENSE +0 -0
  66. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/__init__.py +0 -0
  67. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/build_ext.py +0 -0
  68. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  69. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  70. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/compilers/options.py +0 -0
  71. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  72. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/dir_util.py +0 -0
  73. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/errors.py +0 -0
  74. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/extension.py +0 -0
  75. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/file_util.py +0 -0
  76. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/modified.py +0 -0
  77. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/spawn.py +0 -0
  78. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/sysconfig.py +0 -0
  79. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/util.py +0 -0
  80. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/_distutils/version.py +0 -0
  81. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/build.py +0 -0
  82. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/cmake.py +0 -0
  83. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/importhook.py +0 -0
  84. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/magic.py +0 -0
  85. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cexts/scan.py +0 -0
  86. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/__init__.py +0 -0
  87. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/__main__.py +0 -0
  88. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/cache.py +0 -0
  89. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/ci.py +0 -0
  90. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/cli.py +0 -0
  91. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/compose.py +0 -0
  92. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/consts.py +0 -0
  93. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/__init__.py +0 -0
  94. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/buildcaching.py +0 -0
  95. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/cache.py +0 -0
  96. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  97. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/cacheserved/cache.py +0 -0
  98. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  99. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/cmds.py +0 -0
  100. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/dataserver.py +0 -0
  101. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/imagepulling.py +0 -0
  102. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/inject.py +0 -0
  103. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/packing.py +0 -0
  104. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/repositories.py +0 -0
  105. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/docker/utils.py +0 -0
  106. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/__init__.py +0 -0
  107. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/api/__init__.py +0 -0
  108. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/api/clients.py +0 -0
  109. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/api/v1/__init__.py +0 -0
  110. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/api/v1/api.py +0 -0
  111. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/api/v1/client.py +0 -0
  112. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/api/v2/__init__.py +0 -0
  113. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/api/v2/api.py +0 -0
  114. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/api/v2/azure.py +0 -0
  115. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/api/v2/client.py +0 -0
  116. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/bootstrap.py +0 -0
  117. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/cache.py +0 -0
  118. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/cli.py +0 -0
  119. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/env.py +0 -0
  120. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/github/inject.py +0 -0
  121. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/inject.py +0 -0
  122. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/requirements.py +0 -0
  123. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/shell.py +0 -0
  124. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/ci/utils.py +0 -0
  125. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cli/__init__.py +0 -0
  126. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cli/__main__.py +0 -0
  127. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cli/_pathhack.py +0 -0
  128. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cli/clicli.py +0 -0
  129. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cli/install.py +0 -0
  130. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cli/main.py +0 -0
  131. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cli/managers.py +0 -0
  132. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cli/types.py +0 -0
  133. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/clipboard/__init__.py +0 -0
  134. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/clipboard/clipboard.py +0 -0
  135. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/clipboard/darwin_cf.py +0 -0
  136. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/clipboard/linux_x11.py +0 -0
  137. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cmake.py +0 -0
  138. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cmdlog/__init__.py +0 -0
  139. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cmdlog/__main__.py +0 -0
  140. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cmdlog/_cmdlog.py +0 -0
  141. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cmdlog/cli.py +0 -0
  142. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/cmdlog/cmdlog.py +0 -0
  143. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/dataclasses/__init__.py +0 -0
  144. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/dataclasses/__main__.py +0 -0
  145. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/dataclasses/cli.py +0 -0
  146. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/dataclasses/codegen.py +0 -0
  147. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/dataserver/__init__.py +0 -0
  148. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/dataserver/handlers.py +0 -0
  149. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/dataserver/http.py +0 -0
  150. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/dataserver/routes.py +0 -0
  151. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/dataserver/server.py +0 -0
  152. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/dataserver/targets.py +0 -0
  153. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/git/__init__.py +0 -0
  154. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/git/magic.py +0 -0
  155. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/git/revisions.py +0 -0
  156. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/git/shallow.py +0 -0
  157. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/git/status.py +0 -0
  158. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/home/__init__.py +0 -0
  159. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/home/paths.py +0 -0
  160. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/home/secrets.py +0 -0
  161. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/home/shadow.py +0 -0
  162. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/imgur.py +0 -0
  163. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/intellij/__init__.py +0 -0
  164. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/intellij/cli.py +0 -0
  165. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/intellij/ides.py +0 -0
  166. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/intellij/open.py +0 -0
  167. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/__init__.py +0 -0
  168. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/__main__.py +0 -0
  169. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/cli.py +0 -0
  170. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/default.py +0 -0
  171. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/inject.py +0 -0
  172. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/inspect.py +0 -0
  173. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/providers/__init__.py +0 -0
  174. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/providers/base.py +0 -0
  175. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/providers/inject.py +0 -0
  176. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/providers/running.py +0 -0
  177. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/providers/standalone.py +0 -0
  178. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/providers/system.py +0 -0
  179. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/pyenv/__init__.py +0 -0
  180. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/pyenv/inject.py +0 -0
  181. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/pyenv/install.py +0 -0
  182. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/pyenv/provider.py +0 -0
  183. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/pyenv/pyenv.py +0 -0
  184. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/resolvers.py +0 -0
  185. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/types.py +0 -0
  186. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/uv/__init__.py +0 -0
  187. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/uv/inject.py +0 -0
  188. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/uv/provider.py +0 -0
  189. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/uv/uv.py +0 -0
  190. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/interp/venvs.py +0 -0
  191. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/__init__.py +0 -0
  192. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/messages/__init__.py +0 -0
  193. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/messages/base.py +0 -0
  194. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/messages/formats.py +0 -0
  195. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/messages/messages.py +0 -0
  196. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/messages/parsing.py +0 -0
  197. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/numerics/__init__.py +0 -0
  198. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/numerics/formats.py +0 -0
  199. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/numerics/numerics.py +0 -0
  200. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/numerics/types.py +0 -0
  201. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/protocol/LICENSE +0 -0
  202. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/protocol/__init__.py +0 -0
  203. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/protocol/consts.py +0 -0
  204. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/protocol/errors.py +0 -0
  205. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/protocol/message.py +0 -0
  206. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/protocol/nuh.py +0 -0
  207. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/protocol/parsing.py +0 -0
  208. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/protocol/rendering.py +0 -0
  209. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/protocol/tags.py +0 -0
  210. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/irc/protocol/utils.py +0 -0
  211. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/magic/__init__.py +0 -0
  212. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/magic/__main__.py +0 -0
  213. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/magic/cli.py +0 -0
  214. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/magic/find.py +0 -0
  215. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/magic/magic.py +0 -0
  216. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/magic/prepare.py +0 -0
  217. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/magic/styles.py +0 -0
  218. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/manifests/__init__.py +0 -0
  219. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/manifests/__main__.py +0 -0
  220. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/manifests/_dumping.py +0 -0
  221. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/manifests/building.py +0 -0
  222. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/manifests/dumping.py +0 -0
  223. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/manifests/main.py +0 -0
  224. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/markdown/__init__.py +0 -0
  225. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/markdown/incparse.py +0 -0
  226. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/markdown/tokens.py +0 -0
  227. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/mypy/__init__.py +0 -0
  228. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/mypy/debug.py +0 -0
  229. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/mypy/report.py +0 -0
  230. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/__init__.py +0 -0
  231. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/building.py +0 -0
  232. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/compression.py +0 -0
  233. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/data.py +0 -0
  234. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/datarefs.py +0 -0
  235. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/dataserver.py +0 -0
  236. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/loading.py +0 -0
  237. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/media.py +0 -0
  238. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/pack/__init__.py +0 -0
  239. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/pack/packing.py +0 -0
  240. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/pack/repositories.py +0 -0
  241. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/pack/unpacking.py +0 -0
  242. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/repositories.py +0 -0
  243. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/oci/tars.py +0 -0
  244. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/packaging/__init__.py +0 -0
  245. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/packaging/marshal.py +0 -0
  246. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/packaging/names.py +0 -0
  247. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/packaging/requires.py +0 -0
  248. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/packaging/revisions.py +0 -0
  249. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/packaging/specifiers.py +0 -0
  250. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/packaging/versions.py +0 -0
  251. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/packaging/wheelfile.py +0 -0
  252. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/pip.py +0 -0
  253. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/precheck/__init__.py +0 -0
  254. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/precheck/__main__.py +0 -0
  255. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/precheck/base.py +0 -0
  256. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/precheck/blanklines.py +0 -0
  257. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/precheck/caches.py +0 -0
  258. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/precheck/git.py +0 -0
  259. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/precheck/imports.py +0 -0
  260. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/precheck/lite.py +0 -0
  261. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/precheck/main.py +0 -0
  262. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/precheck/manifests.py +0 -0
  263. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/precheck/scripts.py +0 -0
  264. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/precheck/unicode.py +0 -0
  265. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/__init__.py +0 -0
  266. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/attrdocs.py +0 -0
  267. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/bracepy.py +0 -0
  268. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/classdot.py +0 -0
  269. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/docstrings/LICENSE +0 -0
  270. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/docstrings/__init__.py +0 -0
  271. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/docstrings/attrdoc.py +0 -0
  272. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/docstrings/common.py +0 -0
  273. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/docstrings/epydoc.py +0 -0
  274. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/docstrings/google.py +0 -0
  275. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/docstrings/numpydoc.py +0 -0
  276. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/docstrings/parser.py +0 -0
  277. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/docstrings/rest.py +0 -0
  278. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/findimports.py +0 -0
  279. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/scripts/__init__.py +0 -0
  280. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/scripts/bumpversion.py +0 -0
  281. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/scripts/execstat.py +0 -0
  282. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/scripts/importtrace.py +0 -0
  283. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/srcheaders.py +0 -0
  284. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/tools/__init__.py +0 -0
  285. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/tools/importscan.py +0 -0
  286. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/py/tools/mkrelimp.py +0 -0
  287. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/pyproject/__init__.py +0 -0
  288. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/pyproject/__main__.py +0 -0
  289. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/pyproject/cli.py +0 -0
  290. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/pyproject/configs.py +0 -0
  291. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/pyproject/inject.py +0 -0
  292. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/pyproject/reqs.py +0 -0
  293. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/pyproject/resources/__init__.py +0 -0
  294. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/pyproject/resources/docker-dev.sh +0 -0
  295. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/pyproject/resources/python.sh +0 -0
  296. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/pyproject/venvs.py +0 -0
  297. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/rs/__init__.py +0 -0
  298. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/scripts/__init__.py +0 -0
  299. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/scripts/interp.py +0 -0
  300. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/scripts/lib/__init__.py +0 -0
  301. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/scripts/lib/inject.py +0 -0
  302. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/scripts/lib/logs.py +0 -0
  303. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/scripts/lib/marshal.py +0 -0
  304. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/scripts/slowcat.py +0 -0
  305. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/scripts/tmpexec.py +0 -0
  306. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tagstrings.py +0 -0
  307. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tokens/__init__.py +0 -0
  308. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tokens/all.py +0 -0
  309. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tokens/tokenizert.py +0 -0
  310. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tokens/utils.py +0 -0
  311. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/__init__.py +0 -0
  312. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/cloc.py +0 -0
  313. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/diff.py +0 -0
  314. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/doc.py +0 -0
  315. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/docker.py +0 -0
  316. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/git/__init__.py +0 -0
  317. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/git/__main__.py +0 -0
  318. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/git/cli.py +0 -0
  319. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/git/cloning.py +0 -0
  320. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/git/consts.py +0 -0
  321. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/git/messages.py +0 -0
  322. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/json/__init__.py +0 -0
  323. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/json/__main__.py +0 -0
  324. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/json/cli.py +0 -0
  325. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/json/formats.py +0 -0
  326. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/json/io.py +0 -0
  327. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/json/parsing.py +0 -0
  328. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/json/processing.py +0 -0
  329. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/json/rendering.py +0 -0
  330. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/jsonview/__init__.py +0 -0
  331. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/jsonview/__main__.py +0 -0
  332. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/jsonview/cli.py +0 -0
  333. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/jsonview/resources/__init__.py +0 -0
  334. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  335. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  336. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/linehisto.py +0 -0
  337. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/mkenv.py +0 -0
  338. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/notebook.py +0 -0
  339. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/pawk/__init__.py +0 -0
  340. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/pawk/__main__.py +0 -0
  341. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/pawk/pawk.py +0 -0
  342. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/pip.py +0 -0
  343. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/prof.py +0 -0
  344. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/qr.py +0 -0
  345. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/shadow.py +0 -0
  346. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/shell.py +0 -0
  347. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tools/sqlrepl.py +0 -0
  348. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/__init__.py +0 -0
  349. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/apps/__init__.py +0 -0
  350. {omdev-0.0.0.dev472/omdev/tui/apps/irc → omdev-0.0.0.dev474/omdev/tui/apps/edit}/__init__.py +0 -0
  351. {omdev-0.0.0.dev472/omdev/tui/apps/markdown → omdev-0.0.0.dev474/omdev/tui/apps/irc}/__init__.py +0 -0
  352. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/apps/irc/__main__.py +0 -0
  353. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/apps/irc/client.py +0 -0
  354. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/apps/irc/commands.py +0 -0
  355. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/apps/irc/main.py +0 -0
  356. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/apps/markdown/__main__.py +0 -0
  357. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/apps/markdown/cli.py +0 -0
  358. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/rich/__init__.py +0 -0
  359. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/rich/console2.py +0 -0
  360. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/rich/markdown2.py +0 -0
  361. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/textual/app2.py +0 -0
  362. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  363. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  364. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/textual/autocomplete/matching.py +0 -0
  365. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/textual/autocomplete/paths.py +0 -0
  366. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/textual/autocomplete/widget.py +0 -0
  367. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev/tui/textual/drivers2.py +0 -0
  368. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev.egg-info/dependency_links.txt +0 -0
  369. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev.egg-info/entry_points.txt +0 -0
  370. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/omdev.egg-info/top_level.txt +0 -0
  371. {omdev-0.0.0.dev472 → omdev-0.0.0.dev474}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev472
3
+ Version: 0.0.0.dev474
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev472
17
+ Requires-Dist: omlish==0.0.0.dev474
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.9; extra == "all"
20
20
  Requires-Dist: pycparser~=2.23; extra == "all"
@@ -27,7 +27,7 @@ Requires-Dist: mypy~=1.18; extra == "all"
27
27
  Requires-Dist: gprof2dot~=2025.4; extra == "all"
28
28
  Requires-Dist: segno~=1.6; extra == "all"
29
29
  Requires-Dist: rich~=14.2; extra == "all"
30
- Requires-Dist: textual~=6.4; extra == "all"
30
+ Requires-Dist: textual~=6.5; extra == "all"
31
31
  Provides-Extra: black
32
32
  Requires-Dist: black~=25.9; extra == "black"
33
33
  Provides-Extra: c
@@ -46,7 +46,7 @@ Provides-Extra: qr
46
46
  Requires-Dist: segno~=1.6; extra == "qr"
47
47
  Provides-Extra: tui
48
48
  Requires-Dist: rich~=14.2; extra == "tui"
49
- Requires-Dist: textual~=6.4; extra == "tui"
49
+ Requires-Dist: textual~=6.5; extra == "tui"
50
50
  Dynamic: license-file
51
51
 
52
52
  # Overview
@@ -44,7 +44,7 @@ class Project(ProjectBase):
44
44
 
45
45
  'tui': [
46
46
  'rich ~= 14.2',
47
- 'textual ~= 6.4',
47
+ 'textual ~= 6.5',
48
48
  ],
49
49
  }
50
50
 
@@ -93,7 +93,7 @@ class BasePyprojectPackageGenerator(Abstract):
93
93
 
94
94
  def _write_git_ignore(self) -> None:
95
95
  with open(os.path.join(self._pkg_dir(), '.gitignore'), 'w') as f:
96
- f.write('\n'.join(self._GIT_IGNORE))
96
+ f.write('\n'.join([*self._GIT_IGNORE, '']))
97
97
 
98
98
  #
99
99
 
@@ -516,12 +516,17 @@ class _PyprojectCextPackageGenerator(_PyprojectExtensionPackageGenerator):
516
516
  ext_lines = []
517
517
 
518
518
  for ext_src in self.find_cext_srcs():
519
+ ext_lang = ext_src.rpartition('.')[2]
520
+ compile_args = {
521
+ 'c': ['-std=c11'],
522
+ 'cc': ['-std=c++20'],
523
+ }.get(ext_lang, [])
519
524
  ext_name = ext_src.rpartition('.')[0].replace(os.sep, '.')
520
525
  ext_lines.extend([
521
526
  'st.Extension(',
522
527
  f" name='{ext_name}',",
523
528
  f" sources=['{ext_src}'],",
524
- " extra_compile_args=['-std=c++20'],",
529
+ f' extra_compile_args={compile_args!r},',
525
530
  '),',
526
531
  ])
527
532
 
@@ -1293,7 +1293,7 @@ class ExitStacked:
1293
1293
  es.__enter__()
1294
1294
  try:
1295
1295
  self._enter_contexts()
1296
- except Exception: # noqa
1296
+ except BaseException: # noqa
1297
1297
  es.__exit__(*sys.exc_info())
1298
1298
  raise
1299
1299
  return self
@@ -1304,7 +1304,7 @@ class ExitStacked:
1304
1304
  return None
1305
1305
  try:
1306
1306
  self._exit_contexts()
1307
- except Exception: # noqa
1307
+ except BaseException: # noqa
1308
1308
  es.__exit__(*sys.exc_info())
1309
1309
  raise
1310
1310
  return es.__exit__(exc_type, exc_val, exc_tb)
@@ -1352,7 +1352,7 @@ class AsyncExitStacked:
1352
1352
  await es.__aenter__()
1353
1353
  try:
1354
1354
  await self._async_enter_contexts()
1355
- except Exception: # noqa
1355
+ except BaseException: # noqa
1356
1356
  await es.__aexit__(*sys.exc_info())
1357
1357
  raise
1358
1358
  return self
@@ -1363,7 +1363,7 @@ class AsyncExitStacked:
1363
1363
  return None
1364
1364
  try:
1365
1365
  await self._async_exit_contexts()
1366
- except Exception: # noqa
1366
+ except BaseException: # noqa
1367
1367
  await es.__aexit__(*sys.exc_info())
1368
1368
  raise
1369
1369
  return await es.__aexit__(exc_type, exc_val, exc_tb)
@@ -10877,7 +10877,7 @@ class BasePyprojectPackageGenerator(Abstract):
10877
10877
 
10878
10878
  def _write_git_ignore(self) -> None:
10879
10879
  with open(os.path.join(self._pkg_dir(), '.gitignore'), 'w') as f:
10880
- f.write('\n'.join(self._GIT_IGNORE))
10880
+ f.write('\n'.join([*self._GIT_IGNORE, '']))
10881
10881
 
10882
10882
  #
10883
10883
 
@@ -11300,12 +11300,17 @@ class _PyprojectCextPackageGenerator(_PyprojectExtensionPackageGenerator):
11300
11300
  ext_lines = []
11301
11301
 
11302
11302
  for ext_src in self.find_cext_srcs():
11303
+ ext_lang = ext_src.rpartition('.')[2]
11304
+ compile_args = {
11305
+ 'c': ['-std=c11'],
11306
+ 'cc': ['-std=c++20'],
11307
+ }.get(ext_lang, [])
11303
11308
  ext_name = ext_src.rpartition('.')[0].replace(os.sep, '.')
11304
11309
  ext_lines.extend([
11305
11310
  'st.Extension(',
11306
11311
  f" name='{ext_name}',",
11307
11312
  f" sources=['{ext_src}'],",
11308
- " extra_compile_args=['-std=c++20'],",
11313
+ f' extra_compile_args={compile_args!r},',
11309
11314
  '),',
11310
11315
  ])
11311
11316
 
@@ -0,0 +1,163 @@
1
+ import argparse
2
+ import pathlib
3
+ import typing as ta
4
+
5
+ from ... import textual as tx
6
+
7
+
8
+ ##
9
+
10
+
11
+ class QuitConfirmScreen(tx.ModalScreen[bool]):
12
+ """Screen with a dialog to confirm quit without saving."""
13
+
14
+ CSS = """
15
+ QuitConfirmScreen {
16
+ align: center middle;
17
+ }
18
+
19
+ #dialog {
20
+ width: 60;
21
+ height: 11;
22
+ border: thick $background 80%;
23
+ background: $surface;
24
+ padding: 1 2;
25
+ }
26
+
27
+ #question {
28
+ height: 3;
29
+ content-align: center middle;
30
+ }
31
+
32
+ Button {
33
+ width: 1fr;
34
+ }
35
+ """
36
+
37
+ def compose(self) -> tx.ComposeResult:
38
+ yield tx.Vertical(
39
+ tx.Label('You have unsaved changes. Do you want to save before quitting?', id='question'),
40
+ tx.Button('Save and Quit', variant='success', id='save'),
41
+ tx.Button('Quit Without Saving', variant='warning', id='quit'),
42
+ tx.Button('Cancel', variant='primary', id='cancel'),
43
+ id='dialog',
44
+ )
45
+
46
+ def on_button_pressed(self, event: tx.Button.Pressed) -> None:
47
+ if event.button.id == 'save':
48
+ self.dismiss(True)
49
+ elif event.button.id == 'quit':
50
+ self.dismiss(False)
51
+ else:
52
+ self.dismiss(None)
53
+
54
+
55
+ class TextEditor(tx.App):
56
+ """A simple text editor using Textual."""
57
+
58
+ CSS = """
59
+ TextArea {
60
+ height: 1fr;
61
+ }
62
+
63
+ Container {
64
+ height: 100%;
65
+ }
66
+ """
67
+
68
+ BINDINGS: ta.ClassVar[ta.Sequence[tx.Binding]] = [
69
+ tx.Binding('ctrl+s', 'save', 'Save', show=True),
70
+ tx.Binding('ctrl+q', 'quit', 'Quit', show=True),
71
+ ]
72
+
73
+ def __init__(self, filepath: pathlib.Path):
74
+ super().__init__()
75
+
76
+ self.filepath = filepath
77
+ self.text_area: tx.TextArea | None = None
78
+ self.modified = False
79
+ self.original_content = ''
80
+
81
+ def compose(self) -> tx.ComposeResult:
82
+ """Create child widgets for the app."""
83
+
84
+ yield tx.Header()
85
+ yield tx.Container(tx.TextArea(id='editor'))
86
+ yield tx.Footer()
87
+
88
+ def on_mount(self) -> None:
89
+ """Load the file content when the app starts."""
90
+
91
+ self.text_area = self.query_one('#editor', tx.TextArea)
92
+
93
+ # Load existing file or create new
94
+ if self.filepath.exists():
95
+ content = self.filepath.read_text()
96
+ self.text_area.load_text(content)
97
+ self.original_content = content
98
+ else:
99
+ self.original_content = ''
100
+
101
+ self.title = f'Text Editor - {self.filepath.name}'
102
+ self.sub_title = str(self.filepath)
103
+
104
+ def on_text_area_changed(self, event: tx.TextArea.Changed) -> None:
105
+ """Track if the document has been modified."""
106
+
107
+ if self.text_area:
108
+ current_content = self.text_area.text
109
+ self.modified = current_content != self.original_content
110
+
111
+ # Update title to show modified status
112
+ status = ' *' if self.modified else ''
113
+ self.title = f'Text Editor - {self.filepath.name}{status}'
114
+
115
+ def action_save(self) -> None:
116
+ """Save the current content to file."""
117
+
118
+ if self.text_area:
119
+ content = self.text_area.text
120
+ self.filepath.write_text(content)
121
+ self.original_content = content
122
+ self.modified = False
123
+ self.title = f'Text Editor - {self.filepath.name}'
124
+ self.notify(f'Saved to {self.filepath.name}')
125
+
126
+ async def action_quit(self) -> None:
127
+ """Quit the editor, prompting to save if modified."""
128
+
129
+ if self.modified:
130
+ def check_quit(should_save: bool | None) -> None:
131
+ if should_save is None:
132
+ # User cancelled
133
+ return
134
+
135
+ if should_save:
136
+ self.action_save()
137
+
138
+ self.exit()
139
+
140
+ await self.push_screen(QuitConfirmScreen(), callback=check_quit)
141
+
142
+ else:
143
+ self.exit()
144
+
145
+
146
+ def main() -> None:
147
+ """Parse arguments and run the editor."""
148
+
149
+ parser = argparse.ArgumentParser(description='Simple text editor')
150
+ parser.add_argument('filename', help='File to edit')
151
+ args = parser.parse_args()
152
+
153
+ filepath = pathlib.Path(args.filename).resolve()
154
+
155
+ # Create parent directories if needed
156
+ filepath.parent.mkdir(parents=True, exist_ok=True)
157
+
158
+ app = TextEditor(filepath)
159
+ app.run()
160
+
161
+
162
+ if __name__ == '__main__':
163
+ main()
@@ -12,7 +12,7 @@ import typing as ta
12
12
 
13
13
  from omlish import lang
14
14
 
15
- from ... import textual
15
+ from ... import textual as tx
16
16
  from .client import IrcClient
17
17
  from .commands import ALL_COMMANDS
18
18
  from .commands import IrcCommand
@@ -37,7 +37,7 @@ class IrcWindow:
37
37
  self.unread += 1
38
38
 
39
39
 
40
- class IrcApp(textual.App):
40
+ class IrcApp(tx.App):
41
41
  """IRC client application."""
42
42
 
43
43
  _commands: ta.ClassVar[ta.Mapping[str, IrcCommand]] = ALL_COMMANDS
@@ -65,9 +65,9 @@ class IrcApp(textual.App):
65
65
  }
66
66
  """
67
67
 
68
- BINDINGS: ta.ClassVar[ta.Sequence[textual.Binding]] = [
69
- textual.Binding('ctrl+n', 'next_window', 'Next Window', show=False),
70
- textual.Binding('ctrl+p', 'prev_window', 'Previous Window', show=False),
68
+ BINDINGS: ta.ClassVar[ta.Sequence[tx.Binding]] = [
69
+ tx.Binding('ctrl+n', 'next_window', 'Next Window', show=False),
70
+ tx.Binding('ctrl+p', 'prev_window', 'Previous Window', show=False),
71
71
  ]
72
72
 
73
73
  def __init__(
@@ -94,12 +94,12 @@ class IrcApp(textual.App):
94
94
 
95
95
  #
96
96
 
97
- def compose(self) -> textual.ComposeResult:
98
- text_area = textual.TextArea(id='messages', read_only=True, show_line_numbers=False)
97
+ def compose(self) -> tx.ComposeResult:
98
+ text_area = tx.TextArea(id='messages', read_only=True, show_line_numbers=False)
99
99
  text_area.cursor_blink = False
100
100
  yield text_area
101
- yield textual.Static('', id='status')
102
- yield textual.Input(placeholder='Enter command or message', id='input', select_on_focus=False)
101
+ yield tx.Static('', id='status')
102
+ yield tx.Input(placeholder='Enter command or message', id='input', select_on_focus=False)
103
103
 
104
104
  async def on_mount(self) -> None:
105
105
  """Initialize on mount."""
@@ -120,21 +120,21 @@ class IrcApp(textual.App):
120
120
  await self.add_message('system', f'Executing: {cmd}')
121
121
  await self.handle_command(cmd)
122
122
 
123
- async def on_key(self, event: textual.Key) -> None:
123
+ async def on_key(self, event: tx.Key) -> None:
124
124
  """Handle key events - redirect typing to input when messages area is focused."""
125
125
 
126
126
  focused = self.focused
127
127
  if focused and focused.id == 'messages':
128
128
  # If a printable character or common input key is pressed, focus the input and forward event
129
129
  if event.is_printable or event.key in ('space', 'backspace', 'delete'):
130
- input_widget = self.query_one('#input', textual.Input)
130
+ input_widget = self.query_one('#input', tx.Input)
131
131
  input_widget.focus()
132
132
  # Post the key event to the input widget so it handles it naturally
133
- input_widget.post_message(textual.Key(event.key, event.character))
133
+ input_widget.post_message(tx.Key(event.key, event.character))
134
134
  # Stop the event from being processed by the messages widget
135
135
  event.stop()
136
136
 
137
- async def on_input_submitted(self, event: textual.Input.Submitted) -> None:
137
+ async def on_input_submitted(self, event: tx.Input.Submitted) -> None:
138
138
  """Handle user input."""
139
139
 
140
140
  text = event.value.strip()
@@ -232,7 +232,7 @@ class IrcApp(textual.App):
232
232
  current_window.unread = 0
233
233
 
234
234
  # Update messages display
235
- messages_widget = self.query_one('#messages', textual.TextArea)
235
+ messages_widget = self.query_one('#messages', tx.TextArea)
236
236
 
237
237
  # Check if we switched windows or need full reload
238
238
  window_changed = self._last_window != current_window_name
@@ -271,7 +271,7 @@ class IrcApp(textual.App):
271
271
  window_list.append(indicator)
272
272
 
273
273
  status_text = ' '.join(window_list)
274
- self.query_one('#status', textual.Static).update(status_text)
274
+ self.query_one('#status', tx.Static).update(status_text)
275
275
 
276
276
  async def on_unmount(self) -> None:
277
277
  if (cl := self._client) is not None:
File without changes
@@ -27,6 +27,7 @@ with _lang.auto_proxy_init(globals()):
27
27
  from textual import timer # noqa
28
28
  from textual import widget # noqa
29
29
  from textual import widgets # noqa
30
+ from textual import work # noqa
30
31
  from textual.app import ActionError # noqa
31
32
  from textual.app import ActiveModeError # noqa
32
33
  from textual.app import App as App_ # noqa
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev472
3
+ Version: 0.0.0.dev474
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev472
17
+ Requires-Dist: omlish==0.0.0.dev474
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.9; extra == "all"
20
20
  Requires-Dist: pycparser~=2.23; extra == "all"
@@ -27,7 +27,7 @@ Requires-Dist: mypy~=1.18; extra == "all"
27
27
  Requires-Dist: gprof2dot~=2025.4; extra == "all"
28
28
  Requires-Dist: segno~=1.6; extra == "all"
29
29
  Requires-Dist: rich~=14.2; extra == "all"
30
- Requires-Dist: textual~=6.4; extra == "all"
30
+ Requires-Dist: textual~=6.5; extra == "all"
31
31
  Provides-Extra: black
32
32
  Requires-Dist: black~=25.9; extra == "black"
33
33
  Provides-Extra: c
@@ -46,7 +46,7 @@ Provides-Extra: qr
46
46
  Requires-Dist: segno~=1.6; extra == "qr"
47
47
  Provides-Extra: tui
48
48
  Requires-Dist: rich~=14.2; extra == "tui"
49
- Requires-Dist: textual~=6.4; extra == "tui"
49
+ Requires-Dist: textual~=6.5; extra == "tui"
50
50
  Dynamic: license-file
51
51
 
52
52
  # Overview
@@ -345,6 +345,8 @@ omdev/tools/pawk/__main__.py
345
345
  omdev/tools/pawk/pawk.py
346
346
  omdev/tui/__init__.py
347
347
  omdev/tui/apps/__init__.py
348
+ omdev/tui/apps/edit/__init__.py
349
+ omdev/tui/apps/edit/main.py
348
350
  omdev/tui/apps/irc/__init__.py
349
351
  omdev/tui/apps/irc/__main__.py
350
352
  omdev/tui/apps/irc/app.py
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev472
1
+ omlish==0.0.0.dev474
2
2
 
3
3
  [all]
4
4
  black~=25.9
@@ -12,7 +12,7 @@ mypy~=1.18
12
12
  gprof2dot~=2025.4
13
13
  segno~=1.6
14
14
  rich~=14.2
15
- textual~=6.4
15
+ textual~=6.5
16
16
 
17
17
  [black]
18
18
  black~=25.9
@@ -38,4 +38,4 @@ segno~=1.6
38
38
 
39
39
  [tui]
40
40
  rich~=14.2
41
- textual~=6.4
41
+ textual~=6.5
@@ -13,7 +13,7 @@ urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = 'BSD-3-Clause'
14
14
  readme = 'README.md'
15
15
  requires-python = '>=3.13'
16
- version = '0.0.0.dev472'
16
+ version = '0.0.0.dev474'
17
17
  classifiers = [
18
18
  'Development Status :: 2 - Pre-Alpha',
19
19
  'Intended Audience :: Developers',
@@ -24,7 +24,7 @@ classifiers = [
24
24
  ]
25
25
  description = 'omdev'
26
26
  dependencies = [
27
- 'omlish == 0.0.0.dev472',
27
+ 'omlish == 0.0.0.dev474',
28
28
  ]
29
29
 
30
30
  [project.optional-dependencies]
@@ -40,7 +40,7 @@ all = [
40
40
  'gprof2dot ~= 2025.4',
41
41
  'segno ~= 1.6',
42
42
  'rich ~= 14.2',
43
- 'textual ~= 6.4',
43
+ 'textual ~= 6.5',
44
44
  ]
45
45
  black = [
46
46
  'black ~= 25.9',
@@ -66,7 +66,7 @@ qr = [
66
66
  ]
67
67
  tui = [
68
68
  'rich ~= 14.2',
69
- 'textual ~= 6.4',
69
+ 'textual ~= 6.5',
70
70
  ]
71
71
 
72
72
  [project.entry-points]
File without changes
File without changes
File without changes