cmd2 2.5.10__tar.gz → 2.6.0__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 (370) hide show
  1. {cmd2-2.5.10 → cmd2-2.6.0}/.pre-commit-config.yaml +6 -3
  2. {cmd2-2.5.10 → cmd2-2.6.0}/CHANGELOG.md +124 -51
  3. {cmd2-2.5.10 → cmd2-2.6.0}/Makefile +21 -4
  4. {cmd2-2.5.10 → cmd2-2.6.0}/PKG-INFO +34 -17
  5. {cmd2-2.5.10 → cmd2-2.6.0}/Pipfile +0 -1
  6. {cmd2-2.5.10 → cmd2-2.6.0}/README.md +29 -13
  7. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/__init__.py +11 -22
  8. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/ansi.py +78 -91
  9. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/argparse_completer.py +109 -132
  10. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/argparse_custom.py +199 -217
  11. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/clipboard.py +2 -6
  12. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/cmd2.py +447 -521
  13. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/command_definition.py +34 -44
  14. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/constants.py +1 -3
  15. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/decorators.py +47 -58
  16. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/exceptions.py +23 -46
  17. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/history.py +29 -43
  18. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/parsing.py +59 -84
  19. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/plugin.py +6 -10
  20. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/py_bridge.py +20 -26
  21. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/rl_utils.py +45 -69
  22. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/table_creator.py +83 -106
  23. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/transcript.py +55 -59
  24. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/utils.py +143 -176
  25. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2.egg-info/PKG-INFO +34 -17
  26. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2.egg-info/SOURCES.txt +3 -0
  27. cmd2-2.6.0/codecov.yml +17 -0
  28. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/generating_output.md +11 -0
  29. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/history.md +4 -0
  30. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/settings.md +1 -0
  31. {cmd2-2.5.10 → cmd2-2.6.0}/docs/overview/installation.md +22 -10
  32. {cmd2-2.5.10 → cmd2-2.6.0}/examples/README.md +2 -0
  33. {cmd2-2.5.10 → cmd2-2.6.0}/examples/alias_startup.py +3 -5
  34. {cmd2-2.5.10 → cmd2-2.6.0}/examples/arg_decorators.py +8 -10
  35. {cmd2-2.5.10 → cmd2-2.6.0}/examples/arg_print.py +15 -16
  36. {cmd2-2.5.10 → cmd2-2.6.0}/examples/argparse_completion.py +10 -19
  37. {cmd2-2.5.10 → cmd2-2.6.0}/examples/async_printing.py +21 -35
  38. {cmd2-2.5.10 → cmd2-2.6.0}/examples/basic.py +6 -7
  39. {cmd2-2.5.10 → cmd2-2.6.0}/examples/basic_completion.py +21 -27
  40. {cmd2-2.5.10 → cmd2-2.6.0}/examples/cmd_as_argument.py +12 -15
  41. {cmd2-2.5.10 → cmd2-2.6.0}/examples/colors.py +6 -8
  42. {cmd2-2.5.10 → cmd2-2.6.0}/examples/custom_parser.py +5 -10
  43. {cmd2-2.5.10 → cmd2-2.6.0}/examples/decorator_example.py +10 -14
  44. cmd2-2.6.0/examples/default_categories.py +76 -0
  45. {cmd2-2.5.10 → cmd2-2.6.0}/examples/dynamic_commands.py +4 -5
  46. {cmd2-2.5.10 → cmd2-2.6.0}/examples/environment.py +5 -8
  47. {cmd2-2.5.10 → cmd2-2.6.0}/examples/event_loops.py +1 -2
  48. {cmd2-2.5.10 → cmd2-2.6.0}/examples/example.py +9 -11
  49. {cmd2-2.5.10 → cmd2-2.6.0}/examples/exit_code.py +6 -10
  50. {cmd2-2.5.10 → cmd2-2.6.0}/examples/first_app.py +13 -15
  51. {cmd2-2.5.10 → cmd2-2.6.0}/examples/hello_cmd2.py +1 -4
  52. {cmd2-2.5.10 → cmd2-2.6.0}/examples/help_categories.py +49 -52
  53. {cmd2-2.5.10 → cmd2-2.6.0}/examples/hooks.py +6 -11
  54. {cmd2-2.5.10 → cmd2-2.6.0}/examples/initialization.py +6 -7
  55. {cmd2-2.5.10 → cmd2-2.6.0}/examples/migrating.py +10 -13
  56. {cmd2-2.5.10 → cmd2-2.6.0}/examples/modular_commands/commandset_basic.py +21 -29
  57. {cmd2-2.5.10 → cmd2-2.6.0}/examples/modular_commands/commandset_complex.py +13 -20
  58. {cmd2-2.5.10 → cmd2-2.6.0}/examples/modular_commands/commandset_custominit.py +4 -7
  59. {cmd2-2.5.10 → cmd2-2.6.0}/examples/modular_commands_basic.py +8 -13
  60. {cmd2-2.5.10 → cmd2-2.6.0}/examples/modular_commands_dynamic.py +11 -15
  61. {cmd2-2.5.10 → cmd2-2.6.0}/examples/modular_commands_main.py +8 -13
  62. {cmd2-2.5.10 → cmd2-2.6.0}/examples/modular_subcommands.py +13 -16
  63. {cmd2-2.5.10 → cmd2-2.6.0}/examples/override_parser.py +2 -7
  64. {cmd2-2.5.10 → cmd2-2.6.0}/examples/paged_output.py +6 -10
  65. {cmd2-2.5.10 → cmd2-2.6.0}/examples/persistent_history.py +1 -2
  66. {cmd2-2.5.10 → cmd2-2.6.0}/examples/pirate.py +15 -16
  67. cmd2-2.6.0/examples/pretty_print.py +29 -0
  68. {cmd2-2.5.10 → cmd2-2.6.0}/examples/python_scripting.py +7 -8
  69. {cmd2-2.5.10 → cmd2-2.6.0}/examples/read_input.py +13 -22
  70. {cmd2-2.5.10 → cmd2-2.6.0}/examples/remove_builtin_commands.py +1 -2
  71. {cmd2-2.5.10 → cmd2-2.6.0}/examples/remove_settable.py +2 -5
  72. cmd2-2.6.0/examples/scripts/arg_printer.py +7 -0
  73. {cmd2-2.5.10 → cmd2-2.6.0}/examples/scripts/conditional.py +9 -12
  74. {cmd2-2.5.10 → cmd2-2.6.0}/examples/scripts/save_help_text.py +18 -30
  75. cmd2-2.6.0/examples/scripts/script.py +3 -0
  76. {cmd2-2.5.10 → cmd2-2.6.0}/examples/subcommands.py +14 -17
  77. {cmd2-2.5.10 → cmd2-2.6.0}/examples/table_creation.py +24 -31
  78. {cmd2-2.5.10 → cmd2-2.6.0}/examples/unicode_commands.py +4 -5
  79. {cmd2-2.5.10 → cmd2-2.6.0}/mkdocs.yml +0 -2
  80. cmd2-2.6.0/package.json +6 -0
  81. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/build-pyenvs.sh +2 -2
  82. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/cmd2_ext_test/__init__.py +0 -2
  83. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/cmd2_ext_test/cmd2_ext_test.py +2 -4
  84. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/examples/example.py +1 -4
  85. {cmd2-2.5.10/plugins/template → cmd2-2.6.0/plugins/ext_test}/noxfile.py +1 -1
  86. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/setup.py +3 -11
  87. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/tasks.py +7 -12
  88. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/tests/test_ext_test.py +0 -3
  89. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/tasks.py +21 -33
  90. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/README.md +3 -1
  91. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/build-pyenvs.sh +2 -2
  92. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/cmd2_myplugin/__init__.py +1 -3
  93. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/cmd2_myplugin/myplugin.py +12 -16
  94. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/examples/example.py +3 -6
  95. {cmd2-2.5.10/plugins/ext_test → cmd2-2.6.0/plugins/template}/noxfile.py +2 -2
  96. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/setup.py +4 -7
  97. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/tasks.py +37 -41
  98. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/tests/test_myplugin.py +5 -9
  99. cmd2-2.6.0/pyproject.toml +348 -0
  100. {cmd2-2.5.10 → cmd2-2.6.0}/tasks.py +57 -60
  101. {cmd2-2.5.10 → cmd2-2.6.0}/tests/conftest.py +17 -26
  102. {cmd2-2.5.10 → cmd2-2.6.0}/tests/pyscript/echo.py +0 -1
  103. {cmd2-2.5.10 → cmd2-2.6.0}/tests/pyscript/environment.py +3 -4
  104. {cmd2-2.5.10 → cmd2-2.6.0}/tests/pyscript/help.py +0 -1
  105. {cmd2-2.5.10 → cmd2-2.6.0}/tests/pyscript/py_locals.py +0 -1
  106. {cmd2-2.5.10 → cmd2-2.6.0}/tests/pyscript/pyscript_dir.py +0 -1
  107. cmd2-2.6.0/tests/pyscript/raises_exception.py +3 -0
  108. cmd2-2.6.0/tests/pyscript/recursive.py +8 -0
  109. {cmd2-2.5.10 → cmd2-2.6.0}/tests/pyscript/self_in_py.py +0 -1
  110. {cmd2-2.5.10 → cmd2-2.6.0}/tests/pyscript/stdout_capture.py +0 -1
  111. {cmd2-2.5.10 → cmd2-2.6.0}/tests/pyscript/stop.py +0 -1
  112. cmd2-2.6.0/tests/script.py +3 -0
  113. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_ansi.py +36 -37
  114. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_argparse.py +80 -89
  115. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_argparse_completer.py +128 -148
  116. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_argparse_custom.py +46 -50
  117. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_cmd2.py +380 -387
  118. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_completion.py +289 -266
  119. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_history.py +71 -75
  120. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_parsing.py +102 -97
  121. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_plugin.py +62 -76
  122. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_run_pyscript.py +37 -41
  123. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_table_creator.py +41 -61
  124. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_transcript.py +26 -31
  125. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_utils.py +104 -114
  126. {cmd2-2.5.10 → cmd2-2.6.0}/tests/test_utils_defining_class.py +14 -17
  127. cmd2-2.6.0/tests_isolated/__init__.py +0 -0
  128. cmd2-2.6.0/tests_isolated/test_commandset/__init__.py +0 -0
  129. {cmd2-2.5.10 → cmd2-2.6.0}/tests_isolated/test_commandset/conftest.py +20 -31
  130. {cmd2-2.5.10 → cmd2-2.6.0}/tests_isolated/test_commandset/test_argparse_subcommands.py +23 -28
  131. {cmd2-2.5.10 → cmd2-2.6.0}/tests_isolated/test_commandset/test_categories.py +21 -35
  132. {cmd2-2.5.10 → cmd2-2.6.0}/tests_isolated/test_commandset/test_commandset.py +134 -140
  133. cmd2-2.5.10/examples/default_categories.py +0 -89
  134. cmd2-2.5.10/examples/scripts/arg_printer.py +0 -8
  135. cmd2-2.5.10/examples/scripts/script.py +0 -7
  136. cmd2-2.5.10/pyproject.toml +0 -297
  137. cmd2-2.5.10/tests/__init__.py +0 -3
  138. cmd2-2.5.10/tests/pyscript/raises_exception.py +0 -7
  139. cmd2-2.5.10/tests/pyscript/recursive.py +0 -13
  140. cmd2-2.5.10/tests/script.py +0 -7
  141. cmd2-2.5.10/tests_isolated/test_commandset/__init__.py +0 -3
  142. {cmd2-2.5.10 → cmd2-2.6.0}/.prettierignore +0 -0
  143. {cmd2-2.5.10 → cmd2-2.6.0}/.prettierrc +0 -0
  144. {cmd2-2.5.10 → cmd2-2.6.0}/.readthedocs.yaml +0 -0
  145. {cmd2-2.5.10 → cmd2-2.6.0}/LICENSE +0 -0
  146. {cmd2-2.5.10 → cmd2-2.6.0}/MANIFEST.in +0 -0
  147. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2/py.typed +0 -0
  148. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2.egg-info/dependency_links.txt +0 -0
  149. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2.egg-info/requires.txt +0 -0
  150. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2.egg-info/top_level.txt +0 -0
  151. {cmd2-2.5.10 → cmd2-2.6.0}/cmd2.png +0 -0
  152. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/ansi.md +0 -0
  153. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/argparse_completer.md +0 -0
  154. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/argparse_custom.md +0 -0
  155. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/cmd.md +0 -0
  156. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/command_definition.md +0 -0
  157. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/constants.md +0 -0
  158. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/decorators.md +0 -0
  159. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/exceptions.md +0 -0
  160. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/history.md +0 -0
  161. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/index.md +0 -0
  162. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/parsing.md +0 -0
  163. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/plugin.md +0 -0
  164. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/py_bridge.md +0 -0
  165. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/table_creator.md +0 -0
  166. {cmd2-2.5.10 → cmd2-2.6.0}/docs/api/utils.md +0 -0
  167. {cmd2-2.5.10 → cmd2-2.6.0}/docs/doc_conventions.md +0 -0
  168. {cmd2-2.5.10 → cmd2-2.6.0}/docs/examples/alternate_event_loops.md +0 -0
  169. {cmd2-2.5.10 → cmd2-2.6.0}/docs/examples/examples.md +0 -0
  170. {cmd2-2.5.10 → cmd2-2.6.0}/docs/examples/first_app.md +0 -0
  171. {cmd2-2.5.10 → cmd2-2.6.0}/docs/examples/index.md +0 -0
  172. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/argument_processing.md +0 -0
  173. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/builtin_commands.md +0 -0
  174. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/clipboard.md +0 -0
  175. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/commands.md +0 -0
  176. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/completion.md +0 -0
  177. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/disable_commands.md +0 -0
  178. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/embedded_python_shells.md +0 -0
  179. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/help.md +0 -0
  180. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/hooks.md +0 -0
  181. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/index.md +0 -0
  182. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/initialization.md +0 -0
  183. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/misc.md +0 -0
  184. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/modular_commands.md +0 -0
  185. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/multiline_commands.md +0 -0
  186. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/os.md +0 -0
  187. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/packaging.md +0 -0
  188. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/plugins.md +0 -0
  189. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/prompt.md +0 -0
  190. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/redirection.md +0 -0
  191. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/scripting.md +0 -0
  192. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/shortcuts_aliases_macros.md +0 -0
  193. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/startup_commands.md +0 -0
  194. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/table_creation.md +0 -0
  195. {cmd2-2.5.10 → cmd2-2.6.0}/docs/features/transcripts.md +0 -0
  196. {cmd2-2.5.10 → cmd2-2.6.0}/docs/index.md +0 -0
  197. {cmd2-2.5.10 → cmd2-2.6.0}/docs/javascripts/readthedocs.js +0 -0
  198. {cmd2-2.5.10 → cmd2-2.6.0}/docs/migrating/incompatibilities.md +0 -0
  199. {cmd2-2.5.10 → cmd2-2.6.0}/docs/migrating/index.md +0 -0
  200. {cmd2-2.5.10 → cmd2-2.6.0}/docs/migrating/minimum.md +0 -0
  201. {cmd2-2.5.10 → cmd2-2.6.0}/docs/migrating/next_steps.md +0 -0
  202. {cmd2-2.5.10 → cmd2-2.6.0}/docs/migrating/why.md +0 -0
  203. {cmd2-2.5.10 → cmd2-2.6.0}/docs/overrides/main.html +0 -0
  204. {cmd2-2.5.10 → cmd2-2.6.0}/docs/overview/alternatives.md +0 -0
  205. {cmd2-2.5.10 → cmd2-2.6.0}/docs/overview/index.md +0 -0
  206. {cmd2-2.5.10 → cmd2-2.6.0}/docs/overview/integrating.md +0 -0
  207. {cmd2-2.5.10 → cmd2-2.6.0}/docs/overview/resources.md +0 -0
  208. {cmd2-2.5.10 → cmd2-2.6.0}/docs/plugins/external_test.md +0 -0
  209. {cmd2-2.5.10 → cmd2-2.6.0}/docs/plugins/index.md +0 -0
  210. {cmd2-2.5.10 → cmd2-2.6.0}/docs/requirements.txt +0 -0
  211. {cmd2-2.5.10 → cmd2-2.6.0}/docs/stylesheets/readthedocs.css +0 -0
  212. {cmd2-2.5.10 → cmd2-2.6.0}/docs/testing.md +0 -0
  213. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.cmd2rc +0 -0
  214. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/@plugins_snapshot.json +0 -0
  215. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/_ast.data.json +0 -0
  216. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/_ast.meta.json +0 -0
  217. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/_codecs.data.json +0 -0
  218. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/_codecs.meta.json +0 -0
  219. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/_collections_abc.data.json +0 -0
  220. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/_collections_abc.meta.json +0 -0
  221. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/_typeshed/__init__.data.json +0 -0
  222. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/_typeshed/__init__.meta.json +0 -0
  223. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/_typeshed/importlib.data.json +0 -0
  224. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/_typeshed/importlib.meta.json +0 -0
  225. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/abc.data.json +0 -0
  226. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/abc.meta.json +0 -0
  227. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/argparse.data.json +0 -0
  228. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/argparse.meta.json +0 -0
  229. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/builtins.data.json +0 -0
  230. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/builtins.meta.json +0 -0
  231. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/codecs.data.json +0 -0
  232. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/codecs.meta.json +0 -0
  233. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/collections/__init__.data.json +0 -0
  234. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/collections/__init__.meta.json +0 -0
  235. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/collections/abc.data.json +0 -0
  236. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/collections/abc.meta.json +0 -0
  237. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/contextlib.data.json +0 -0
  238. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/contextlib.meta.json +0 -0
  239. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/dataclasses.data.json +0 -0
  240. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/dataclasses.meta.json +0 -0
  241. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/__init__.data.json +0 -0
  242. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/__init__.meta.json +0 -0
  243. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/_policybase.data.json +0 -0
  244. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/_policybase.meta.json +0 -0
  245. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/charset.data.json +0 -0
  246. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/charset.meta.json +0 -0
  247. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/contentmanager.data.json +0 -0
  248. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/contentmanager.meta.json +0 -0
  249. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/errors.data.json +0 -0
  250. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/errors.meta.json +0 -0
  251. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/header.data.json +0 -0
  252. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/header.meta.json +0 -0
  253. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/message.data.json +0 -0
  254. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/message.meta.json +0 -0
  255. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/policy.data.json +0 -0
  256. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/email/policy.meta.json +0 -0
  257. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/enum.data.json +0 -0
  258. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/enum.meta.json +0 -0
  259. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/genericpath.data.json +0 -0
  260. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/genericpath.meta.json +0 -0
  261. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/__init__.data.json +0 -0
  262. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/__init__.meta.json +0 -0
  263. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/_abc.data.json +0 -0
  264. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/_abc.meta.json +0 -0
  265. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/abc.data.json +0 -0
  266. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/abc.meta.json +0 -0
  267. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/machinery.data.json +0 -0
  268. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/machinery.meta.json +0 -0
  269. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/metadata/__init__.data.json +0 -0
  270. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/metadata/__init__.meta.json +0 -0
  271. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/metadata/_meta.data.json +0 -0
  272. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/metadata/_meta.meta.json +0 -0
  273. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/readers.data.json +0 -0
  274. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/readers.meta.json +0 -0
  275. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/resources/__init__.data.json +0 -0
  276. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/resources/__init__.meta.json +0 -0
  277. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/resources/abc.data.json +0 -0
  278. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/importlib/resources/abc.meta.json +0 -0
  279. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/io.data.json +0 -0
  280. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/io.meta.json +0 -0
  281. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/os/__init__.data.json +0 -0
  282. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/os/__init__.meta.json +0 -0
  283. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/os/path.data.json +0 -0
  284. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/os/path.meta.json +0 -0
  285. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/pathlib.data.json +0 -0
  286. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/pathlib.meta.json +0 -0
  287. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/posixpath.data.json +0 -0
  288. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/posixpath.meta.json +0 -0
  289. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/re.data.json +0 -0
  290. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/re.meta.json +0 -0
  291. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/resource.data.json +0 -0
  292. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/resource.meta.json +0 -0
  293. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/sre_compile.data.json +0 -0
  294. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/sre_compile.meta.json +0 -0
  295. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/sre_constants.data.json +0 -0
  296. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/sre_constants.meta.json +0 -0
  297. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/sre_parse.data.json +0 -0
  298. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/sre_parse.meta.json +0 -0
  299. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/subprocess.data.json +0 -0
  300. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/subprocess.meta.json +0 -0
  301. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/sys/__init__.data.json +0 -0
  302. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/sys/__init__.meta.json +0 -0
  303. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/sys/_monitoring.data.json +0 -0
  304. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/sys/_monitoring.meta.json +0 -0
  305. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/types.data.json +0 -0
  306. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/types.meta.json +0 -0
  307. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/typing.data.json +0 -0
  308. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/typing.meta.json +0 -0
  309. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/typing_extensions.data.json +0 -0
  310. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/typing_extensions.meta.json +0 -0
  311. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/zipfile/__init__.data.json +0 -0
  312. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/zipfile/__init__.meta.json +0 -0
  313. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/zipfile/_path.data.json +0 -0
  314. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/3.12/zipfile/_path.meta.json +0 -0
  315. {cmd2-2.5.10 → cmd2-2.6.0}/examples/.mypy_cache/CACHEDIR.TAG +0 -0
  316. {cmd2-2.5.10 → cmd2-2.6.0}/examples/cmd2_history.dat +0 -0
  317. {cmd2-2.5.10 → cmd2-2.6.0}/examples/modular_commands/__init__.py +0 -0
  318. {cmd2-2.5.10 → cmd2-2.6.0}/examples/scripts/nested.txt +0 -0
  319. {cmd2-2.5.10 → cmd2-2.6.0}/examples/scripts/quit.txt +0 -0
  320. {cmd2-2.5.10 → cmd2-2.6.0}/examples/scripts/script.txt +0 -0
  321. {cmd2-2.5.10 → cmd2-2.6.0}/examples/tmux_launch.sh +0 -0
  322. {cmd2-2.5.10 → cmd2-2.6.0}/examples/tmux_split.sh +0 -0
  323. {cmd2-2.5.10 → cmd2-2.6.0}/examples/transcripts/exampleSession.txt +0 -0
  324. {cmd2-2.5.10 → cmd2-2.6.0}/examples/transcripts/pirate.transcript +0 -0
  325. {cmd2-2.5.10 → cmd2-2.6.0}/examples/transcripts/quit.txt +0 -0
  326. {cmd2-2.5.10 → cmd2-2.6.0}/examples/transcripts/transcript_regex.txt +0 -0
  327. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/README.txt +0 -0
  328. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/CHANGELOG.md +0 -0
  329. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/README.md +0 -0
  330. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/cmd2_ext_test/py.typed +0 -0
  331. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/cmd2_ext_test/pylintrc +0 -0
  332. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/pyproject.toml +0 -0
  333. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/tests/__init__.py +0 -0
  334. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/ext_test/tests/pylintrc +0 -0
  335. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/CHANGELOG.md +0 -0
  336. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/LICENSE +0 -0
  337. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/cmd2_myplugin/pylintrc +0 -0
  338. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/tests/__init__.py +0 -0
  339. {cmd2-2.5.10 → cmd2-2.6.0}/plugins/template/tests/pylintrc +0 -0
  340. {cmd2-2.5.10 → cmd2-2.6.0}/readme_files/shout_out.csv +0 -0
  341. {cmd2-2.5.10 → cmd2-2.6.0}/readme_files/shoutout.txt +0 -0
  342. {cmd2-2.5.10 → cmd2-2.6.0}/setup.cfg +0 -0
  343. {cmd2-2.5.10 → cmd2-2.6.0}/tests/.cmd2rc +0 -0
  344. {cmd2-2.5.10/tests_isolated → cmd2-2.6.0/tests}/__init__.py +0 -0
  345. {cmd2-2.5.10 → cmd2-2.6.0}/tests/relative_multiple.txt +0 -0
  346. {cmd2-2.5.10 → cmd2-2.6.0}/tests/script.txt +0 -0
  347. {cmd2-2.5.10 → cmd2-2.6.0}/tests/scripts/binary.bin +0 -0
  348. {cmd2-2.5.10 → cmd2-2.6.0}/tests/scripts/empty.txt +0 -0
  349. {cmd2-2.5.10 → cmd2-2.6.0}/tests/scripts/help.txt +0 -0
  350. {cmd2-2.5.10 → cmd2-2.6.0}/tests/scripts/nested.txt +0 -0
  351. {cmd2-2.5.10 → cmd2-2.6.0}/tests/scripts/one_down.txt +0 -0
  352. {cmd2-2.5.10 → cmd2-2.6.0}/tests/scripts/postcmds.txt +0 -0
  353. {cmd2-2.5.10 → cmd2-2.6.0}/tests/scripts/precmds.txt +0 -0
  354. {cmd2-2.5.10 → cmd2-2.6.0}/tests/scripts/utf8.txt +0 -0
  355. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/bol_eol.txt +0 -0
  356. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/characterclass.txt +0 -0
  357. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/dotstar.txt +0 -0
  358. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/extension_notation.txt +0 -0
  359. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/failure.txt +0 -0
  360. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/from_cmdloop.txt +0 -0
  361. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/multiline_no_regex.txt +0 -0
  362. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/multiline_regex.txt +0 -0
  363. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/no_output.txt +0 -0
  364. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/no_output_last.txt +0 -0
  365. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/regex_set.txt +0 -0
  366. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/singleslash.txt +0 -0
  367. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/slashes_escaped.txt +0 -0
  368. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/slashslash.txt +0 -0
  369. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/spaces.txt +0 -0
  370. {cmd2-2.5.10 → cmd2-2.6.0}/tests/transcripts/word_boundaries.txt +0 -0
