Releases: python-cmd2/cmd2
Releases · python-cmd2/cmd2
0.9.5 (October 11, 2018)
- Bug Fixes
- Fixed bug where
get_all_commands
could return non-callable attributes - Fixed bug where alias command was dropping quotes around arguments
- Fixed bug where running help on argparse commands didn't work if they didn't support -h
- Fixed transcript testing bug where last command in transcript has no expected output
- Fixed bugs with how AutoCompleter and ArgparseFunctor handle argparse
arguments with nargs=argparse.REMAINDER. Tab completion now correctly
matches how argparse will parse the values. Command strings generated by
ArgparseFunctor should now be compliant with how argparse expects
REMAINDER arguments to be ordered. - Fixed bugs with how AutoCompleter handles flag prefixes. It is no
longer hard-coded to use '-' and will check against the prefix_chars in
the argparse object. Also, single-character tokens that happen to be a
prefix char are not treated as flags by argparse and AutoCompleter now
matches that behavior. - Fixed bug where AutoCompleter was not distinguishing between a negative number and a flag
- Fixed bug where AutoCompleter did not handle -- the same way argparse does (all args after -- are non-options)
- Fixed bug where
- Enhancements
- Added
exit_code
attribute ofcmd2.Cmd
class- Enables applications to return a non-zero exit code when exiting from
cmdloop
- Enables applications to return a non-zero exit code when exiting from
ACHelpFormatter
now inherits fromargparse.RawTextHelpFormatter
to make it easier
for formatting help/description text- Aliases are now sorted alphabetically
- The set command now tab-completes settable parameter names
- Added
async_alert
,async_update_prompt
, andset_window_title
functions- These allow you to provide feedback to the user in an asychronous fashion, meaning alerts can
display when the user is still entering text at the prompt. See async_printing.py
for an example.
- These allow you to provide feedback to the user in an asychronous fashion, meaning alerts can
- Cross-platform colored output support
colorama
gets initialized properly inCmd.__init()
- The
Cmd.colors
setting is no longer platform dependent and now has three values:- Terminal (default) - output methods do not strip any ANSI escape sequences when output is a terminal, but
if the output is a pipe or a file the escape sequences are stripped - Always - output methods never strip ANSI escape sequences, regardless of the output destination
- Never - output methods strip all ANSI escape sequences
- Terminal (default) - output methods do not strip any ANSI escape sequences when output is a terminal, but
- Added
macro
command to create macros, which are similar to aliases, but can take arguments when called - All cmd2 command functions have been converted to use argparse.
- Renamed argparse_example.py to decorator_example.py to help clarify its intent
- Added
- Deprecations
- Deprecated the built-in
cmd2
support for colors includingCmd.colorize()
andCmd._colorcodes
- Deprecated the built-in
- Deletions (potentially breaking changes)
- The
preparse
,postparsing_precmd
, andpostparsing_postcmd
methods deprecated in the previous release
have been deleted- The new application lifecycle hook system allows for registration of callbacks to be called at various points
in the lifecycle and is more powerful and flexible than the previous system
- The new application lifecycle hook system allows for registration of callbacks to be called at various points
alias
is now a command with sub-commands to create, list, and delete aliases. Therefore its syntax
has changed. All current alias commands in startup scripts or transcripts will break with this release.unalias
was deleted sincealias delete
replaced it
- The
0.9.4 (August 21, 2018)
- Bug Fixes
- Fixed bug where
preparse
was not getting called - Fixed bug in parsing of multiline commands where matching quote is on another line
- Fixed bug where
- Enhancements
- Improved implementation of lifecycle hooks to support a plugin
framework, seedocs/hooks.rst
for details. - New dependency on
attrs
third party module - Added
matches_sorted
member to support custom sorting of tab-completion matches - Added tab_autocomp_dynamic.py example
- Demonstrates updating the argparse object during init instead of during class construction
- Improved implementation of lifecycle hooks to support a plugin
- Deprecations
- Deprecated the following hook methods, see
hooks.rst
for full details:cmd2.Cmd.preparse()
- equivalent functionality available
viacmd2.Cmd.register_postparsing_hook()
cmd2.Cmd.postparsing_precmd()
- equivalent functionality available
viacmd2.Cmd.register_postparsing_hook()
cmd2.Cmd.postparsing_postcmd()
- equivalent functionality available
viacmd2.Cmd.register_postcmd_hook()
- Deprecated the following hook methods, see
0.8.9 (August 20, 2018)
- Bug Fixes
- Fixed extra slash that could print when tab completing users on Windows
NOTE: This is likely the final release of cmd2
for Python 2.7
0.9.3 (July 12, 2018)
- Bug Fixes
- Fixed bug when StatementParser
__init__()
was called withterminators
equal toNone
- Fixed bug when
Cmd.onecmd()
was called with a rawstr
- Fixed bug when StatementParser
- Enhancements
- Added
--clear
flag tohistory
command that clears both the command and readline history.
- Added
- Deletions
- The
CmdResult
helper class which was deprecated in the previous release has now been deleted- It has been replaced by the improved
CommandResult
class
- It has been replaced by the improved
- The
0.9.2 (June 28, 2018)
- Bug Fixes
- Fixed issue where piping and redirecting did not work correctly with paths that had spaces
- Enhancements
- Added ability to print a header above tab-completion suggestions using
completion_header
member - Added
pager
andpager_chop
attributes to thecmd2.Cmd
classpager
defaults to less -RXF on POSIX and more on Windowspager_chop
defaults to less -SRXF on POSIX and more on Windows
- Added
chop
argument tocmd2.Cmd.ppaged()
method for displaying output using a pager- If
chop
isFalse
, thenself.pager
is used as the pager - Otherwise
self.pager_chop
is used as the pager
- If
- Greatly improved the table_display.py example
- Now uses the new tableformatter module which looks better than
tabulate
- Now uses the new tableformatter module which looks better than
- Added ability to print a header above tab-completion suggestions using
- Deprecations
- The
CmdResult
helper class is deprecated and replaced by the improvedCommandResult
classCommandResult
has the following attributes: stdout, stderr, and dataCmdResult
had attributes of: out, err, war
CmdResult
will be deleted in the next release
- The
0.8.8 (June 28, 2018)
- Bug Fixes
- Prevent crashes that could occur attempting to open a file in non-existent directory or with very long filename
- Enhancements
display_matches
is no longer restricted to delimited strings
0.9.1 (May 28, 2018)
- Bug Fixes
- Fix packaging error for 0.8.x versions (yes we had to deploy a new version
of the 0.9.x series to fix a packaging error with the 0.8.x version)
- Fix packaging error for 0.8.x versions (yes we had to deploy a new version
0.9.0 (May 28, 2018)
- Bug Fixes
- If self.default_to_shell is true, then redirection and piping are now properly passed to the shell. Previously it was truncated.
- Submenus now call all hooks, it used to just call precmd and postcmd.
- Enhancements
- Automatic completion of
argparse
arguments viacmd2.argparse_completer.AutoCompleter
- See the tab_autocompletion.py example for a demonstration of how to use this feature
cmd2
no longer depends on thesix
modulecmd2
is now a multi-file Python package instead of a single-file module- New pyscript approach that provides a pythonic interface to commands in the cmd2 application.
- Switch command parsing from pyparsing to custom code which utilizes shlex.
- 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. commentGrammers
is no longer supported or available. Comments are C-style or python style.- Input redirection no longer supported. Use the load command instead.
multilineCommand
attribute isnow multiline_command
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.set_posix_shlex
function andPOSIX_SHLEX
variable have been removed. Parsing behavior is now always the more forgivingposix=false
.set_strip_quotes
function andSTRIP_QUOTES_FOR_NON_POSIX
have been removed. Quotes are stripped from arguments when presented as a list (a lasys.argv
), and present when arguments are presented as a string (like the string passed to do_*).
- 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
- Automatic completion of
- Changes
strip_ansi()
andstrip_quotes()
functions have moved to new utils module- Several constants moved to new constants module
- Submenu support has been moved to a new cmd2-submenu plugin. If you use submenus, you will need to update your dependencies and modify your imports.
- Deletions (potentially breaking changes)
- Deleted all
optparse
code which had previously been deprecated in release 0.8.0- The
options
decorator no longer exists - All
cmd2
code should be ported to use the newargparse
-based decorators - See the Argument Processing section of the documentation for more information on these decorators
- Alternatively, see the argparse_example.py
- The
- Deleted
cmd_with_subs_completer
,get_subcommands
, andget_subcommand_completer
- Replaced by default AutoCompleter implementation for all commands using argparse
- Deleted support for old method of calling application commands with
cmd()
andself
cmd2.redirector
is no longer supported. Output redirection can only be done with '>' or '>>'- Deleted
postparse()
hook since it was redundant withpostparsing_precmd
- Deleted all
- Python 2 no longer supported
cmd2
now supports Python 3.4+
- Known Issues
- Some developers have noted very slow performance when importing the
cmd2
module. The issue
it intermittant, and investigation of the root cause is ongoing.
- Some developers have noted very slow performance when importing the
0.8.7 (May 28, 2018)
- Bug Fixes
- Make sure pip installs version 0.8.x if you have python 2.7
0.8.6 (May 27, 2018)
- Bug Fixes
- Commands using the @with_argparser_and_unknown_args were not correctly recognized when tab completing
- Fixed issue where completion display function was overwritten when a submenu quits
- Fixed
AttributeError
on Windows when running aselect
command cause by pyreadline not implementingremove_history_item
- Enhancements
- Added warning about libedit variant of readline not being supported on macOS
- Added tab-completion of alias names in value filed of alias command
- Enhanced the
py
console in the following ways- Added tab completion of Python identifiers instead of cmd2 commands
- Separated the
py
console history from the cmd2 history