diff options
author | rabite <rabite@posteo.de> | 2019-03-11 12:08:43 +0100 |
---|---|---|
committer | rabite <rabite@posteo.de> | 2019-03-11 12:08:43 +0100 |
commit | e63c65ab7d944fb3a80f6c40bd0d98ec50b054c6 (patch) | |
tree | 06ed1d6a0f8cb1a7b13a5b36591680b922abbf32 /src/listview.rs | |
parent | 5b9a150a10411dcc47bd6340aa33fa8423aaa2be (diff) |
tagging files
Diffstat (limited to 'src/listview.rs')
-rw-r--r-- | src/listview.rs | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/listview.rs b/src/listview.rs index 64ec5ac..b0db7ae 100644 --- a/src/listview.rs +++ b/src/listview.rs @@ -46,6 +46,7 @@ impl Listable for ListView<Files> { Key::Left => self.goto_grand_parent()?, Key::Right => self.goto_selected()?, Key::Char(' ') => self.multi_select_file(), + Key::Char('t') => self.toggle_tag()?, Key::Char('h') => self.toggle_hidden(), Key::Char('r') => self.reverse_sort(), Key::Char('s') => self.cycle_sort(), @@ -136,6 +137,11 @@ where fn render_line(&self, file: &File) -> String { let name = &file.name; let (size, unit) = file.calculate_size().unwrap_or((0, "".to_string())); + let tag = match file.is_tagged() { + Ok(true) => term::color_red() + "*", + _ => "".to_string() + }; + let tag_len = if tag != "" { 1 } else { 0 }; let selection_gap = " ".to_string(); let (name, selection_color) = if file.is_selected() { @@ -149,18 +155,21 @@ where + unit.to_string().len() as u16); let padding = sized_string.len() - sized_string.width_cjk(); let padding = xsize - padding as u16; + let padding = padding - tag_len; format!( "{}{}{}{}{}{}{}", termion::cursor::Save, match &file.color { - Some(color) => format!("{}{}{:padding$}{}", + Some(color) => format!("{}{}{}{:padding$}{}", + tag, term::from_lscolor(color), selection_color, &sized_string, term::normal_color(), padding = padding as usize), - _ => format!("{}{}{:padding$}{}", + _ => format!("{}{}{}{:padding$}{}", + tag, term::normal_color(), selection_color, &sized_string, @@ -335,6 +344,12 @@ impl ListView<Files> self.refresh().log(); } + fn toggle_tag(&mut self) -> HResult<()> { + self.selected_file_mut().toggle_tag()?; + self.move_down(); + Ok(()) + } + fn find_file(&mut self) -> HResult<()> { let name = self.minibuffer("find")?; let file = self.content.files.iter().find(|file| { |