summaryrefslogtreecommitdiffstats
path: root/src/listview.rs
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-02-25 19:33:40 +0100
committerrabite <rabite@posteo.de>2019-02-25 19:33:40 +0100
commit184f4916d32cec88ec9ac5a48afb7aedceffdfea (patch)
treec6b775e011fe0a9f93bb42bf305300988bcb13a1 /src/listview.rs
parent7fc77f8605bf637331f2f9c283c4b4e284891af1 (diff)
find files
Diffstat (limited to 'src/listview.rs')
-rw-r--r--src/listview.rs18
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;