summaryrefslogtreecommitdiff
path: root/cmd2
diff options
context:
space:
mode:
Diffstat (limited to 'cmd2')
-rw-r--r--cmd2/ansi.py12
-rw-r--r--cmd2/cmd2.py16
2 files changed, 24 insertions, 4 deletions
diff --git a/cmd2/ansi.py b/cmd2/ansi.py
index f1b2def8..db828af4 100644
--- a/cmd2/ansi.py
+++ b/cmd2/ansi.py
@@ -91,6 +91,7 @@ def ansi_safe_wcswidth(text: str) -> int:
Wrap wcswidth to make it compatible with strings that contains ANSI escape sequences
:param text: the string being measured
+ :return: the width of the string when printed to the terminal
"""
# Strip ANSI escape sequences since they cause wcswidth to return -1
return wcswidth(strip_ansi(text))
@@ -114,7 +115,7 @@ def fg_lookup(fg_name: str) -> str:
:param fg_name: foreground color name to look up ANSI escape code(s) for
:return: ANSI escape code(s) associated with this color
- :raises ValueError if the color cannot be found
+ :raises ValueError: if the color cannot be found
"""
try:
ansi_escape = FG_COLORS[fg_name.lower()]
@@ -128,7 +129,7 @@ def bg_lookup(bg_name: str) -> str:
:param bg_name: background color name to look up ANSI escape code(s) for
:return: ANSI escape code(s) associated with this color
- :raises ValueError if the color cannot be found
+ :raises ValueError: if the color cannot be found
"""
try:
ansi_escape = BG_COLORS[bg_name.lower()]
@@ -184,8 +185,13 @@ def style(text: Any, *, fg: str = '', bg: str = '', bold: bool = False, underlin
# These can be altered to suit an application's needs and only need to be a
# function with the following structure: func(str) -> str
style_success = functools.partial(style, fg='green', bold=True)
+"""Partial function supplying arguments to style() to generate bold green text"""
+
style_warning = functools.partial(style, fg='bright_yellow')
+"""Partial function supplying arguments to ansi.style() to generate yellow text"""
+
style_error = functools.partial(style, fg='bright_red')
+"""Partial function supplying arguments to ansi.style() to generate bright red text"""
def async_alert_str(*, terminal_columns: int, prompt: str, line: str, cursor_offset: int, alert_msg: str) -> str:
@@ -246,6 +252,6 @@ def set_title_str(title: str) -> str:
"""Get the required string, including ANSI escape codes, for setting window title for the terminal.
:param title: new title for the window
- :return string to write to sys.stderr in order to set the window title to the desired test
+ :return: string to write to sys.stderr in order to set the window title to the desired test
"""
return colorama.ansi.set_title(title)
diff --git a/cmd2/cmd2.py b/cmd2/cmd2.py
index d2ab6bd3..2ed87fdc 100644
--- a/cmd2/cmd2.py
+++ b/cmd2/cmd2.py
@@ -289,8 +289,8 @@ class Cmd(cmd.Cmd):
# The error that prints when a non-existent command is run
self.default_error = "{} is not a recognized command, alias, or macro"
+ """The error message displayed when a non-existent command is run."""
- # If this string is non-empty, then this warning message will print if a broken pipe error occurs while printing
self.broken_pipe_warning = ''
# Commands that will run at the beginning of the command loop
@@ -413,6 +413,20 @@ class Cmd(cmd.Cmd):
self.perror('Invalid value: {} (valid values: {}, {}, {})'.format(new_val, ansi.ANSI_TERMINAL,
ansi.ANSI_ALWAYS, ansi.ANSI_NEVER))
+ @property
+ def broken_pipe_warning(self) -> str:
+ """Message to display if a BrokenPipeError is raised while writing output.
+
+ :meth:`~cmd2.cmd2.Cmd.poutput()` catches BrokenPipeError exceptions and
+ outputs the contents of `broken_pipe_warning`. The default value is an
+ empty string meaning the BrokenPipeError is silently swallowed.
+ """
+ return self.broken_pipe_error
+
+ @broken_pipe_warning.setter
+ def broken_pipe_warning(self, new_val: str) -> None:
+ self.broken_pipe_error = new_val
+
def _completion_supported(self) -> bool:
"""Return whether tab completion is supported"""
return self.use_rawinput and self.completekey and rl_type != RlType.NONE