diff --git a/src/output/textwrap/core.rs b/src/output/textwrap/core.rs index 793ae69e12e..b890c6c7bca 100644 --- a/src/output/textwrap/core.rs +++ b/src/output/textwrap/core.rs @@ -54,8 +54,21 @@ #[inline(never)] pub(crate) fn display_width(text: &str) -> usize { let mut width = 0; + + let mut control_sequence = false; + let control_terminate: char = 'm'; + for ch in text.chars() { - width += ch_width(ch); + if ch.is_ascii_control() { + control_sequence = true; + } else if control_sequence && ch == control_terminate { + control_sequence = false; + continue; + } + + if !control_sequence { + width += ch_width(ch); + } } width }