mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-12-27 18:24:57 +00:00
Merge pull request #177 from quininer/cjk
Fix TextCellContents cjk width
This commit is contained in:
commit
5bec218878
@ -1,5 +1,6 @@
|
||||
//! The `TextCell` type for the details and lines views.
|
||||
|
||||
use std::iter::Sum;
|
||||
use std::ops::{Add, Deref, DerefMut};
|
||||
|
||||
use ansi_term::{Style, ANSIString, ANSIStrings};
|
||||
@ -163,11 +164,9 @@ impl TextCellContents {
|
||||
/// Calculates the width that a cell with these contents would take up, by
|
||||
/// counting the number of characters in each unformatted ANSI string.
|
||||
pub fn width(&self) -> DisplayWidth {
|
||||
let sum = self.0.iter()
|
||||
.map(|anstr| anstr.chars().count())
|
||||
.sum();
|
||||
|
||||
DisplayWidth(sum)
|
||||
self.0.iter()
|
||||
.map(|anstr| DisplayWidth::from(anstr.deref()))
|
||||
.sum()
|
||||
}
|
||||
|
||||
/// Promotes these contents to a full cell containing them alongside
|
||||
@ -239,6 +238,12 @@ impl Add<usize> for DisplayWidth {
|
||||
}
|
||||
}
|
||||
|
||||
impl Sum for DisplayWidth {
|
||||
fn sum<I>(iter: I) -> Self where I: Iterator<Item=Self> {
|
||||
iter.fold(DisplayWidth(0), Add::add)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod width_unit_test {
|
||||
|
@ -158,4 +158,4 @@ fn divide_rounding_up(a: usize, b: usize) -> usize {
|
||||
let mut result = a / b;
|
||||
if a % b != 0 { result += 1; }
|
||||
result
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user