summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rwxr-xr-xexamples/colors.py142
-rwxr-xr-xexamples/plumbum_colors.py144
-rw-r--r--examples/transcripts/exampleSession.txt2
-rw-r--r--examples/transcripts/transcript_regex.txt2
4 files changed, 288 insertions, 2 deletions
diff --git a/examples/colors.py b/examples/colors.py
new file mode 100755
index 00000000..8765aee0
--- /dev/null
+++ b/examples/colors.py
@@ -0,0 +1,142 @@
+#!/usr/bin/env python
+# coding=utf-8
+"""
+A sample application for cmd2. Demonstrating colorized output.
+
+Experiment with the command line options on the `speak` command to see how
+different output colors ca
+
+The colors setting has three possible values:
+
+Never
+ poutput() and pfeedback() strip all ANSI escape sequences
+ which instruct the terminal to colorize output
+
+Terminal
+ (the default value) poutput() and pfeedback() do not strip any ANSI escape
+ sequences when the output is a terminal, but if the output is a pipe or a
+ file the escape sequences are stripped. If you want colorized output you
+ must add ANSI escape sequences, preferably using some python color library
+ like `plumbum.colors`, `colorama`, `blessings`, or `termcolor`.
+
+Always
+ poutput() and pfeedback() never strip ANSI escape sequences, regardless of
+ the output destination
+"""
+
+import random
+import argparse
+
+import cmd2
+from colorama import Fore, Back
+
+FG_COLORS = {
+ 'black': Fore.BLACK,
+ 'red': Fore.RED,
+ 'green': Fore.GREEN,
+ 'yellow': Fore.YELLOW,
+ 'blue': Fore.BLUE,
+ 'magenta': Fore.MAGENTA,
+ 'cyan': Fore.CYAN,
+ 'white': Fore.WHITE,
+}
+BG_COLORS = {
+ 'black': Back.BLACK,
+ 'red': Back.RED,
+ 'green': Back.GREEN,
+ 'yellow': Back.YELLOW,
+ 'blue': Back.BLUE,
+ 'magenta': Back.MAGENTA,
+ 'cyan': Back.CYAN,
+ 'white': Back.WHITE,
+}
+
+
+class CmdLineApp(cmd2.Cmd):
+ """Example cmd2 application demonstrating colorized output."""
+
+ # Setting this true makes it run a shell command if a cmd2/cmd command doesn't exist
+ # default_to_shell = True
+ MUMBLES = ['like', '...', 'um', 'er', 'hmmm', 'ahh']
+ MUMBLE_FIRST = ['so', 'like', 'well']
+ MUMBLE_LAST = ['right?']
+
+ def __init__(self):
+ self.multiline_commands = ['orate']
+ self.maxrepeats = 3
+
+ # Add stuff to settable and shortcuts before calling base class initializer
+ self.settable['maxrepeats'] = 'max repetitions for speak command'
+ self.shortcuts.update({'&': 'speak'})
+
+ # Set use_ipython to True to enable the "ipy" command which embeds and interactive IPython shell
+ super().__init__(use_ipython=True)
+
+ speak_parser = argparse.ArgumentParser()
+ speak_parser.add_argument('-p', '--piglatin', action='store_true', help='atinLay')
+ speak_parser.add_argument('-s', '--shout', action='store_true', help='N00B EMULATION MODE')
+ speak_parser.add_argument('-r', '--repeat', type=int, help='output [n] times')
+ speak_parser.add_argument('-f', '--fg', choices=FG_COLORS, help='foreground color to apply to output')
+ speak_parser.add_argument('-b', '--bg', choices=BG_COLORS, help='background color to apply to output')
+ speak_parser.add_argument('words', nargs='+', help='words to say')
+
+ @cmd2.with_argparser(speak_parser)
+ def do_speak(self, args):
+ """Repeats what you tell me to."""
+ words = []
+ for word in args.words:
+ if args.piglatin:
+ word = '%s%say' % (word[1:], word[0])
+ if args.shout:
+ word = word.upper()
+ words.append(word)
+
+ repetitions = args.repeat or 1
+
+ color_on = ''
+ if args.fg:
+ color_on += FG_COLORS[args.fg]
+ if args.bg:
+ color_on += BG_COLORS[args.bg]
+ color_off = Fore.RESET + Back.RESET
+
+ for i in range(min(repetitions, self.maxrepeats)):
+ # .poutput handles newlines, and accommodates output redirection too
+ self.poutput(color_on + ' '.join(words) + color_off)
+
+ do_say = do_speak # now "say" is a synonym for "speak"
+ do_orate = do_speak # another synonym, but this one takes multi-line input
+
+ mumble_parser = argparse.ArgumentParser()
+ mumble_parser.add_argument('-r', '--repeat', type=int, help='how many times to repeat')
+ mumble_parser.add_argument('-f', '--fg', help='foreground color to apply to output')
+ mumble_parser.add_argument('-b', '--bg', help='background color to apply to output')
+ mumble_parser.add_argument('words', nargs='+', help='words to say')
+
+ @cmd2.with_argparser(mumble_parser)
+ def do_mumble(self, args):
+ """Mumbles what you tell me to."""
+ color_on = ''
+ if args.fg and args.fg in FG_COLORS:
+ color_on += FG_COLORS[args.fg]
+ if args.bg and args.bg in BG_COLORS:
+ color_on += BG_COLORS[args.bg]
+ color_off = Fore.RESET + Back.RESET
+
+ repetitions = args.repeat or 1
+ for i in range(min(repetitions, self.maxrepeats)):
+ output = []
+ if random.random() < .33:
+ output.append(random.choice(self.MUMBLE_FIRST))
+ for word in args.words:
+ if random.random() < .40:
+ output.append(random.choice(self.MUMBLES))
+ output.append(word)
+ if random.random() < .25:
+ output.append(random.choice(self.MUMBLE_LAST))
+ self.poutput(color_on + ' '.join(output) + color_off)
+
+
+if __name__ == '__main__':
+ c = CmdLineApp()
+ c.cmdloop()
diff --git a/examples/plumbum_colors.py b/examples/plumbum_colors.py
new file mode 100755
index 00000000..942eaf80
--- /dev/null
+++ b/examples/plumbum_colors.py
@@ -0,0 +1,144 @@
+#!/usr/bin/env python
+# coding=utf-8
+"""
+A sample application for cmd2. Demonstrating colorized output using the plumbum package.
+
+Experiment with the command line options on the `speak` command to see how
+different output colors ca
+
+The colors setting has three possible values:
+
+Never
+ poutput() and pfeedback() strip all ANSI escape sequences
+ which instruct the terminal to colorize output
+
+Terminal
+ (the default value) poutput() and pfeedback() do not strip any ANSI escape
+ sequences when the output is a terminal, but if the output is a pipe or a
+ file the escape sequences are stripped. If you want colorized output you
+ must add ANSI escape sequences, preferably using some python color library
+ like `plumbum.colors`, `colorama`, `blessings`, or `termcolor`.
+
+Always
+ poutput() and pfeedback() never strip ANSI escape sequences, regardless of
+ the output destination
+
+WARNING: This example requires the plumbum package, which isn't normally required by cmd2.
+"""
+
+import random
+import argparse
+
+import cmd2
+from plumbum.colors import fg, bg, reset
+
+FG_COLORS = {
+ 'black': fg.Black,
+ 'red': fg.DarkRedA,
+ 'green': fg.MediumSpringGreen,
+ 'yellow': fg.LightYellow,
+ 'blue': fg.RoyalBlue1,
+ 'magenta': fg.Purple,
+ 'cyan': fg.SkyBlue1,
+ 'white': fg.White,
+}
+BG_COLORS = {
+ 'black': bg.BLACK,
+ 'red': bg.DarkRedA,
+ 'green': bg.MediumSpringGreen,
+ 'yellow': bg.LightYellow,
+ 'blue': bg.RoyalBlue1,
+ 'magenta': bg.Purple,
+ 'cyan': bg.SkyBlue1,
+ 'white': bg.White,
+}
+
+
+class CmdLineApp(cmd2.Cmd):
+ """Example cmd2 application demonstrating colorized output."""
+
+ # Setting this true makes it run a shell command if a cmd2/cmd command doesn't exist
+ # default_to_shell = True
+ MUMBLES = ['like', '...', 'um', 'er', 'hmmm', 'ahh']
+ MUMBLE_FIRST = ['so', 'like', 'well']
+ MUMBLE_LAST = ['right?']
+
+ def __init__(self):
+ self.multiline_commands = ['orate']
+ self.maxrepeats = 3
+
+ # Add stuff to settable and shortcuts before calling base class initializer
+ self.settable['maxrepeats'] = 'max repetitions for speak command'
+ self.shortcuts.update({'&': 'speak'})
+
+ # Set use_ipython to True to enable the "ipy" command which embeds and interactive IPython shell
+ super().__init__(use_ipython=True)
+
+ speak_parser = argparse.ArgumentParser()
+ speak_parser.add_argument('-p', '--piglatin', action='store_true', help='atinLay')
+ speak_parser.add_argument('-s', '--shout', action='store_true', help='N00B EMULATION MODE')
+ speak_parser.add_argument('-r', '--repeat', type=int, help='output [n] times')
+ speak_parser.add_argument('-f', '--fg', choices=FG_COLORS, help='foreground color to apply to output')
+ speak_parser.add_argument('-b', '--bg', choices=BG_COLORS, help='background color to apply to output')
+ speak_parser.add_argument('words', nargs='+', help='words to say')
+
+ @cmd2.with_argparser(speak_parser)
+ def do_speak(self, args):
+ """Repeats what you tell me to."""
+ words = []
+ for word in args.words:
+ if args.piglatin:
+ word = '%s%say' % (word[1:], word[0])
+ if args.shout:
+ word = word.upper()
+ words.append(word)
+
+ repetitions = args.repeat or 1
+
+ color_on = ''
+ if args.fg:
+ color_on += FG_COLORS[args.fg]
+ if args.bg:
+ color_on += BG_COLORS[args.bg]
+ color_off = reset
+
+ for i in range(min(repetitions, self.maxrepeats)):
+ # .poutput handles newlines, and accommodates output redirection too
+ self.poutput(color_on + ' '.join(words) + color_off)
+
+ do_say = do_speak # now "say" is a synonym for "speak"
+ do_orate = do_speak # another synonym, but this one takes multi-line input
+
+ mumble_parser = argparse.ArgumentParser()
+ mumble_parser.add_argument('-r', '--repeat', type=int, help='how many times to repeat')
+ mumble_parser.add_argument('-f', '--fg', help='foreground color to apply to output')
+ mumble_parser.add_argument('-b', '--bg', help='background color to apply to output')
+ mumble_parser.add_argument('words', nargs='+', help='words to say')
+
+ @cmd2.with_argparser(mumble_parser)
+ def do_mumble(self, args):
+ """Mumbles what you tell me to."""
+ color_on = ''
+ if args.fg and args.fg in FG_COLORS:
+ color_on += FG_COLORS[args.fg]
+ if args.bg and args.bg in BG_COLORS:
+ color_on += BG_COLORS[args.bg]
+ color_off = Fore.RESET + Back.RESET
+
+ repetitions = args.repeat or 1
+ for i in range(min(repetitions, self.maxrepeats)):
+ output = []
+ if random.random() < .33:
+ output.append(random.choice(self.MUMBLE_FIRST))
+ for word in args.words:
+ if random.random() < .40:
+ output.append(random.choice(self.MUMBLES))
+ output.append(word)
+ if random.random() < .25:
+ output.append(random.choice(self.MUMBLE_LAST))
+ self.poutput(color_on + ' '.join(output) + color_off)
+
+
+if __name__ == '__main__':
+ c = CmdLineApp()
+ c.cmdloop()
diff --git a/examples/transcripts/exampleSession.txt b/examples/transcripts/exampleSession.txt
index 6318776f..38fb0659 100644
--- a/examples/transcripts/exampleSession.txt
+++ b/examples/transcripts/exampleSession.txt
@@ -3,7 +3,7 @@
# The regex for editor will match whatever program you use.
# regexes on prompts just make the trailing space obvious
(Cmd) set
-colors: /(True|False)/
+colors: /(Terminal|Always|Never)/
continuation_prompt: >/ /
debug: False
echo: False
diff --git a/examples/transcripts/transcript_regex.txt b/examples/transcripts/transcript_regex.txt
index 08588ab1..6980fac6 100644
--- a/examples/transcripts/transcript_regex.txt
+++ b/examples/transcripts/transcript_regex.txt
@@ -3,7 +3,7 @@
# The regex for editor will match whatever program you use.
# regexes on prompts just make the trailing space obvious
(Cmd) set
-colors: /(True|False)/
+colors: /(Terminal|Always|Never)/
continuation_prompt: >/ /
debug: False
echo: False