diff options
author | rabite <rabite@posteo.de> | 2019-02-25 19:33:40 +0100 |
---|---|---|
committer | rabite <rabite@posteo.de> | 2019-02-25 19:33:40 +0100 |
commit | 184f4916d32cec88ec9ac5a48afb7aedceffdfea (patch) | |
tree | c6b775e011fe0a9f93bb42bf305300988bcb13a1 /src/listview.rs | |
parent | 7fc77f8605bf637331f2f9c283c4b4e284891af1 (diff) |
find files
Diffstat (limited to 'src/listview.rs')
-rw-r--r-- | src/listview.rs | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/listview.rs b/src/listview.rs index 904baa9..3633dfe 100644 --- a/src/listview.rs +++ b/src/listview.rs @@ -6,6 +6,7 @@ use std::io::Write; use crate::coordinates::{Coordinates, Position, Size}; use crate::files::{File, Files}; +use crate::fail::HResult; use crate::term; use crate::widget::{Widget}; @@ -41,7 +42,8 @@ impl Listable for ListView<Files> { Key::Down | Key::Char('n') => { self.move_down(); self.refresh(); - } + }, + Key::Ctrl('s') => { self.find_file().ok(); } Key::Left => self.goto_grand_parent(), Key::Right => self.goto_selected(), Key::Char(' ') => self.multi_select_file(), @@ -381,6 +383,20 @@ impl ListView<Files> } } + fn find_file(&mut self) -> HResult<()> { + let name = self.minibuffer("find")?; + let file = self.content.files.iter().find(|file| { + if file.name.to_lowercase().contains(&name) { + true + } else { + false + } + })?.clone(); + + self.select_file(&file); + Ok(()) + } + fn render(&self) -> Vec<String> { let ysize = self.get_coordinates().ysize() as usize; let offset = self.offset; |