@@ -4,19 +4,22 @@ repos:
4
4
  hooks:
5
5
  - id: check-case-conflict
6
6
  - id: check-merge-conflict
7
+ - id: check-toml
7
8
  - id: end-of-file-fixer
8
9
  - id: trailing-whitespace
9
10
 
10
11
  - repo: https://github.com/astral-sh/ruff-pre-commit
11
- rev: "v0.9.2"
12
+ rev: "v0.11.10"
12
13
  hooks:
13
14
  - id: ruff-format
14
15
  args: [--config=pyproject.toml]
16
+ - id: ruff-check
17
+ args: [--config=pyproject.toml, --fix, --exit-non-zero-on-fix]
15
18
 
16
19
  - repo: https://github.com/pre-commit/mirrors-prettier
17
20
  rev: "v3.1.0"
18
21
  hooks:
19
22
  - id: prettier
20
23
  additional_dependencies:
21
- - prettier@3.4.2
22
- - prettier-plugin-toml@2.0.1
24
+ - prettier@3.5.3
25
+ - prettier-plugin-toml@2.0.5
@@ -1,3 +1,17 @@
1
+ ## 2.6.0 (May 31, 2025)
2
+
3
+ - Breaking Change
4
+ - `cmd2` 2.6 supports Python 3.9+ (removed support for Python 3.8)
5
+ - Enhancements
6
+ - Added support for Python 3.14
7
+ - Added new `Cmd.ppretty()` method for pretty printing arbitrary Python data structures
8
+ - Clarified help text for `-t`/`--transcript` argument to the `history` command
9
+
10
+ ## 2.5.11 (January 25, 2025)
11
+
12
+ - Bug Fixes
13
+ - Fixed duplicated parameter tables in API documentation.
14
+
1
15
  ## 2.5.10 (January 25, 2025)
