diff options
author | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2020-02-17 21:39:48 -0500 |
---|---|---|
committer | Jiayi Zhao <jeff.no.zhao@gmail.com> | 2020-02-17 21:39:48 -0500 |
commit | 8d9877ccd6ff7213ac672229a8faf67485ed313f (patch) | |
tree | ad89bb0e5dde634a76811161b7a6954a7cf94376 | |
parent | aa9b25ab36d6da75d4163f13de7cad5f5ed2ce69 (diff) |
directory reloads now preserve position
- commands like show hidden and reload dir now preserves cursor/index
position
-rw-r--r-- | src/fs/dirlist.rs | 29 |
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(()) |