Skip to content

Commit

Permalink
fix unicode issue (#71)
Browse files Browse the repository at this point in the history
  • Loading branch information
soywod committed Apr 8, 2021
1 parent 14d8a3f commit 994141f
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 13 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Fixed

- Unicode chars breaks the view [#71]

### Added

- Telescope support [#61]
Expand Down Expand Up @@ -118,3 +122,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
[#40]: https://github.com/soywod/himalaya/issues/40
[#41]: https://github.com/soywod/himalaya/issues/41
[#61]: https://github.com/soywod/himalaya/issues/61
[#71]: https://github.com/soywod/himalaya/issues/71
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ serde_json = "1.0.61"
terminal_size = "0.1.15"
toml = "0.5.8"
tree_magic = "0.2.3"
unicode-width = "0.1.7"
uuid = { version = "0.8", features = ["v4"] }
24 changes: 11 additions & 13 deletions src/table.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use std::fmt;
use terminal_size::terminal_size;
use unicode_width::UnicodeWidthStr;

#[derive(Clone, Debug)]
pub struct Style(u8, u8, u8);
Expand Down Expand Up @@ -46,8 +47,8 @@ impl Cell {
}
}

pub fn printable_value_len(&self) -> usize {
self.value.chars().collect::<Vec<_>>().len()
pub fn unicode_width(&self) -> usize {
UnicodeWidthStr::width(self.value.as_str())
}

pub fn render(&self, col_size: usize) -> String {
Expand All @@ -58,18 +59,15 @@ impl Cell {
.collect::<Vec<_>>()
.concat();
let style_end = "\x1b[0m";
let unicode_width = self.unicode_width();

if col_size > 0 && self.printable_value_len() > col_size {
let value: String = self.value.chars().collect::<Vec<_>>()[0..=col_size - 2]
.into_iter()
.collect();

String::from(style_begin + &value + "… " + style_end)
if col_size > 0 && unicode_width > col_size {
String::from(style_begin + &self.value[0..=col_size - 2] + "… " + style_end)
} else {
let padding = if col_size == 0 {
"".to_string()
} else {
" ".repeat(col_size - self.printable_value_len() + 1)
" ".repeat(col_size - unicode_width + 1)
};

String::from(style_begin + &self.value + &padding + style_end)
Expand Down Expand Up @@ -102,17 +100,17 @@ pub trait DisplayTable<'a, T: DisplayRow + 'a> {
let head = Self::header_row();

head.iter().for_each(|cell| {
col_sizes.push(cell.printable_value_len());
col_sizes.push(cell.unicode_width());
});

let mut table = self
.rows()
.iter()
.map(|item| {
let row = item.to_row();
row.iter().enumerate().for_each(|(i, cell)| {
col_sizes[i] = col_sizes[i].max(cell.printable_value_len())
});
row.iter()
.enumerate()
.for_each(|(i, cell)| col_sizes[i] = col_sizes[i].max(cell.unicode_width()));
row
})
.collect::<Vec<_>>();
Expand Down

0 comments on commit 994141f

Please sign in to comment.