2
16
 
3
17
  - Bug Fixes
@@ -62,7 +76,8 @@
62
76
  - Multiline commands are no longer fragmented in up-arrow history.
63
77
  - Fixed bug where `async_alert()` overwrites readline's incremental and non-incremental search prompts.
64
78
  - This fix introduces behavior where an updated prompt won't display after an aborted search
65
- until a user presses Enter. See [async_printing.py](https://github.com/python-cmd2/cmd2/blob/master/examples/async_printing.py)
79
+ until a user presses Enter.
80
+ See [async_printing.py](https://github.com/python-cmd2/cmd2/blob/master/examples/async_printing.py)
66
81
  example for how to handle this case using `Cmd.need_prompt_refresh()` and `Cmd.async_refresh_prompt()`.
67
82
  - Enhancements
68
83
  - Removed dependency on `attrs` and replaced with [dataclasses](https://docs.python.org/3/library/dataclasses.html)
@@ -258,7 +273,8 @@
258
273
  and just opens an interactive Python shell.
259
274
  - Changed default behavior of `runcmds_plus_hooks()` to not stop when Ctrl-C is pressed and instead
260
275
  run the next command in its list.
261
- - Removed `cmd2.Cmd.quit_on_sigint` flag, which when `True`, quit the application when Ctrl-C was pressed at the prompt.
276
+ - Removed `cmd2.Cmd.quit_on_sigint` flag, which when `True`, quit the application when Ctrl-C was pressed at the
277
+ prompt.
262
278
  - The history bug fix resulted in structure changes to the classes in `cmd2.history`. Therefore, persistent history
263
279
  files created with versions older than 2.0.0 are not compatible.
264
280
  - Enhancements
@@ -491,7 +507,8 @@
491
507
  - Enhancements
492
508
  - The documentation at [cmd2.rftd.io](https://cmd2.readthedocs.io) received a major overhaul
493
509
  - Other
494
- - Moved [categorize](https://cmd2.readthedocs.io/en/latest/api/utils.html#miscellaneous) utility function from **decorators** module to **utils** module
510
+ - Moved [categorize](https://cmd2.readthedocs.io/en/latest/api/utils.html#miscellaneous) utility function from \*
511
+ \*decorators** module to **utils\*\* module
495
512
  - Notes
496
513
  - Now that the 1.0 release is out, `cmd2` intends to follow [Semantic Versioning](https://semver.org)
497
514
 
@@ -635,7 +652,8 @@
635
652
  ## 0.9.19 (October 14, 2019)
636
653
 
637
654
  - Bug Fixes
638
- - Fixed `ValueError` exception which could occur when an old format persistent history file is loaded with new `cmd2`
655
+ - Fixed `ValueError` exception which could occur when an old format persistent history file is loaded with new
656
+ `cmd2`
639
657
  - Enhancements
640
658
  - Improved displaying multiline CompletionErrors by indenting all lines
641
659
 
@@ -645,7 +663,8 @@
645
663
  - Fixed bug introduced in 0.9.17 where help functions for hidden and disabled commands were not being filtered
646
664
  out as help topics
647
665
  - Enhancements
648
- - `AutoCompleter` now handles argparse's mutually exclusive groups. It will not tab complete flag names or positionals
666
+ - `AutoCompleter` now handles argparse's mutually exclusive groups. It will not tab complete flag names or
667
+ positionals
649
668
  for already completed groups. It also will print an error if you try tab completing a flag's value if the flag
650
669
  belongs to a completed group.
651
670
  - `AutoCompleter` now uses the passed-in parser's help formatter to generate hint text. This gives help and
@@ -694,7 +713,8 @@
694
713
  - Fixed issue where completer function of disabled command would still run
695
714
  - Enhancements
696
715
  - Greatly simplified using argparse-based tab completion. The new interface is a complete overhaul that breaks
697
- the previous way of specifying completion and choices functions. See header of [argparse_custom.py](https://github.com/python-cmd2/cmd2/blob/master/cmd2/argparse_custom.py)
716
+ the previous way of specifying completion and choices functions. See header
717
+ of [argparse_custom.py](https://github.com/python-cmd2/cmd2/blob/master/cmd2/argparse_custom.py)
698
718
  for more information.
699
719
  - Enabled tab completion on multiline commands
700
720
  - **Renamed Commands Notice**
@@ -706,8 +726,10 @@
706
726
  - Lots of end users were confused particularly about what exactly `load` should be loading
707
727
  - Breaking Changes
708
728
  - Restored `cmd2.Cmd.statement_parser` to be a public attribute (no underscore)
709
- - Since it can be useful for creating [post-parsing hooks](https://cmd2.readthedocs.io/en/latest/features/hooks.html#postparsing-hooks)
710
- - Completely overhauled the interface for adding tab completion to argparse arguments. See enhancements for more details.
729
+ - Since it can be useful for
730
+ creating [post-parsing hooks](https://cmd2.readthedocs.io/en/latest/features/hooks.html#postparsing-hooks)
731
+ - Completely overhauled the interface for adding tab completion to argparse arguments. See enhancements for more
732
+ details.
711
733
  - `ACArgumentParser` is now called `Cmd2ArgumentParser`
712
734
  - Moved `basic_complete` to utils.py
713
735
  - Made optional arguments on the following completer methods keyword-only:
@@ -737,7 +759,8 @@
737
759
  to determine if ANSI escape sequences should be stripped when not writing to a tty. See documentation for more
738
760
  information on the `allow_ansi` setting.
739
761
  - Breaking Changes
740
- - Python 3.4 reached its [end of life](https://www.python.org/dev/peps/pep-0429/) on March 18, 2019 and is no longer supported by `cmd2`
762
+ - Python 3.4 reached its [end of life](https://www.python.org/dev/peps/pep-0429/) on March 18, 2019 and is no longer
763
+ supported by `cmd2`
741
764
  - If you need to use Python 3.4, you should pin your requirements to use `cmd2` 0.9.13
742
765
  - Made lots of changes to minimize the public API of the `cmd2.Cmd` class
743
766
  - Attributes and methods we do not intend to be public now all begin with an underscore
@@ -747,7 +770,9 @@
747
770
  - `pexcept` - print Exception message to sys.stderr. If debug is true, print exception traceback if one exists
748
771
  - Signature of `poutput` and `perror` significantly changed
749
772
  - Removed color parameters `color`, `err_color`, and `war_color` from `poutput` and `perror`
750
- - See the docstrings of these methods or the [cmd2 docs](https://cmd2.readthedocs.io/en/latest/features/generating_output.html) for more info on applying styles to output messages
773
+ - See the docstrings of these methods or
774
+ the [cmd2 docs](https://cmd2.readthedocs.io/en/latest/features/generating_output.html) for more info on
775
+ applying styles to output messages
751
776
  - `end` argument is now keyword-only and cannot be specified positionally
752
777
  - `traceback_war` no longer exists as an argument since it isn't needed now that `perror` and `pexcept` exist
753
778
  - Moved `cmd2.Cmd.colors` to ansi.py and renamed it to `allow_ansi`. This is now an application-wide setting.
@@ -827,7 +852,8 @@
827
852
  - Bug Fixes
828
853
  - Fixed a bug in how redirection and piping worked inside `py` or `pyscript` commands
829
854
  - Fixed bug in `async_alert` where it didn't account for prompts that contained newline characters
830
- - Fixed path completion case when CWD is just a slash. Relative path matches were incorrectly prepended with a slash.
855
+ - Fixed path completion case when CWD is just a slash. Relative path matches were incorrectly prepended with a
856
+ slash.
831
857
  - Enhancements
832
858
  - Added ability to include command name placeholders in the message printed when trying to run a disabled command.
833
859
  - See docstring for `disable_command()` or `disable_category()` for more details.
@@ -845,7 +871,8 @@
845
871
  - The following commands now write to stderr instead of stdout when printing an error. This will make catching
846
872
  errors easier in pyscript.
847
873
  _ `do_help()` - when no help information can be found
848
- _ `default()` - in all cases since this is called when an invalid command name is run \* `_report_disabled_command_usage()` - in all cases since this is called when a disabled command is run
874
+ _ `default()` - in all cases since this is called when an invalid command name is run \*
875
+ `_report_disabled_command_usage()` - in all cases since this is called when a disabled command is run
849
876
  - Removed \*\*\* from beginning of error messages printed by `do_help()` and `default()`
850
877
  - Significantly refactored `cmd.Cmd` class so that all class attributes got converted to instance attributes, also:
851
878
  - Added `allow_redirection`, `terminators`, `multiline_commands`, and `shortcuts` as optional arguments
@@ -975,7 +1002,8 @@
975
1002
  - The **set** command now tab completes settable parameter names
976
1003
  - Added `async_alert`, `async_update_prompt`, and `set_window_title` functions
977
1004
  - These allow you to provide feedback to the user in an asynchronous fashion, meaning alerts can
978
- display when the user is still entering text at the prompt. See [async_printing.py](https://github.com/python-cmd2/cmd2/blob/master/examples/async_printing.py)
1005
+ display when the user is still entering text at the prompt.
1006
+ See [async_printing.py](https://github.com/python-cmd2/cmd2/blob/master/examples/async_printing.py)
979
1007
  for an example.
980
1008
  - Cross-platform colored output support
981
1009
  - `colorama` gets initialized properly in `Cmd.__init()`
@@ -991,7 +1019,8 @@
991
1019
  - Deprecated the built-in `cmd2` support for colors including `Cmd.colorize()` and `Cmd._colorcodes`
992
1020
  - Deletions (potentially breaking changes)
993
1021
  - The `preparse`, `postparsing_precmd`, and `postparsing_postcmd` methods _deprecated_ in the previous release
994
- have been deleted \* The new application lifecycle hook system allows for registration of callbacks to be called at various points
1022
+ have been deleted \* The new application lifecycle hook system allows for registration of callbacks to be called
1023
+ at various points
995
1024
  in the lifecycle and is more powerful and flexible than the previous system
996
1025
  - `alias` is now a command with subcommands to create, list, and delete aliases. Therefore its syntax
997
1026
  has changed. All current alias commands in startup scripts or transcripts will break with this release.
@@ -1007,7 +1036,8 @@
1007
1036
  framework, see `docs/hooks.rst` for details.
1008
1037
  - New dependency on `attrs` third party module
1009
1038
  - Added `matches_sorted` member to support custom sorting of tab completion matches
1010
- - Added [tab_autocomp_dynamic.py](https://github.com/python-cmd2/cmd2/blob/master/examples/tab_autocomp_dynamic.py) example
1039
+ - Added [tab_autocomp_dynamic.py](https://github.com/python-cmd2/cmd2/blob/master/examples/tab_autocomp_dynamic.py)
1040
+ example
1011
1041
  - Demonstrates updating the argparse object during init instead of during class construction
1012
1042
  - Deprecations
1013
1043
  - Deprecated the following hook methods, see `hooks.rst` for full details:
@@ -1046,8 +1076,10 @@
1046
1076
  - Added `chop` argument to `cmd2.Cmd.ppaged()` method for displaying output using a pager
1047
1077
  - If `chop` is `False`, then `self.pager` is used as the pager
1048
1078
  - Otherwise `self.pager_chop` is used as the pager
1049
- - Greatly improved the [table_display.py](https://github.com/python-cmd2/cmd2/blob/master/examples/table_display.py) example
1050
- - Now uses the new [tableformatter](https://github.com/python-tableformatter/tableformatter) module which looks better than `tabulate`
1079
+ - Greatly improved the [table_display.py](https://github.com/python-cmd2/cmd2/blob/master/examples/table_display.py)
1080
+ example
1081
+ - Now uses the new [tableformatter](https://github.com/python-tableformatter/tableformatter) module which looks
1082
+ better than `tabulate`
1051
1083
  - Deprecations
1052
1084
  - The `CmdResult` helper class is _deprecated_ and replaced by the improved `CommandResult` class
1053
1085
  - `CommandResult` has the following attributes: **stdout**, **stderr**, and **data**
@@ -1070,32 +1102,46 @@
1070
1102
  ## 0.9.0 (May 28, 2018)
1071
1103
 
1072
1104
  - Bug Fixes
1073
- - If self.default_to_shell is true, then redirection and piping are now properly passed to the shell. Previously it was truncated.
1105
+ - If self.default_to_shell is true, then redirection and piping are now properly passed to the shell. Previously it
1106
+ was truncated.
1074
1107
  - Submenus now call all hooks, it used to just call precmd and postcmd.
1075
1108
  - Enhancements
1076
1109
  - Automatic completion of `argparse` arguments via `cmd2.argparse_completer.AutoCompleter`
1077
- - See the [tab_autocompletion.py](https://github.com/python-cmd2/cmd2/blob/master/examples/tab_autocompletion.py) example for a demonstration of how to use this feature
1110
+ - See
1111
+ the [tab_autocompletion.py](https://github.com/python-cmd2/cmd2/blob/master/examples/tab_autocompletion.py)
1112
+ example for a demonstration of how to use this feature
1078
1113
  - `cmd2` no longer depends on the `six` module
1079
1114
  - `cmd2` is now a multi-file Python package instead of a single-file module
1080
1115
  - New pyscript approach that provides a pythonic interface to commands in the cmd2 application.
1081
1116
  - Switch command parsing from pyparsing to custom code which utilizes shlex.
1082
- - The object passed to do*\* methods has changed. It no longer is the pyparsing object, it's a new Statement object, which is a subclass of `str`. The statement object has many attributes which give you access to various components of the parsed input. If you were using anything but the string in your do*\* methods, this change will require you to update your code.
1117
+ - The object passed to do*\* methods has changed. It no longer is the pyparsing object, it's a new Statement
1118
+ object, which is a subclass of `str`. The statement object has many attributes which give you access to
1119
+ various components of the parsed input. If you were using anything but the string in your do*\* methods, this
1120
+ change will require you to update your code.
1083
1121
  - `commentGrammars` is no longer supported or available. Comments are C-style or python style.
1084
1122
  - Input redirection no longer supported. Use the load command instead.
1085
1123
  - `multilineCommand` attribute is `now multiline_command`
1086
- - `identchars` is now ignored. The standardlibrary cmd uses those characters to split the first "word" of the input, but cmd2 hasn't used those for a while, and the new parsing logic parses on whitespace, which has the added benefit of full unicode support, unlike cmd or prior versions of cmd2.
1087
- - `set_posix_shlex` function and `POSIX_SHLEX` variable have been removed. Parsing behavior is now always the more forgiving `posix=false`.
1088
- - `set_strip_quotes` function and `STRIP_QUOTES_FOR_NON_POSIX` have been removed. Quotes are stripped from arguments when presented as a list (a la `sys.argv`), and present when arguments are presented as a string (like the string passed to do\_\*).
1124
+ - `identchars` is now ignored. The standardlibrary cmd uses those characters to split the first "word" of the
1125
+ input, but cmd2 hasn't used those for a while, and the new parsing logic parses on whitespace, which has the
1126
+ added benefit of full unicode support, unlike cmd or prior versions of cmd2.
1127
+ - `set_posix_shlex` function and `POSIX_SHLEX` variable have been removed. Parsing behavior is now always the
1128
+ more forgiving `posix=false`.
1129
+ - `set_strip_quotes` function and `STRIP_QUOTES_FOR_NON_POSIX` have been removed. Quotes are stripped from
1130
+ arguments when presented as a list (a la `sys.argv`), and present when arguments are presented as a string (
1131
+ like the string passed to do\_\*).
1089
1132
  - Changes
1090
1133
  - `strip_ansi()` and `strip_quotes()` functions have moved to new utils module
1091
1134
  - Several constants moved to new constants module
1092
- - Submenu support has been moved to a new [cmd2-submenu](https://github.com/python-cmd2/cmd2-submenu) plugin. If you use submenus, you will need to update your dependencies and modify your imports.
1135
+ - Submenu support has been moved to a new [cmd2-submenu](https://github.com/python-cmd2/cmd2-submenu) plugin. If you
1136
+ use submenus, you will need to update your dependencies and modify your imports.
1093
1137
  - Deletions (potentially breaking changes)
1094
1138
  - Deleted all `optparse` code which had previously been deprecated in release 0.8.0
1095
1139
  - The `options` decorator no longer exists
1096
1140
  - All `cmd2` code should be ported to use the new `argparse`-based decorators
1097
- - See the [Argument Processing](http://cmd2.readthedocs.io/en/latest/argument_processing.html) section of the documentation for more information on these decorators
1098
- - Alternatively, see the [argparse_example.py](https://github.com/python-cmd2/cmd2/blob/master/examples/argparse_example.py)
1141
+ - See the [Argument Processing](http://cmd2.readthedocs.io/en/latest/argument_processing.html) section of the
1142
+ documentation for more information on these decorators
1143
+ - Alternatively, see
1144
+ the [argparse_example.py](https://github.com/python-cmd2/cmd2/blob/master/examples/argparse_example.py)
1099
1145
  - Deleted `cmd_with_subs_completer`, `get_subcommands`, and `get_subcommand_completer`
1100
1146
  - Replaced by default AutoCompleter implementation for all commands using argparse
1101
1147
  - Deleted support for old method of calling application commands with `cmd()` and `self`
@@ -1112,7 +1158,8 @@
1112
1158
  - Bug Fixes
1113
1159
  - Commands using the @with_argparser_and_unknown_args were not correctly recognized when tab completing
1114
1160
  - Fixed issue where completion display function was overwritten when a submenu quits
1115
- - Fixed `AttributeError` on Windows when running a `select` command cause by **pyreadline** not implementing `remove_history_item`
1161
+ - Fixed `AttributeError` on Windows when running a `select` command cause by **pyreadline** not implementing
1162
+ `remove_history_item`
1116
1163
  - Enhancements
1117
1164
  - Added warning about **libedit** variant of **readline** not being supported on macOS
1118
1165
  - Added tab completion of alias names in value field of **alias** command
@@ -1124,14 +1171,18 @@
1124
1171
 
1125
1172
  - Bug Fixes
1126
1173
 
1127
- - Fixed a bug with all argument decorators where the wrapped function wasn't returning a value and thus couldn't cause the cmd2 app to quit
1174
+ - Fixed a bug with all argument decorators where the wrapped function wasn't returning a value and thus couldn't
1175
+ cause the cmd2 app to quit
1128
1176
 
1129
1177
  - Enhancements
1130
1178
 
1131
1179
  - Added support for verbose help with -v where it lists a brief summary of what each command does
1132
1180
  - Added support for categorizing commands into groups within the help menu
1133
- - See the [Grouping Commands](http://cmd2.readthedocs.io/en/latest/argument_processing.html?highlight=verbose#grouping-commands) section of the docs for more info
1134
- - See [help_categories.py](https://github.com/python-cmd2/cmd2/blob/master/examples/help_categories.py) for an example
1181
+ - See
1182
+ the [Grouping Commands](http://cmd2.readthedocs.io/en/latest/argument_processing.html?highlight=verbose#grouping-commands)
1183
+ section of the docs for more info
1184
+ - See [help_categories.py](https://github.com/python-cmd2/cmd2/blob/master/examples/help_categories.py) for an
1185
+ example
1135
1186
  - Tab completion of paths now supports ~user user path expansion
1136
1187
  - Simplified implementation of various tab completion functions so they no longer require `ctypes`
1137
1188
  - Expanded documentation of `display_matches` list to clarify its purpose. See cmd2.py for this documentation.
@@ -1160,20 +1211,26 @@
1160
1211
  - Tab completion has been overhauled and now supports completion of strings with quotes and spaces.
1161
1212
  - Tab completion will automatically add an opening quote if a string with a space is completed.
1162
1213
  - Added `delimiter_complete` function for tab completing delimited strings
1163
- - Added more control over tab completion behavior including the following flags. The use of these flags is documented in cmd2.py
1214
+ - Added more control over tab completion behavior including the following flags. The use of these flags is
1215
+ documented in cmd2.py
1164
1216
  - `allow_appended_space`
1165
1217
  - `allow_closing_quote`
1166
- - Due to the tab completion changes, non-Windows platforms now depend on [wcwidth](https://pypi.python.org/pypi/wcwidth).
1218
+ - Due to the tab completion changes, non-Windows platforms now depend
1219
+ on [wcwidth](https://pypi.python.org/pypi/wcwidth).
1167
1220
  - An alias name can now match a command name.
1168
1221
  - An alias can now resolve to another alias.
1169
1222
 
1170
1223
  - Attribute Changes (Breaks backward compatibility)
1171
- - `exclude_from_help` is now called `hidden_commands` since these commands are hidden from things other than help, including tab completion
1172
- - This list also no longer takes the function names of commands (`do_history`), but instead uses the command names themselves (`history`)
1224
+ - `exclude_from_help` is now called `hidden_commands` since these commands are hidden from things other than help,
1225
+ including tab completion
1226
+ - This list also no longer takes the function names of commands (`do_history`), but instead uses the command
1227
+ names themselves (`history`)
1173
1228
  - `excludeFromHistory` is now called `exclude_from_history`
1174
- - `cmd_with_subs_completer()` no longer takes an argument called `base`. Adding tab completion to subcommands has been simplified to declaring it in the
1229
+ - `cmd_with_subs_completer()` no longer takes an argument called `base`. Adding tab completion to subcommands has
1230
+ been simplified to declaring it in the
1175
1231
  subcommand parser's default settings. This easily allows arbitrary completers like path_complete to be used.
1176
- See [subcommands.py](https://github.com/python-cmd2/cmd2/blob/master/examples/subcommands.py) for an example of how to use
1232
+ See [subcommands.py](https://github.com/python-cmd2/cmd2/blob/master/examples/subcommands.py) for an example of
1233
+ how to use
1177
1234
  tab completion in subcommands. In addition, the docstring for `cmd_with_subs_completer()` offers more details.
1178
1235
 
1179
1236
  ## 0.8.2 (March 21, 2018)
@@ -1184,12 +1241,15 @@
1184
1241
  - Fixed a bug where the `AddSubmenu` decorator didn't work with a default value for `shared_attributes`
1185
1242
  - Added a check to `ppaged()` to only use a pager when running in a real fully functional terminal
1186
1243
  - Enhancements
1187
- - Added [quit_on_sigint](http://cmd2.readthedocs.io/en/latest/settingchanges.html#quit-on-sigint) attribute to enable canceling current line instead of quitting when Ctrl+C is typed
1244
+ - Added [quit_on_sigint](http://cmd2.readthedocs.io/en/latest/settingchanges.html#quit-on-sigint) attribute to
1245
+ enable canceling current line instead of quitting when Ctrl+C is typed
1188
1246
  - Added possibility of having readline history preservation in a SubMenu
1189
- - Added [table_display.py](https://github.com/python-cmd2/cmd2/blob/master/examples/table_display.py) example to demonstrate how to display tabular data
1247
+ - Added [table_display.py](https://github.com/python-cmd2/cmd2/blob/master/examples/table_display.py) example to
1248
+ demonstrate how to display tabular data
1190
1249
  - Added command aliasing with `alias` and `unalias` commands
1191
1250
  - Added the ability to load an initialization script at startup
1192
- - See [alias_startup.py](https://github.com/python-cmd2/cmd2/blob/master/examples/alias_startup.py) for an example
1251
+ - See [alias_startup.py](https://github.com/python-cmd2/cmd2/blob/master/examples/alias_startup.py) for an
1252
+ example
1193
1253
  - Added a default SIGINT handler which terminates any open pipe subprocesses and re-raises a KeyboardInterrupt
1194
1254
  - For macOS, will load the `gnureadline` module if available and `readline` if not
1195
1255
 
@@ -1202,10 +1262,14 @@
1202
1262
  - Fixed outdated [remove_unused.py](https://github.com/python-cmd2/cmd2/blob/master/examples/remove_unused.py)
1203
1263
  - Enhancements
1204
1264
  - Added support for sub-menus.
1205
- - See [submenus.py](https://github.com/python-cmd2/cmd2/blob/master/examples/submenus.py) for an example of how to use it
1265
+ - See [submenus.py](https://github.com/python-cmd2/cmd2/blob/master/examples/submenus.py) for an example of how
1266
+ to use it
1206
1267
  - Added option for persistent readline history
1207
- - See [persistent_history.py](https://github.com/python-cmd2/cmd2/blob/master/examples/persistent_history.py) for an example
1208
- - See the [Searchable command history](http://cmd2.readthedocs.io/en/latest/freefeatures.html#searchable-command-history) section of the documentation for more info
1268
+ - See [persistent_history.py](https://github.com/python-cmd2/cmd2/blob/master/examples/persistent_history.py)
1269
+ for an example
1270
+ - See
1271
+ the [Searchable command history](http://cmd2.readthedocs.io/en/latest/freefeatures.html#searchable-command-history)
1272
+ section of the documentation for more info
1209
1273
  - Improved PyPI packaging by including unit tests and examples in the tarball
1210
1274
  - Improved documentation to make it more obvious that **poutput()** should be used instead of **print()**
1211
1275
  - `exclude_from_help` and `excludeFromHistory` are now instance instead of class attributes
@@ -1232,11 +1296,15 @@
1232
1296
  - **do\_\*** commands get a single argument which is the output of argparse.parse_args()
1233
1297
  - **with_argparser_and_unknown_args** decorator for argparse-based argument parsing, but allows unknown args
1234
1298
  - **do\_\*** commands get two arguments, the output of argparse.parse_known_args()
1235
- - See the [Argument Processing](http://cmd2.readthedocs.io/en/latest/argument_processing.html) section of the documentation for more information on these decorators
1236
- - Alternatively, see the [argparse_example.py](https://github.com/python-cmd2/cmd2/blob/master/examples/argparse_example.py)
1299
+ - See the [Argument Processing](http://cmd2.readthedocs.io/en/latest/argument_processing.html) section of the
1300
+ documentation for more information on these decorators
1301
+ - Alternatively, see
1302
+ the [argparse_example.py](https://github.com/python-cmd2/cmd2/blob/master/examples/argparse_example.py)
1237
1303
  and [arg_print.py](https://github.com/python-cmd2/cmd2/blob/master/examples/arg_print.py) examples
1238
- - Added support for Argparse subcommands when using the **with_argument_parser** or **with_argparser_and_unknown_args** decorators
1239
- - See [subcommands.py](https://github.com/python-cmd2/cmd2/blob/master/examples/subcommands.py) for an example of how to use subcommands
1304
+ - Added support for Argparse subcommands when using the **with_argument_parser** or \*
1305
+ \*with_argparser_and_unknown_args\*\* decorators
1306
+ - See [subcommands.py](https://github.com/python-cmd2/cmd2/blob/master/examples/subcommands.py) for an example
1307
+ of how to use subcommands
1240
1308
  - Tab completion of subcommand names is automatically supported
1241
1309
  - The **\_\_relative_load** command is now hidden from the help menu by default
1242
1310
  - This command is not intended to be called from the command line, only from within scripts
@@ -1245,12 +1313,14 @@
1245
1313
  - The **history** command can now automatically generate a transcript file for regression testing
1246
1314
  - This makes creating regression tests for your `cmd2` application trivial
1247
1315
  - Commands Removed
1248
- - The **cmdenvironment** has been removed and its functionality incorporated into the **-a/--all** argument to **set**
1316
+ - The **cmdenvironment** has been removed and its functionality incorporated into the **-a/--all** argument to **set
1317
+ **
1249
1318
  - The **show** command has been removed. Its functionality has always existing within **set** and continues to do so
1250
1319
  - The **save** command has been removed. The capability to save commands is now part of the **history** command.
1251
1320
  - The **run** command has been removed. The capability to run prior commands is now part of the **history** command.
1252
1321
  - Other changes
1253
- - The **edit** command no longer allows you to edit prior commands. The capability to edit prior commands is now part of the **history** command. The **edit** command still allows you to edit arbitrary files.
1322
+ - The **edit** command no longer allows you to edit prior commands. The capability to edit prior commands is now
1323
+ part of the **history** command. The **edit** command still allows you to edit arbitrary files.
1254
1324
  - the **autorun_on_edit** setting has been removed.
1255
1325
  - For Python 3.4 and earlier, `cmd2` now has an additional dependency on the `contextlib2` module
1256
1326
  - Deprecations
@@ -1357,7 +1427,8 @@
1357
1427
  - Improved tab completion of file system paths, command names, and shell commands
1358
1428
  - Thanks to Kevin Van Brunt for all of the help with debugging and testing this
1359
1429
  - Changed default value of USE_ARG_LIST to True - this affects the beavhior of all **@options** commands
1360
- - **WARNING**: This breaks backwards compatibility, to restore backwards compatibility, add this to the \***\*init**()\*\* method in your custom class derived from cmd2.Cmd:
1430
+ - **WARNING**: This breaks backwards compatibility, to restore backwards compatibility, add this to the \*\*
1431
+ \*\*init\*\*()\*\* method in your custom class derived from cmd2.Cmd:
1361
1432
  - cmd2.set_use_arg_list(False)
1362
1433
  - This change improves argument parsing for all new applications
1363
1434
  - Refactored code to encapsulate most of the pyparsing logic into a ParserManager class
@@ -1407,11 +1478,13 @@
1407
1478
 
1408
1479
  ## 0.6.6.1 (August 14, 2013)
1409
1480
 
1410
- - No changes to code trunk. Generated sdist from Python 2.7 to avoid 2to3 changes being applied to source. (Issue https://bitbucket.org/catherinedevlin/cmd2/issue/6/packaging-bug)
1481
+ - No changes to code trunk. Generated sdist from Python 2.7 to avoid 2to3 changes being applied to source. (
1482
+ Issue https://bitbucket.org/catherinedevlin/cmd2/issue/6/packaging-bug)
1411
1483
 
1412
1484
  ## 0.6.6 (August 6, 2013)
1413
1485
 
1414
- - Added fix by bitbucket.org/desaintmartin to silence the editor check. bitbucket.org/catherinedevlin/cmd2/issue/1/silent-editor-check
1486
+ - Added fix by bitbucket.org/desaintmartin to silence the editor check.
1487
+ bitbucket.org/catherinedevlin/cmd2/issue/1/silent-editor-check
1415
1488
 
1416
1489
  ## 0.6.5.1 (March 18, 2013)
1417
1490
 
@@ -1,18 +1,35 @@
1
1
  # Simple Makefile for use with a uv-based development environment
2
2
  .PHONY: install
3
- install: ## Install the virtual environment
4
- @echo "🚀 Creating virtual environment"
5
- @uv sync
3
+ install: ## Install the virtual environment with dependencies
4
+ @echo "🚀 Creating uv Python virtual environment"
5
+ @uv python install 3.13
6
+ @uv sync --python=3.13
7
+ @echo "🚀 Installing Git pre-commit hooks locally"
8
+ @uv run pre-commit install
9
+ @echo "🚀 Installing Prettier using npm"
10
+ @npm install
6
11
 
7
12
  .PHONY: check
8
13
  check: ## Run code quality tools.
9
14
  @echo "🚀 Checking lock file consistency with 'pyproject.toml'"
10
15
  @uv lock --locked
11
- @echo "🚀 Linting code: Running pre-commit"
16
+ @echo "🚀 Linting code and documentation: Running pre-commit"
12
17
  @uv run pre-commit run -a
13
18
  @echo "🚀 Static type checking: Running mypy"
14
19
  @uv run mypy
15
20
 
21
+ .PHONY: format
22
+ format: ## Perform ruff formatting
23
+ @uv run ruff format
24
+
25
+ .PHONY: lint
26
+ lint: ## Perform ruff linting
27
+ @uv run ruff check --fix
28
+
29
+ .PHONY: typecheck
30
+ typecheck: ## Perform type checking
31
+ @uv run mypy
32
+
16
33
  .PHONY: test
17
34
  test: ## Test the code with pytest.
18
35
  @echo "🚀 Testing code: Running pytest"
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: cmd2
3
- Version: 2.5.10
3
+ Version: 2.6.0
4
4
  Summary: cmd2 - quickly build feature-rich and user-friendly interactive command line applications in Python
5
5
  Author: cmd2 Contributors
6
6
  License: The MIT License (MIT)
@@ -33,20 +33,21 @@ Classifier: Intended Audience :: Developers
33
33
  Classifier: Intended Audience :: System Administrators
34
34
  Classifier: License :: OSI Approved :: MIT License
35
35
  Classifier: Programming Language :: Python :: 3 :: Only
36
- Classifier: Programming Language :: Python :: 3.8
37
36
  Classifier: Programming Language :: Python :: 3.9
38
37
  Classifier: Programming Language :: Python :: 3.10
39
38
  Classifier: Programming Language :: Python :: 3.11
40
39
  Classifier: Programming Language :: Python :: 3.12
41
40
  Classifier: Programming Language :: Python :: 3.13
41
+ Classifier: Programming Language :: Python :: 3.14
42
42
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
43
- Requires-Python: >=3.8
43
+ Requires-Python: >=3.9
44
44
  Description-Content-Type: text/markdown
45
45
  License-File: LICENSE
46
46
  Requires-Dist: gnureadline>=8; platform_system == "Darwin"
47
47
  Requires-Dist: pyperclip>=1.8
48
48
  Requires-Dist: pyreadline3>=3.4; platform_system == "Windows"
49
49
  Requires-Dist: wcwidth>=0.2.10
50
+ Dynamic: license-file
50
51
 
51
52
  <h1 align="center">cmd2 : immersive interactive command line applications</h1>
52
53
 
@@ -80,14 +81,21 @@ when using cmd.
80
81
  ![system schema](https://raw.githubusercontent.com/python-cmd2/cmd2/master/.github/images/graph.drawio.png)
81
82
 
82
83
  When creating solutions developers have no shortage of tools to create rich and smart user interfaces.
83
- System administrators have long been duct taping together brittle workflows based on a menagerie of simple command line tools created by strangers on github and the guy down the hall.
84
+ System administrators have long been duct taping together brittle workflows based on a menagerie of simple command line
85
+ tools created by strangers on github and the guy down the hall.
84
86
  Unfortunately, when CLIs become significantly complex the ease of command discoverability tends to fade quickly.
85
- On the other hand, Web and traditional desktop GUIs are first in class when it comes to easily discovering functionality.
86
- The price we pay for beautifully colored displays is complexity required to aggregate disperate applications into larger systems.
87
- `cmd2` fills the niche between high [ease of command discovery](https://clig.dev/#ease-of-discovery) applications and smart workflow automation systems.
88
-
89
- The `cmd2` framework provides a great mixture of both worlds. Application designers can easily create complex applications and rely on the cmd2 library to offer effortless user facing help and extensive tab completion.
90
- When users become comfortable with functionality, cmd2 turns into a feature rich library enabling a smooth transition to full automation. If designed with enough forethought, a well implemented cmd2 application can serve as a boutique workflow tool. `cmd2` pulls off this flexibility based on two pillars of philosophy:
87
+ On the other hand, Web and traditional desktop GUIs are first in class when it comes to easily discovering
88
+ functionality.
89
+ The price we pay for beautifully colored displays is complexity required to aggregate disperate applications into larger
90
+ systems.
91
+ `cmd2` fills the niche between high [ease of command discovery](https://clig.dev/#ease-of-discovery) applications and
92
+ smart workflow automation systems.
93
+
94
+ The `cmd2` framework provides a great mixture of both worlds. Application designers can easily create complex
95
+ applications and rely on the cmd2 library to offer effortless user facing help and extensive tab completion.
96
+ When users become comfortable with functionality, cmd2 turns into a feature rich library enabling a smooth transition to
97
+ full automation. If designed with enough forethought, a well implemented cmd2 application can serve as a boutique
98
+ workflow tool. `cmd2` pulls off this flexibility based on two pillars of philosophy:
91
99
 
92
100
  - Tab Completion
93
101
  - Automation Transition
@@ -96,7 +104,8 @@ When users become comfortable with functionality, cmd2 turns into a feature rich
96
104
 
97
105
  <a href="https://imgflip.com/i/63h03x"><img src="https://i.imgflip.com/63h03x.jpg" title="made at imgflip.com" width="70%" height="%70"/></a>
98
106
 
99
- Deep extensive tab completion and help text generation based on the argparse library create the first pillar of 'ease of command discovery'. The following is a list of features in this category.
107
+ Deep extensive tab completion and help text generation based on the argparse library create the first pillar of 'ease of
108
+ command discovery'. The following is a list of features in this category.
100
109
 
101
110
  - Great tab completion of commands, subcommands, file system paths, and shell commands.
102
111
  - Custom tab completion for user designed commands via simple function overloading.
@@ -107,7 +116,8 @@ Deep extensive tab completion and help text generation based on the argparse lib
107
116
 
108
117
  <a href="https://imgflip.com/i/66t0y0"><img src="https://i.imgflip.com/66t0y0.jpg" title="made at imgflip.com" width="70%" height="70%"/></a>
109
118
 
110
- cmd2 creates the second pillar of 'ease of transition to automation' through alias/macro creation, command line argument parsing and execution of cmd2 scripting.
119
+ cmd2 creates the second pillar of 'ease of transition to automation' through alias/macro creation, command line argument
120
+ parsing and execution of cmd2 scripting.
111
121
 
112
122
  - Flexible alias and macro creation for quick abstraction of commands.
113
123
  - Text file scripting of your application with `run_script` (`@`) and `_relative_run_script` (`@@`)
@@ -122,7 +132,7 @@ On all operating systems, the latest stable version of `cmd2` can be installed u
122
132
  pip install -U cmd2
123
133
  ```
124
134
 
125
- cmd2 works with Python 3.8+ on Windows, macOS, and Linux. It is pure Python code with few 3rd-party dependencies.
135
+ cmd2 works with Python 3.9+ on Windows, macOS, and Linux. It is pure Python code with few 3rd-party dependencies.
126
136
 
127
137
  For information on other installation options, see
128
138
  [Installation Instructions](https://cmd2.readthedocs.io/en/latest/overview/installation.html) in the cmd2
@@ -144,7 +154,8 @@ The best way to learn the cmd2 api is to delve into the example applications loc
144
154
  - [example code](https://github.com/python-cmd2/talks/tree/master/PyOhio_2019/examples)
145
155
  - [Cookiecutter](https://github.com/cookiecutter/cookiecutter) Templates from community
146
156
  - Basic cookiecutter template for cmd2 application : https://github.com/jayrod/cookiecutter-python-cmd2
147
- - Advanced cookiecutter template with external plugin support : https://github.com/jayrod/cookiecutter-python-cmd2-ext-plug
157
+ - Advanced cookiecutter template with external plugin
158
+ support : https://github.com/jayrod/cookiecutter-python-cmd2-ext-plug
148
159
  - [cmd2 example applications](https://github.com/python-cmd2/cmd2/tree/master/examples)
149
160
  - Basic cmd2 examples to demonstrate how to use various features
150
161
  - [Advanced Examples](https://github.com/jayrod/cmd2-example-apps)
@@ -161,11 +172,14 @@ import cmd2
161
172
  class FirstApp(cmd2.Cmd):
162
173
  """A simple cmd2 application."""
163
174
 
164
- def do_hello_world(self, _: cmd2.Statement):
175
+
176
+ def do_hello_world(self, _: cmd2.Statement):
165
177
  self.poutput('Hello World')
166
178
 
179
+
167
180
  if __name__ == '__main__':
168
181
  import sys
182
+
169
183
  c = FirstApp()
170
184
  sys.exit(c.cmdloop())
171
185
 
@@ -173,7 +187,10 @@ if __name__ == '__main__':
173
187
 
174
188
  ## Found a bug?
175
189
 
176
- If you think you've found a bug, please first read through the open [Issues](https://github.com/python-cmd2/cmd2/issues). If you're confident it's a new bug, go ahead and create a new GitHub issue. Be sure to include as much information as possible so we can reproduce the bug. At a minimum, please state the following:
190
+ If you think you've found a bug, please first read through the
191
+ open [Issues](https://github.com/python-cmd2/cmd2/issues). If you're confident it's a new bug, go ahead and create a new
192
+ GitHub issue. Be sure to include as much information as possible so we can reproduce the bug. At a minimum, please state
193
+ the following:
177
194
 
178
195
  - `cmd2` version
179
196
  - Python version
@@ -14,7 +14,6 @@ cmd2 = { editable = true, path = "." }
14
14
  cmd2_ext_test = { editable = true, path = "plugins/ext_test" }
15
15
  codecov = "*"
16
16
  gnureadline = { version = "*", sys_platform = "== 'darwin'" }
17
- griffe-typingdoc = "*"
18
17
  invoke = "*"
19
18
  ipython = "*"
20
19
  mypy = "*"