aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/ui/mod.rs
diff options
context:
space:
mode:
authorBlaž Hrastnik2020-12-18 10:19:50 +0000
committerBlaž Hrastnik2020-12-18 10:19:50 +0000
commit25aa45e76c9bec62f36a59768298e1f2ea2678bf (patch)
tree41b876f9bb067e5f199fe53ecb78eeb57d09719b /helix-term/src/ui/mod.rs
parent0b63e838e0ffe9a36a2cb51790f464d634b843af (diff)
picker: Factor out file picker, we want to reuse code for other pickers.
Diffstat (limited to 'helix-term/src/ui/mod.rs')
-rw-r--r--helix-term/src/ui/mod.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/helix-term/src/ui/mod.rs b/helix-term/src/ui/mod.rs
index cb79a1d1..b778f531 100644
--- a/helix-term/src/ui/mod.rs
+++ b/helix-term/src/ui/mod.rs
@@ -14,3 +14,35 @@ pub use tui::style::{Color, Modifier, Style};
pub fn text_color() -> Style {
Style::default().fg(Color::Rgb(219, 191, 239)) // lilac
}
+
+use std::path::PathBuf;
+pub fn file_picker(root: &str) -> Picker<PathBuf> {
+ use ignore::Walk;
+ // TODO: determine root based on git root
+ let files = Walk::new(root).filter_map(|entry| match entry {
+ Ok(entry) => {
+ // filter dirs, but we might need special handling for symlinks!
+ if !entry.file_type().unwrap().is_dir() {
+ Some(entry.into_path())
+ } else {
+ None
+ }
+ }
+ Err(_err) => None,
+ });
+
+ const MAX: usize = 1024;
+
+ use helix_view::Editor;
+ Picker::new(
+ files.take(MAX).collect(),
+ |path: &PathBuf| {
+ // format_fn
+ path.strip_prefix("./").unwrap().to_str().unwrap() // TODO: render paths without ./
+ },
+ |editor: &mut Editor, path: &PathBuf| {
+ let size = editor.view().unwrap().size;
+ editor.open(path.into(), size);
+ },
+ )
+}