summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2020-01-28 01:29:58 +0100
committerrabite <rabite@posteo.de>2020-01-28 01:29:58 +0100
commit049b1d1c7425f2ae1b08e97c8abae58d24715a7f (patch)
treea100b12b8bf247abfcafe23c623ed2cfd09a241a
parent025a40044c5336b4dda5c0df126bc5cd009140f3 (diff)
fix sized_string chopping string at wrong boundaries
-rw-r--r--src/term.rs21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/term.rs b/src/term.rs
index b35dc37..1dd4a7b 100644
--- a/src/term.rs
+++ b/src/term.rs
@@ -221,24 +221,25 @@ pub fn cell_ratio() -> HResult<f32> {
}
pub fn sized_string(string: &str, xsize: u16) -> &str {
- let len = string.char_indices()
- .map(|(i, ch)| {
+ let len = string.chars()
+ .map(|ch| {
if ch.is_ascii() {
- (i, 1)
+ (1, 1)
} else {
- (i, UnicodeWidthChar::width(ch).unwrap_or(0))
+ (UnicodeWidthChar::width(ch).unwrap_or(0), ch.len_utf8())
}
})
- .scan(0, |slen, (i, chlen)| {
- *slen += chlen;
- Some((i, *slen))
+ .scan((0,0), |(str_width, str_len), (ch_width, ch_len)| {
+ *str_width += ch_width;
+ *str_len += ch_len;
+ Some((*str_width, *str_len))
})
- .take_while(|(_, slen)| slen < &(xsize as usize))
- .map(|(i,_)| i)
+ .take_while(|(str_width, _)| *str_width < xsize as usize)
+ .map(|(_, str_len)| str_len)
.last()
.unwrap_or(0);
- &string[0..len+1]
+ &string[0..len]
}
#[derive(Debug)]