summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJiayi Zhao <jeff.no.zhao@gmail.com>2020-02-17 21:39:48 -0500
committerJiayi Zhao <jeff.no.zhao@gmail.com>2020-02-17 21:39:48 -0500
commit8d9877ccd6ff7213ac672229a8faf67485ed313f (patch)
treead89bb0e5dde634a76811161b7a6954a7cf94376 /src
parentaa9b25ab36d6da75d4163f13de7cad5f5ed2ce69 (diff)
directory reloads now preserve position
- commands like show hidden and reload dir now preserves cursor/index position
Diffstat (limited to 'src')
-rw-r--r--src/fs/dirlist.rs29
1 files changed, 16 insertions, 13 deletions
diff --git a/src/fs/dirlist.rs b/src/fs/dirlist.rs
index c15cfff..3a32c19 100644
--- a/src/fs/dirlist.rs
+++ b/src/fs/dirlist.rs
@@ -64,25 +64,28 @@ impl JoshutoDirList {
contents.sort_by(sort_func);
let contents_len = contents.len();
- /* update the index */
- if contents_len == 0 {
- self.index = None;
- } else {
- self.index = match self.index {
- Some(index) => {
- if index >= contents_len {
- Some(contents_len - 1)
- } else {
- self.index
+
+ let index: Option<usize> = {
+ if contents_len == 0 {
+ None
+ } else {
+ match self.get_curr_ref() {
+ Some(entry) => {
+ contents
+ .iter()
+ .enumerate()
+ .find(|(i, e)| e.file_name() == entry.file_name())
+ .and_then(|(i, e)| Some(i))
}
+ None => Some(0),
}
- None => Some(0),
- };
- }
+ }
+ };
let metadata = JoshutoMetadata::from(&self.path)?;
self.metadata = metadata;
self.contents = contents;
+ self.index = index;
self.content_outdated = false;
Ok(())