Releases: python-cmd2/cmd2
Releases · python-cmd2/cmd2
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
0.8.5 (April 15, 2018)
-
Bug Fixes
- 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
-
Enhancements
- Added support for verbose help with -v where it lists a brief summary of what each command does
- Added support for categorizing commands into groups within the help menu
- See the Grouping Commands section of the docs for more info
- See help_categories.py for an example
- Tab completion of paths now supports ~user user path expansion
- Simplified implementation of various tab completion functions so they no longer require
ctypes
- Expanded documentation of
display_matches
list to clarify its purpose. See cmd2.py for this documentation. - Adding opening quote to tab completion if any of the completion suggestions have a space.
-
Python 2 EOL notice
- This is the last release where new features will be added to
cmd2
for Python 2.7 - The 0.9.0 release of
cmd2
will support Python 3.4+ only - Additional 0.8.x releases may be created to supply bug fixes for Python 2.7 up until August 31, 2018
- After August 31, 2018 not even bug fixes will be provided for Python 2.7
- This is the last release where new features will be added to
0.8.4 (April 10, 2018)
- Bug Fixes
- Fixed conditional dependency issue in setup.py that was in 0.8.3.
0.8.3 (April 09, 2018)
-
Bug Fixes
- Fixed
help
command not calling functions for help topics - Fixed not being able to use quoted paths when redirecting with
<
and>
- Fixed
-
Enhancements
- Tab completion has been overhauled and now supports completion of strings with quotes and spaces.
- Tab completion will automatically add an opening quote if a string with a space is completed.
- Added
delimiter_complete
function for tab completing delimited strings - Added more control over tab completion behavior including the following flags. The use of these flags is documented in cmd2.py
allow_appended_space
allow_closing_quote
- Due to the tab completion changes, non-Windows platforms now depend on wcwidth.
- An alias name can now match a command name.
- An alias can now resolve to another alias.
-
Attribute Changes (Breaks backward compatibility)
exclude_from_help
is now calledhidden_commands
since these commands are hidden from things other than help, including tab completion- This list also no longer takes the function names of commands (
do_history
), but instead uses the command names themselves (history
)
- This list also no longer takes the function names of commands (
excludeFromHistory
is now calledexclude_from_history
cmd_with_subs_completer()
no longer takes an argument calledbase
. Adding tab completion to subcommands has been simplified to declaring it in the
subcommand parser's default settings. This easily allows arbitrary completers like path_complete to be used.
See subcommands.py for an example of how to use
tab completion in subcommands. In addition, the docstring forcmd_with_subs_completer()
offers more details.
0.8.2 (March 21, 2018)
- Bug Fixes
- Fixed a bug in tab-completion of command names within sub-menus
- Fixed a bug when using persistent readline history in Python 2.7
- Fixed a bug where the
AddSubmenu
decorator didn't work with a default value forshared_attributes
- Added a check to
ppaged()
to only use a pager when running in a real fully functional terminal
- Enhancements
- Added quit_on_sigint attribute to enable canceling current line instead of quitting when Ctrl+C is typed
- Added possibility of having readline history preservation in a SubMenu
- Added table_display.py example to demonstrate how to display tabular data
- Added command aliasing with
alias
andunalias
commands - Added the ability to load an initialization script at startup
- See alias_startup.py for an example
- Added a default SIGINT handler which terminates any open pipe subprocesses and re-raises a KeyboardInterrupt
- For macOS, will load the
gnureadline
module if available andreadline
if not