turbo cd back (minibuffer broken though)

This commit is contained in:
rabite 2019-02-22 01:46:02 +01:00
parent 6c305d3d61
commit a6c147442c
1 changed files with 34 additions and 35 deletions

View File

@ -149,17 +149,8 @@ impl FileBrowser {
self.columns.pop_widget(); self.columns.pop_widget();
// Make sure there's a directory on the left unless it's / // Make sure there's a directory on the left unless it's /
if self.left_widget().is_err() { self.fix_left()?;
let file = self.selected_file()?.clone();
if let Some(grand_parent) = file.grand_parent() {
let mut left_view = WillBeWidget::new(Box::new(move |_| {
let mut view
= ListView::new(Files::new_from_path(&grand_parent)?);
Ok(view)
}));
self.columns.prepend_widget(left_view);
}
}
self.columns.refresh(); self.columns.refresh();
Ok(()) Ok(())
} }
@ -177,6 +168,21 @@ impl FileBrowser {
Ok(()) Ok(())
} }
pub fn fix_left(&mut self) -> HResult<()> {
if self.left_widget().is_err() {
let file = self.selected_file()?.clone();
if let Some(grand_parent) = file.grand_parent() {
let mut left_view = WillBeWidget::new(Box::new(move |_| {
let mut view
= ListView::new(Files::new_from_path(&grand_parent)?);
Ok(view)
}));
self.columns.prepend_widget(left_view);
}
}
Ok(())
}
pub fn cwd(&self) -> HResult<File> { pub fn cwd(&self) -> HResult<File> {
let widget = self.columns.get_main_widget()?.widget()?; let widget = self.columns.get_main_widget()?.widget()?;
let cwd = (*widget.lock()?).as_ref()?.content.directory.clone(); let cwd = (*widget.lock()?).as_ref()?.content.directory.clone();
@ -222,31 +228,24 @@ impl FileBrowser {
self.columns.get_main_widget_mut().unwrap().animate_slide_up(); self.columns.get_main_widget_mut().unwrap().animate_slide_up();
} }
pub fn turbo_cd(&mut self) { pub fn turbo_cd(&mut self) -> HResult<()> {
let dir = self.minibuffer("cd: "); let dir = self.minibuffer("cd: ");
// match dir { match dir {
// Some(dir) => { Some(dir) => {
// Files::new_from_path(&std::path::PathBuf::from(&dir)).and_then(|files| { self.columns.widgets.widgets.clear();
// let cwd = files.directory.clone(); let cwd = File::new_from_path(&std::path::PathBuf::from(&dir))?;
// self.columns.widgets.widgets.clear(); self.cwd = cwd;
// self.columns.push_widget(ListView::new(files)); let middle = WillBeWidget::new(Box::new(move |_| {
let files = Files::new_from_path(&std::path::PathBuf::from(&dir))?;
// std::env::set_current_dir(&cwd.path).unwrap(); let listview = ListView::new(files);
Ok(listview)
// if let Some(grand_parent) = cwd.path.parent() { }));
// let left_view = self.columns.push_widget(middle);
// ListView::new(Files::new_from_path(&grand_parent).unwrap()); },
// self.columns.prepend_widget(left_view); None => {}
// } }
// self.fix_selection(); Ok(())
// self.update_preview();
// self.refresh();
// self.columns.refresh();
// Ok(())
// }).ok();
// } None => {}
// }
} }
} }
@ -316,7 +315,7 @@ impl Widget for FileBrowser {
fn on_key(&mut self, key: Key) { fn on_key(&mut self, key: Key) {
match key { match key {
Key::Char('/') => self.turbo_cd(), Key::Char('/') => { self.turbo_cd(); },
Key::Char('Q') => { self.quit_with_dir(); }, Key::Char('Q') => { self.quit_with_dir(); },
Key::Right | Key::Char('f') => { self.enter_dir(); }, Key::Right | Key::Char('f') => { self.enter_dir(); },
Key::Left | Key::Char('b') => { self.go_back(); }, Key::Left | Key::Char('b') => { self.go_back(); },