From 1e6719fe3368068217968fe0b637604668cb7764 Mon Sep 17 00:00:00 2001 From: rabite Date: Fri, 1 Feb 2019 01:37:16 +0100 Subject: improved string handling --- src/file_browser.rs | 3 --- src/listview.rs | 33 +++++++++++++++++++-------------- src/miller_columns.rs | 3 --- src/preview.rs | 3 --- src/term.rs | 10 ++++------ src/textview.rs | 3 --- src/widget.rs | 2 +- 7 files changed, 24 insertions(+), 33 deletions(-) (limited to 'src') diff --git a/src/file_browser.rs b/src/file_browser.rs index 2bae8c3..71f6a37 100644 --- a/src/file_browser.rs +++ b/src/file_browser.rs @@ -102,9 +102,6 @@ impl FileBrowser { } impl Widget for FileBrowser { - fn render(&self) -> Vec { - vec![] - } fn get_size(&self) -> &Size { &self.columns.get_size() } diff --git a/src/listview.rs b/src/listview.rs index 9ec3a6c..0cbdd63 100644 --- a/src/listview.rs +++ b/src/listview.rs @@ -89,15 +89,18 @@ where let xsize = self.get_size().xsize(); let sized_string = term::sized_string(&name, xsize); - let padded_string = format!("{:padding$}", sized_string, padding = xsize as usize); - let styled_string = match &file.color { - Some(color) => format!("{}{}", term::from_lscolor(color), &padded_string), - _ => format!("{}{}", term::normal_color(), padded_string), - }; - format!( "{}{}{}{}{}", - styled_string, + match &file.color { + Some(color) => format!("{}{:padding$}", + term::from_lscolor(color), + &sized_string, + padding = xsize as usize), + _ => format!("{}{:padding$}", + term::normal_color(), + &sized_string, + padding = xsize as usize), + } , term::highlight_color(), term::cursor_left(size.to_string().width() + unit.width()), size, @@ -204,6 +207,14 @@ where None => self.show_status(""), } } + + fn render(&self) -> Vec { + self.content + .files + .par_iter() + .map(|file| self.render_line(&file)) + .collect() + } } impl Widget for ListView { @@ -232,13 +243,7 @@ impl Widget for ListView { fn refresh(&mut self) { self.buffer = self.render(); } - fn render(&self) -> Vec { - self.content - .files - .par_iter() - .map(|file| self.render_line(&file)) - .collect() - } + fn get_drawlist(&self) -> String { let mut output = term::reset(); diff --git a/src/miller_columns.rs b/src/miller_columns.rs index 1d69442..82e15c8 100644 --- a/src/miller_columns.rs +++ b/src/miller_columns.rs @@ -108,9 +108,6 @@ impl Widget for MillerColumns where T: Widget, { - fn render(&self) -> Vec { - vec![] - } fn get_size(&self) -> &Size { &self.coordinates.size } diff --git a/src/preview.rs b/src/preview.rs index 5496857..46bd5fe 100644 --- a/src/preview.rs +++ b/src/preview.rs @@ -25,9 +25,6 @@ impl Previewer { } impl Widget for Previewer { - fn render(&self) -> Vec { - vec![] - } fn get_size(&self) -> &Size { &self.coordinates.size } diff --git a/src/term.rs b/src/term.rs index 7ec366c..ed8380b 100644 --- a/src/term.rs +++ b/src/term.rs @@ -1,5 +1,3 @@ -use unicode_width::UnicodeWidthStr; - use std::io::{Stdout, Write}; use termion; use termion::screen::AlternateScreen; @@ -29,14 +27,14 @@ pub fn ysize() -> usize { } pub fn sized_string(string: &str, xsize: u16) -> String { - let lenstr: String = string.chars().fold("".into(), |acc, ch| { - if acc.width() + 1 >= xsize as usize { + string.chars().fold("".to_string(), |acc, ch| { + let width: usize = unicode_width::UnicodeWidthStr::width_cjk(acc.as_str()); + if width + 1 >= xsize as usize { acc } else { acc + &ch.to_string() } - }); - lenstr + }) } // Do these as constants diff --git a/src/textview.rs b/src/textview.rs index 5cb5b47..f292e66 100644 --- a/src/textview.rs +++ b/src/textview.rs @@ -28,9 +28,6 @@ impl TextView { } impl Widget for TextView { - fn render(&self) -> Vec { - vec![] - } fn get_size(&self) -> &Size { &self.coordinates.size } diff --git a/src/widget.rs b/src/widget.rs index 03d89c2..361c6cc 100644 --- a/src/widget.rs +++ b/src/widget.rs @@ -3,7 +3,7 @@ use termion::event::{Event, Key, MouseEvent}; use crate::coordinates::{Coordinates, Position, Size}; pub trait Widget { - fn render(&self) -> Vec; + //fn render(&self) -> Vec; fn get_size(&self) -> &Size; fn get_position(&self) -> &Position; fn set_size(&mut self, size: Size); -- cgit v1.2.3