From 8d9877ccd6ff7213ac672229a8faf67485ed313f Mon Sep 17 00:00:00 2001 From: Jiayi Zhao Date: Mon, 17 Feb 2020 21:39:48 -0500 Subject: directory reloads now preserve position - commands like show hidden and reload dir now preserves cursor/index position --- src/fs/dirlist.rs | 29 ++++++++++++++++------------- 1 file 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 = { + 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(()) -- cgit v1.2.3