-
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
Changes from 4 commits
dec3177
520c147
250ec01
51fac97
1b47cae
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# List of cmd2 examples | ||
|
||
{% | ||
include-markdown "../../examples/README.md" | ||
%} |
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 shortcust work | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix "shortcuts" spelling. |
||
- [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 decotrators to processes command-line arguments | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix "decorators" spelling. |
||
- [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 use dynamically add and remove subcommands at runtime using `CommandSets` | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove "use". |
||
- [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 and provide advanced Python scripting of cmd2 applications | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix wording of this sentence. |
||
- [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 |
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 Wiki 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. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Change "IF" to "If". |
||
# 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 |
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. or info on how to use Byobu, see: https://www.byobu.org/ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Change "or" to "For". |
||
# | ||
# 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 |
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.