diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/files.rs | 23 | ||||
-rw-r--r-- | src/listview.rs | 20 |
2 files changed, 36 insertions, 7 deletions
diff --git a/src/files.rs b/src/files.rs index e38af15..728fb71 100644 --- a/src/files.rs +++ b/src/files.rs @@ -21,6 +21,7 @@ pub struct Files { pub sort: SortBy, pub dirs_first: bool, pub reverse: bool, + pub show_hidden: bool } impl Index<usize> for Files { @@ -58,7 +59,7 @@ impl Files { let files: Vec<_> = direntries? .iter() .map(|file| { - //let file = file?; + //let file = file?; let name = file.file_name(); let name = name.to_string_lossy(); let kind = get_kind(&file); @@ -69,7 +70,7 @@ impl Files { let mtime = meta.mtime(); let user = meta.uid(); let group = meta.gid(); - let color = get_color(&path, &meta); + let color = get_color(&path, &meta); File::new(&name, path, kind, size as usize, mtime, color, mode, user, group) }) @@ -81,6 +82,7 @@ impl Files { sort: SortBy::Name, dirs_first: true, reverse: false, + show_hidden: true }; files.sort(); @@ -148,6 +150,23 @@ impl Files { pub fn reverse_sort(&mut self) { self.reverse = !self.reverse } + + pub fn toggle_hidden(&mut self) { + self.show_hidden = !self.show_hidden + } + + pub fn reload_files(&mut self) { + let dir = self.directory.clone(); + let files = Files::new_from_path(&dir.path()).unwrap(); + let files = files + .files + .into_iter() + .skip_while(|f| f.name.starts_with(".") && !self.show_hidden ) + .collect(); + + self.files = files; + } + pub fn len(&self) -> usize { self.files.len() } diff --git a/src/listview.rs b/src/listview.rs index 1fa16e4..4fbcc8e 100644 --- a/src/listview.rs +++ b/src/listview.rs @@ -82,7 +82,7 @@ where let ysize = self.coordinates.ysize() as usize; let mut offset = 0; - while position >= ysize - 2 + offset { + while position >= ysize + offset { offset += 1 } @@ -179,7 +179,7 @@ where .files .par_iter() .position_any(|item| item == file) - .unwrap(); + .unwrap_or(0); self.set_selection(pos); } @@ -247,14 +247,23 @@ where } let file = self.clone_selected_file(); - self.content.dirs_first = dir_settings; - self.content.sort = sort_settings; - self.content.sort(); + // self.content.dirs_first = dir_settings; + // self.content.sort = sort_settings; + // self.content.sort(); self.select_file(&file); + self.seeking = true; self.refresh(); } + fn toggle_hidden(&mut self) { + let file = self.clone_selected_file(); + self.content.toggle_hidden(); + self.content.reload_files(); + self.select_file(&file); + self.refresh(); + } + fn toggle_dirs_first(&mut self) { let file = self.clone_selected_file(); self.content.dirs_first = !self.content.dirs_first; @@ -371,6 +380,7 @@ impl Widget for ListView<Files> { } Key::Left => self.goto_grand_parent(), Key::Right => self.goto_selected(), + Key::Char('h') => self.toggle_hidden(), Key::Char('r') => self.reverse_sort(), Key::Char('s') => self.cycle_sort(), Key::Char('k') => self.select_next_mtime(), |