aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/src/commands.rs41
-rw-r--r--helix-term/src/ui/mod.rs33
2 files changed, 37 insertions, 37 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 12d80a0f..7a1643fe 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -11,7 +11,7 @@ use once_cell::sync::Lazy;
use crate::{
compositor::{Callback, Compositor},
- ui::{self, Popup, Prompt, PromptEvent},
+ ui::{self, Picker, Popup, Prompt, PromptEvent},
};
use std::path::PathBuf;
@@ -19,7 +19,7 @@ use std::path::PathBuf;
use helix_view::{
document::Mode,
view::{View, PADDING},
- Document, Editor,
+ Document, DocumentId, Editor,
};
use crossterm::event::{KeyCode, KeyEvent};
@@ -820,10 +820,39 @@ pub fn file_picker(cx: &mut Context) {
}
pub fn buffer_picker(cx: &mut Context) {
- // let documents = cx.editor.documents.iter().map(||).collect();
- // (document_id, relative_path/name) mappings
- // let picker = ui::buffer_picker(&documents, editor.focus);
- // cx.push_layer(Box::new(picker));
+ use std::path::{Path, PathBuf};
+ let current = cx.editor.view().doc;
+
+ let picker = Picker::new(
+ cx.editor
+ .documents
+ .iter()
+ .map(|(id, doc)| (id, doc.relative_path().map(Path::to_path_buf)))
+ .collect(),
+ move |(id, path): &(DocumentId, Option<PathBuf>)| {
+ // format_fn
+ match path {
+ Some(path) => {
+ if *id == current {
+ format!("{} (*)", path.to_str().unwrap()).into()
+ } else {
+ path.to_str().unwrap().into()
+ }
+ }
+ None => "[NEW]".into(),
+ }
+ },
+ |editor: &mut Editor, (_, path): &(DocumentId, Option<PathBuf>)| match path {
+ Some(path) => {
+ use helix_view::editor::Action;
+ editor
+ .open(path.into(), Action::Replace)
+ .expect("editor.open failed");
+ }
+ None => (),
+ },
+ );
+ cx.push_layer(Box::new(picker));
}
// calculate line numbers for each selection range
diff --git a/helix-term/src/ui/mod.rs b/helix-term/src/ui/mod.rs
index a625aa14..f7f77d0c 100644
--- a/helix-term/src/ui/mod.rs
+++ b/helix-term/src/ui/mod.rs
@@ -20,6 +20,8 @@ pub use tui::style::{Color, Modifier, Style};
use helix_core::regex::Regex;
use helix_view::{Document, Editor};
+use std::path::{Path, PathBuf};
+
// TODO: temp
#[inline(always)]
pub fn text_color() -> Style {
@@ -75,7 +77,6 @@ pub fn regex_prompt(
)
}
-use std::path::{Path, PathBuf};
pub fn file_picker(root: &str) -> Picker<PathBuf> {
use ignore::Walk;
// TODO: determine root based on git root
@@ -109,36 +110,6 @@ pub fn file_picker(root: &str) -> Picker<PathBuf> {
)
}
-use helix_view::View;
-pub fn buffer_picker(buffers: &[Document], current: usize) -> Picker<(Option<PathBuf>, usize)> {
- use helix_view::Editor;
- Picker::new(
- buffers
- .iter()
- .enumerate()
- .map(|(i, doc)| (doc.relative_path().map(Path::to_path_buf), i))
- .collect(),
- move |(path, index): &(Option<PathBuf>, usize)| {
- // format_fn
- match path {
- Some(path) => {
- if *index == current {
- format!("{} (*)", path.to_str().unwrap()).into()
- } else {
- path.to_str().unwrap().into()
- }
- }
- None => "[NEW]".into(),
- }
- },
- |editor: &mut Editor, &(_, index): &(Option<PathBuf>, usize)| {
- // if index < editor.views.len() {
- // editor.focus = index;
- // }
- },
- )
-}
-
pub mod completers {
use crate::ui::prompt::Completion;
use std::borrow::Cow;