-
Notifications
You must be signed in to change notification settings - Fork 122
Added a couple simple example for using tmux or byobu to launch cmd2 applications #1399
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
dec3177
Added a couple simple example shell scripts demonstrating how to use …
tleonhardt 520c147
Improved the documentation for all cmd2 examples
tleonhardt 250ec01
Added info on the tmux examples to the examples/README.md
tleonhardt 51fac97
Added a link to the example applications from top-level README
tleonhardt 1b47cae
Fix spelling and grammar errors
tleonhardt File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# List of cmd2 examples | ||
|
||
{% | ||
include-markdown "../../examples/README.md" | ||
%} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
# cmd2 Examples | ||
|
||
The [examples](https://github.com/python-cmd2/cmd2/tree/master/examples) directory within the `cmd2` repository contains a number of simple self-contained examples which each demonstrate a few particular features of `cmd2`. None of them are representative of a full real-world complex `cmd2` application, if you are looking for that then see [Projects using cmd2](https://github.com/python-cmd2/cmd2?tab=readme-ov-file#projects-using-cmd2). | ||
|
||
## List of cmd2 examples | ||
|
||
Here is the list of examples in alphabetical order by filename along with a brief description of each: | ||
|
||
- [alias_startup.py](https://github.com/python-cmd2/cmd2/blob/master/examples/alias_startup.py) | ||
- Demonstrates how to add custom command aliases and how to run an initialization script at startup | ||
- [arg_decorators.py](https://github.com/python-cmd2/cmd2/blob/master/examples/arg_decorators.py) | ||
- Demonstrates how to use the `cmd2.with_argparser` decorator to specify command arguments using [argparse](https://docs.python.org/3/library/argparse.html) | ||
- [arg_print.py](https://github.com/python-cmd2/cmd2/blob/master/examples/arg_print.py) | ||
- Demonstrates how arguments and options get parsed and passed to commands and shows how shortcuts work | ||
- [argparse_completion.py](https://github.com/python-cmd2/cmd2/blob/master/examples/argparse_completion.py) | ||
- Shows how to integrate tab-completion with argparse-based commands | ||
- [async_printing.py](https://github.com/python-cmd2/cmd2/blob/master/examples/async_printing.py) | ||
- Shows how to asynchronously print alerts, update the prompt in realtime, and change the window title | ||
- [basic.py](https://github.com/python-cmd2/cmd2/blob/master/examples/basic.py) | ||
- Shows how to add a command, add help for it, and create persistent command history for your application | ||
- [basic_completion.py](https://github.com/python-cmd2/cmd2/blob/master/examples/basic_completion.py) | ||
- Show how to enable custom tab completion by assigning a completer function to `do_*` commands | ||
- [cmd2_as_argument.py](https://github.com/python-cmd2/cmd2/blob/master/examples/cmd_as_argument.py) | ||
- Demonstrates how to accept and parse command-line arguments when invoking a cmd2 application | ||
- [colors.py](https://github.com/python-cmd2/cmd2/blob/master/examples/colors.py) | ||
- Show various ways of using colorized output within a cmd2 application | ||
- [custom_parser.py](https://github.com/python-cmd2/cmd2/blob/master/examples/custom_parser.py) | ||
- Demonstrates how to create your own customer `Cmd2ArgumentParser`; used by the `override_parser.py` example | ||
- [decorator_example.py](https://github.com/python-cmd2/cmd2/blob/master/examples/decorator_example.py) | ||
- Shows how to use cmd2's various argparse decorators to processes command-line arguments | ||
- [default_categories.py](https://github.com/python-cmd2/cmd2/blob/master/examples/default_categories.py) | ||
- Demonstrates usage of `@with_default_category` decorator to group and categorize commands and `CommandSet` use | ||
- [dynamic_commands.py](https://github.com/python-cmd2/cmd2/blob/master/examples/dynamic_commands.py) | ||
- Shows how `do_*` commands can be dynamically created programatically at runtime | ||
- [environment.py](https://github.com/python-cmd2/cmd2/blob/master/examples/environment.py) | ||
- Shows how to create custom `cmd2.Settable` parameters which serve as internal environment variables | ||
- [event_loops.py](https://github.com/python-cmd2/cmd2/blob/master/examples/event_loops.py) | ||
- Shows how to integrate a `cmd2` application with an external event loop which isn't managed by `cmd2` | ||
- [example.py](https://github.com/python-cmd2/cmd2/blob/master/examples/example.py) | ||
- This example is intended to demonstrate `cmd2's` build-in transcript testing capability | ||
- [exit_code.py](https://github.com/python-cmd2/cmd2/blob/master/examples/exit_code.py) | ||
- Show how to emit a non-zero exit code from your `cmd2` application when it exits | ||
- [first_app.py](https://github.com/python-cmd2/cmd2/blob/master/examples/first_app.py) | ||
- Short application that demonstrates 8 key features: Settings, Commands, Argument Parsing, Generating Output, Help, Shortcuts, Multiple Commands, and History | ||
- [hello_cmd2.py](https://github.com/python-cmd2/cmd2/blob/master/examples/hello_cmd2.py) | ||
- Completely bare-bones `cmd2` application suitable for rapid testing and debugging of `cmd2` itself | ||
- [help_categories.py](https://github.com/python-cmd2/cmd2/blob/master/examples/help_categories.py) | ||
- Demonstrates command categorization and its impact on the output of the built-in `help` command | ||
- [hooks.py](https://github.com/python-cmd2/cmd2/blob/master/examples/hooks.py) | ||
- Shows how to use various `cmd2` application lifecycle hooks | ||
- [initialization.py](https://github.com/python-cmd2/cmd2/blob/master/examples/initialization.py) | ||
- Shows how to colorize output, use multiline command, add persistent history, and more | ||
- [migrating.py](https://github.com/python-cmd2/cmd2/blob/master/examples/migrating.py) | ||
- A simple `cmd` application that you can migrate to `cmd2` by changing one line | ||
- [modular_commands_basic.py](https://github.com/python-cmd2/cmd2/blob/master/examples/modular_commands_basic.py) | ||
- Demonstrates based `CommandSet` usage | ||
- [modular_commands_dynamic.py](https://github.com/python-cmd2/cmd2/blob/master/examples/modular_commands_dynamic.py) | ||
- Demonstrates dynamic `CommandSet` loading and unloading | ||
- [modular_commands_main.py](https://github.com/python-cmd2/cmd2/blob/master/examples/modular_commands_main.py) | ||
- Complex example demonstrating a variety of methods to load `CommandSets` using a mix of command decorators | ||
- [modular_subcommands.py](https://github.com/python-cmd2/cmd2/blob/master/examples/modular_subcommands.py) | ||
- Shows how to dynamically add and remove subcommands at runtime using `CommandSets` | ||
- [override-parser.py](https://github.com/python-cmd2/cmd2/blob/master/examples/override_parser.py) | ||
- Shows how to override cmd2's default `Cmd2ArgumentParser` with your own customer parser class | ||
- [paged_output.py](https://github.com/python-cmd2/cmd2/blob/master/examples/paged_output.py) | ||
- Shows how to use output pagination within `cmd2` apps via the `ppaged` method | ||
- [persistent_history.py](https://github.com/python-cmd2/cmd2/blob/master/examples/persistent_history.py) | ||
- Shows how to enable persistent history in your `cmd2` application | ||
- [pirate.py](https://github.com/python-cmd2/cmd2/blob/master/examples/pirate.py) | ||
- Demonstrates many features including colorized output, multiline commands, shorcuts, defaulting to shell, etc. | ||
- [python_scripting.py](https://github.com/python-cmd2/cmd2/blob/master/examples/python_scripting.py) | ||
- Shows how cmd2's built-in `run_pyscript` command can provide advanced Python scripting of cmd2 applications | ||
- [read_input.py](https://github.com/python-cmd2/cmd2/blob/master/examples/read_input.py) | ||
- Demonstrates the various ways to call `cmd2.Cmd.read_input()` for input history and tab completion | ||
- [remove_builtin_commands.py](https://github.com/python-cmd2/cmd2/blob/master/examples/remove_builtin_commands.py) | ||
- Shows how to remove any built-in cmd2 commands you do not want to be present in your cmd2 application | ||
- [remove_settable.py](https://github.com/python-cmd2/cmd2/blob/master/examples/remove_settable.py) | ||
- Shows how to remove any of the built-in cmd2 `Settables` you do not want in your cmd2 application | ||
- [subcommands.py](https://github.com/python-cmd2/cmd2/blob/master/examples/subcommands.py) | ||
- Shows how to use `argparse` to easily support sub-commands within your cmd2 commands | ||
- [table_creation.py](https://github.com/python-cmd2/cmd2/blob/master/examples/table_creation.py) | ||
- Contains various examples of using cmd2's table creation capabilities | ||
- [tmux_launch.sh](https://github.com/python-cmd2/cmd2/blob/master/examples/tmux_launch.sh) | ||
- Shell script that launches two applications using tmux in different windows/tabs | ||
- [tmux_split.sh](https://github.com/python-cmd2/cmd2/blob/master/examples/tmux_split.sh) | ||
- Shell script that launches two applications using tmux in a split pane view | ||
- [unicode_commands.py](https://github.com/python-cmd2/cmd2/blob/master/examples/unicode_commands.py) | ||
- Shows that cmd2 supports unicode everywhere, including within command names |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
#!/usr/bin/env zsh | ||
|
||
# This script launches two applications using tmux in different windows/tabs. | ||
# The user is required to enter the name of at least the first application. | ||
# If the second isn't provided, then the user's default shell is launched for this. | ||
# You must have tmux installed and that can be done using your operating system's package manager. | ||
# | ||
# See the tmux Uncyclo for info on how to use it: https://github.com/tmux/tmux/wiki. | ||
# To shift focus between different windows in tmux use Ctrl-b followed by l (lowercase "L"). | ||
# | ||
# NOTE: If you have byobu installed, it is a wrapper around tmux and will likely run instead of tmux. | ||
# For info on how to use Byobu, see: https://www.byobu.org/ | ||
# To shift focus between windows/tabs in byobu, simply hit F3. | ||
|
||
# Function to print in red | ||
print_red() { | ||
echo -e "\e[31m$*\e[0m" | ||
} | ||
|
||
if [ $# -eq 0 ]; | ||
then | ||
print_red "No arguments supplied and this script requires at least one" | ||
exit 1 | ||
fi | ||
|
||
FIRST_COMMAND=$1 | ||
|
||
if [ $# -eq 1 ] | ||
then | ||
SECOND_COMMAND=$SHELL | ||
else | ||
SECOND_COMMAND=$2 | ||
fi | ||
|
||
tmux new-session -s "tmux window demo" -n "$FIRST_COMMAND" "$FIRST_COMMAND ;read" \; \ | ||
new-window -n "$SECOND_COMMAND" "$SECOND_COMMAND ; read" \; previous-window |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
#!/usr/bin/env zsh | ||
|
||
# This script launches two applications using byobu in different tabs. | ||
# The user is required to enter the name of at least the first application. | ||
# If the second isn't provided, then the user's default shell is launched for this. | ||
# | ||
# byobu must be installed for this script to work and you can install it using your | ||
# operating system package manager. For info on how to use Byobu, see: https://www.byobu.org/ | ||
# | ||
# To shift focus between tabs in byobu, just hit F3. | ||
|
||
# Function to print in red | ||
print_red() { | ||
echo -e "\e[31m$*\e[0m" | ||
} | ||
|
||
if [ $# -eq 0 ]; | ||
then | ||
print_red "No arguments supplied and this script requires at least one" | ||
exit 1 | ||
fi | ||
|
||
FIRST_COMMAND=$1 | ||
|
||
if [ $# -eq 1 ] | ||
then | ||
SECOND_COMMAND=$SHELL | ||
else | ||
SECOND_COMMAND=$2 | ||
fi | ||
|
||
tmux new-session -s "tmux split pane demo" "$FIRST_COMMAND ; read" \; \ | ||
split-window "$SECOND_COMMAND ; read" \; \ | ||
select-layout even-vertical |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All whitespace changes like this are due to prettier auto-formatting of Markdown and YAML files accoridng to the configuration in the .prettierrc configuration file in the
cmd2
project root directory.There is a
Prettier
extension for VSCode and aPrettier
plugin for PyCharm - both make it easy to auto-format on save.In the future we may want to look into a GitHub Actions workflow to check the auto-formatting of all Markdown and YAML files using Prettier, but I think that might be overkill at this time.