summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/files.rs23
-rw-r--r--src/listview.rs20
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(),