summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorKevin Van Brunt <kmvanbrunt@gmail.com>2018-03-02 13:42:19 -0500
committerKevin Van Brunt <kmvanbrunt@gmail.com>2018-03-02 13:42:19 -0500
commit6cd031d0f071266cee3c6919050bf77b17bee658 (patch)
treee170f62f0dbd80a55b22781c33d8028e6a9b336e /examples
parent06a84fd7503f9f6fd81f70111f6a39a3b7c6188d (diff)
downloadcmd2-git-6cd031d0f071266cee3c6919050bf77b17bee658.tar.gz
Added tab completion example
Diffstat (limited to 'examples')
-rwxr-xr-xexamples/tab_completion.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/examples/tab_completion.py b/examples/tab_completion.py
new file mode 100755
index 00000000..400775a8
--- /dev/null
+++ b/examples/tab_completion.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+# coding=utf-8
+"""A simple example demonstrating how to use flag and index based tab-completion functions
+"""
+import argparse
+import functools
+
+import cmd2
+from cmd2 import with_argparser, with_argument_list, flag_based_complete, index_based_complete
+
+# List of strings used with flag and index based completion functions
+food_item_strs = ['Pizza', 'Hamburger', 'Ham', 'Potato']
+sport_item_strs = ['Bat', 'Basket', 'Basketball', 'Football']
+
+# Dictionary used with flag based completion functions
+flag_dict = \
+ {
+ '-f': food_item_strs, # Tab-complete food items after -f flag in command line
+ '--food': food_item_strs, # Tab-complete food items after --food flag in command line
+ '-s': sport_item_strs, # Tab-complete sport items after -s flag in command line
+ '--sport': sport_item_strs, # Tab-complete sport items after --sport flag in command line
+ }
+
+# Dictionary used with index based completion functions
+index_dict = \
+ {
+ 1: food_item_strs, # Tab-complete food items at index 1 in command line
+ 2: sport_item_strs, # Tab-complete sport items at index 2 in command line
+ }
+
+
+class TabCompleteExample(cmd2.Cmd):
+ """ Example cmd2 application where we a base command which has a couple subcommands."""
+
+ def __init__(self):
+ cmd2.Cmd.__init__(self)
+
+ add_item_parser = argparse.ArgumentParser()
+ add_item_group = add_item_parser.add_mutually_exclusive_group()
+ add_item_group.add_argument('-f', '--food', help='Adds food item')
+ add_item_group.add_argument('-s', '--sport', help='Adds sport item')
+
+ @with_argparser(add_item_parser)
+ def do_add_item(self, args):
+ """Add item command help"""
+ if args.food:
+ add_item = args.food
+ elif args.sport:
+ add_item = args.sport
+ else:
+ add_item = 'no items'
+
+ self.poutput("You added {}".format(add_item))
+
+ # Add flag-based tab-completion to add_item command
+ complete_add_item = functools.partial(flag_based_complete, flag_dict=flag_dict)
+
+ @with_argument_list
+ def do_list_item(self, args):
+ """List item command help"""
+ self.poutput("You listed {}".format(args))
+
+ # Add index-based tab-completion to list_item command
+ complete_list_item = functools.partial(index_based_complete, index_dict=index_dict)
+
+
+if __name__ == '__main__':
+ app = TabCompleteExample()
+ app.cmdloop()