summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJiayi Zhao <jeff.no.zhao@gmail.com>2019-07-19 21:31:57 -0400
committerJiayi Zhao <jeff.no.zhao@gmail.com>2019-07-19 21:31:57 -0400
commit98e9665e59d7af0b2c002f0e6007578b3e90aa69 (patch)
tree7b8adea60790aba5842b9ceb7ba51d834aec72bf /src
parent91bcec9872b3c5efc93405d83149d43bfb985f4a (diff)
fix not remembering cursor position when switching directories via cd
Diffstat (limited to 'src')
-rw-r--r--src/commands/change_directory.rs22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/commands/change_directory.rs b/src/commands/change_directory.rs
index b727055..c062c8f 100644
--- a/src/commands/change_directory.rs
+++ b/src/commands/change_directory.rs
@@ -24,23 +24,21 @@ impl ChangeDirectory {
context: &mut JoshutoContext,
view: &JoshutoView,
) -> std::io::Result<()> {
- let curr_tab = &mut context.tabs[context.curr_tab_index];
-
std::env::set_current_dir(path.as_path())?;
- curr_tab.curr_path = path.clone();
- curr_tab
+ let curr_tab = &mut context.tabs[context.curr_tab_index];
+ let mut curr_list = curr_tab
.history
- .populate_to_root(&curr_tab.curr_path, &context.config_t.sort_option)?;
+ .pop_or_create(&path, &context.config_t.sort_option)?;
- let mut new_curr_list = curr_tab
- .history
- .pop_or_create(&curr_tab.curr_path, &context.config_t.sort_option)?;
+ std::mem::swap(&mut curr_tab.curr_list, &mut curr_list);
+ curr_tab.curr_path = path.clone();
- std::mem::swap(&mut curr_tab.curr_list, &mut new_curr_list);
- curr_tab
- .history
- .insert(new_curr_list.file_path().clone(), new_curr_list);
+ if let Some(s) = path.parent() {
+ curr_tab
+ .history
+ .populate_to_root(s, &context.config_t.sort_option)?;
+ }
curr_tab.refresh(view, &context.config_t);
Ok(())