use unicode_width::UnicodeWidthChar;
pub(crate) fn width(src: &str) -> usize {
let mut in_ansi: bool = false;
src.chars()
.fold(0_usize, |w, c| {
if in_ansi {
if matches!(c, 'm' | 'A' | 'K') { in_ansi = false; }
w
}
else if c == '\x1b' {
in_ansi = true;
w
}
else {
UnicodeWidthChar::width(c).map_or(w, |w2| w2 + w)
}
})
}