diff options
Diffstat (limited to 'src/joshuto/command/parent_directory.rs')
-rw-r--r-- | src/joshuto/command/parent_directory.rs | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/src/joshuto/command/parent_directory.rs b/src/joshuto/command/parent_directory.rs index c11eac7..912394f 100644 --- a/src/joshuto/command/parent_directory.rs +++ b/src/joshuto/command/parent_directory.rs @@ -6,8 +6,9 @@ use std; use std::fmt; use joshuto; -use joshuto::ui; use joshuto::command; +use joshuto::preview; +use joshuto::ui; #[derive(Clone, Debug)] pub struct ParentDirectory; @@ -15,35 +16,19 @@ pub struct ParentDirectory; impl ParentDirectory { pub fn new() -> Self { ParentDirectory } pub fn command() -> &'static str { "parent_directory" } -} - -impl command::JoshutoCommand for ParentDirectory {} -impl std::fmt::Display for ParentDirectory { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result + pub fn parent_directory(context: &mut joshuto::JoshutoContext) -> bool { - f.write_str(Self::command()) - } -} - -impl command::Runnable for ParentDirectory { - fn execute(&self, context: &mut joshuto::JoshutoContext) - { - let curr_tab = &mut context.tabs[context.tab_index]; - if curr_tab.curr_path.pop() == false { - return; + return false; } match std::env::set_current_dir(&curr_tab.curr_path) { Ok(_) => { { - let dir_list = curr_tab.preview_list.take(); - curr_tab.history.put_back(dir_list); - let curr_list = curr_tab.curr_list.take(); - curr_tab.preview_list = curr_list; + curr_tab.history.put_back(curr_list); let parent_list = curr_tab.parent_list.take(); curr_tab.curr_list = parent_list; @@ -65,22 +50,41 @@ impl command::Runnable for ParentDirectory { }, } - ui::redraw_view(&context.theme_t, &context.views.left_win, - curr_tab.parent_list.as_ref()); - ui::redraw_view_detailed(&context.theme_t, &context.views.mid_win, - curr_tab.curr_list.as_ref()); - ui::redraw_view(&context.theme_t, &context.views.right_win, - curr_tab.preview_list.as_ref()); + ui::redraw_view(&context.config_t, &context.theme_t, + &context.views.left_win, curr_tab.parent_list.as_mut()); + ui::redraw_view_detailed(&context.config_t, &context.theme_t, + &context.views.mid_win, curr_tab.curr_list.as_mut()); ui::redraw_status(&context.theme_t, &context.views, curr_tab.curr_list.as_ref(), &curr_tab.curr_path, &context.username, &context.hostname); + return true; }, Err(e) => { ui::wprint_err(&context.views.bot_win, e.to_string().as_str()); + return false; }, }; - ncurses::doupdate(); + + } +} + +impl command::JoshutoCommand for ParentDirectory {} + +impl std::fmt::Display for ParentDirectory { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result + { + f.write_str(Self::command()) + } +} + +impl command::Runnable for ParentDirectory { + fn execute(&self, context: &mut joshuto::JoshutoContext) + { + if Self::parent_directory(context) { + preview::preview_file(context); + ncurses::doupdate(); + } } } |