fix utils.color.stringc: enclosure non printable sequences in SOH,STX (#64751)
* ansible.utils.color.stringc: add wrap_nonvisible_chars flag in stringc * add exaplanation for `wrap_nonvisible_chars` case in utils.stringc * add changelog entry
This commit is contained in:
parent
1a7823af03
commit
c6301a9fc7
3 changed files with 18 additions and 3 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- fix wrong command line length calculation in ``ansible-console`` when long command inputted
|
|
@ -122,7 +122,7 @@ class ConsoleCLI(CLI, cmd.Cmd):
|
||||||
else:
|
else:
|
||||||
prompt += "$ "
|
prompt += "$ "
|
||||||
color = self.NORMAL_PROMPT
|
color = self.NORMAL_PROMPT
|
||||||
self.prompt = stringc(prompt, color)
|
self.prompt = stringc(prompt, color, wrap_nonvisible_chars=True)
|
||||||
|
|
||||||
def list_modules(self):
|
def list_modules(self):
|
||||||
modules = set()
|
modules = set()
|
||||||
|
|
|
@ -85,12 +85,25 @@ def parsecolor(color):
|
||||||
return u'38;5;%d' % (232 + int(matches.group('gray')))
|
return u'38;5;%d' % (232 + int(matches.group('gray')))
|
||||||
|
|
||||||
|
|
||||||
def stringc(text, color):
|
def stringc(text, color, wrap_nonvisible_chars=False):
|
||||||
"""String in color."""
|
"""String in color."""
|
||||||
|
|
||||||
if ANSIBLE_COLOR:
|
if ANSIBLE_COLOR:
|
||||||
color_code = parsecolor(color)
|
color_code = parsecolor(color)
|
||||||
return u"\n".join([u"\033[%sm%s\033[0m" % (color_code, t) for t in text.split(u'\n')])
|
fmt = u"\033[%sm%s\033[0m"
|
||||||
|
if wrap_nonvisible_chars:
|
||||||
|
# This option is provided for use in cases when the
|
||||||
|
# formatting of a command line prompt is needed, such as
|
||||||
|
# `ansible-console`. As said in `readline` sources:
|
||||||
|
# readline/display.c:321
|
||||||
|
# /* Current implementation:
|
||||||
|
# \001 (^A) start non-visible characters
|
||||||
|
# \002 (^B) end non-visible characters
|
||||||
|
# all characters except \001 and \002 (following a \001) are copied to
|
||||||
|
# the returned string; all characters except those between \001 and
|
||||||
|
# \002 are assumed to be `visible'. */
|
||||||
|
fmt = u"\001\033[%sm\002%s\001\033[0m\002"
|
||||||
|
return u"\n".join([fmt % (color_code, t) for t in text.split(u'\n')])
|
||||||
else:
|
else:
|
||||||
return text
|
return text
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue