- Bug Fixes
- Fixed issue where history indexes could get repeated
- Fixed issue where TableCreator was tossing blank last line
- Corrected help text for alias command
- Breaking Changes
- `cmd2` 2.0 supports Python 3.6+ (removed support for Python 3.5)
- Argparse Completion / Settables
- Replaced `choices_function` / `choices_method` with `choices_provider`.
- Replaced `completer_function` / `completer_method` with `completer`.
- ArgparseCompleter now always passes `cmd2.Cmd` or `CommandSet` instance as the first positional
argument to choices_provider and completer functions.
- Moved `basic_complete` from utils into `cmd2.Cmd` class.
- Moved `CompletionError` to exceptions.py
- `Namespace.__statement__` has been removed. Use `Namespace.cmd2_statement.get()` instead.
- Removed `--silent` flag from `alias/macro create` since startup scripts can be run silently.
- Removed `--with_silent` flag from `alias/macro list` since startup scripts can be run silently.
- Removed `with_argparser_and_unknown_args` since it was deprecated in 1.3.0.
- Renamed `silent_startup_script` to `silence_startup_script` for clarity.
- Replaced `cmd2.Cmd.completion_header` with `cmd2.Cmd.formatted_completions`. See Enhancements
for description of this new class member.
- Settables now have new initialization parameters. It is now a required parameter to supply the reference to the
object that holds the settable attribute. `cmd2.Cmd.settables` is no longer a public dict attribute - it is now a
property that aggregates all Settables across all registered CommandSets.
- Failed transcript testing now sets self.exit_code to 1 instead of -1.
- Renamed `use_ipython` keyword parameter of `cmd2.Cmd.__init__()` to `include_ipy`.
- `py` command is only enabled if `include_py` parameter is `True`. See Enhancements for a description
of this parameter.
- Removed ability to run Python commands from the command line with `py`. Now `py` takes no arguments
and just opens an interactive Python shell.
- Changed default behavior of `runcmds_plus_hooks()` to not stop when Ctrl-C is pressed and instead
run the next command in its list.
- Removed `cmd2.Cmd.quit_on_sigint` flag, which when `True`, quit the application when Ctrl-C was pressed at the prompt.
- The history bug fix resulted in structure changes to the classes in `cmd2.history`. Therefore, persistent history
files created with versions older than 2.0.0 are not compatible.
- Enhancements
- Added support for custom tab completion and up-arrow input history to `cmd2.Cmd2.read_input`.
See [read_input.py](https://github.com/python-cmd2/cmd2/blob/master/examples/read_input.py)
for an example.
- Added `cmd2.exceptions.PassThroughException` to raise unhandled command exceptions instead of printing them.
- Added support for ANSI styles and newlines in tab completion results using `cmd2.Cmd.formatted_completions`.
`cmd2` provides this capability automatically if you return argparse completion matches as `CompletionItems`.
- Settables enhancements:
- Settables may be optionally scoped to a CommandSet. Settables added to CommandSets will appear when a
CommandSet is registered and disappear when a CommandSet is unregistered. Optionally, scoped Settables
may have a prepended prefix.
- Settables now allow changes to be applied to any arbitrary object attribute. It no longer needs to match an
attribute added to the cmd2 instance itself.
- Raising `SystemExit` or calling `sys.exit()` in a command or hook function will set `self.exit_code`
to the exit code used in those calls. It will also result in the command loop stopping.
- ipy command now includes all of `self.py_locals` in the IPython environment
- Added `include_py` keyword parameter to `cmd2.Cmd.__init__()`. If `False`, then the `py` command will
not be available. Defaults to `False`. `run_pyscript` is not affected by this parameter.
- Made the amount of space between columns in a SimpleTable configurable
- On POSIX systems, shell commands and processes being piped to are now run in the user's preferred shell
instead of /bin/sh. The preferred shell is obtained by reading the SHELL environment variable. If that
doesn't exist or is empty, then /bin/sh is used.
- Changed `cmd2.Cmd._run_editor()` to the public method `cmd2.Cmd.run_editor()`