aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/commands.rs
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term/src/commands.rs')
-rw-r--r--helix-term/src/commands.rs85
1 files changed, 50 insertions, 35 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 7722eca5..b4b64249 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -297,9 +297,11 @@ pub fn split_selection(cx: &mut Context) {
},
);
- cx.callback = Some(Box::new(move |compositor: &mut Compositor| {
- compositor.push(Box::new(prompt));
- }));
+ cx.callback = Some(Box::new(
+ move |compositor: &mut Compositor, editor: &mut Editor| {
+ compositor.push(Box::new(prompt));
+ },
+ ));
}
pub fn split_selection_on_newline(cx: &mut Context) {
@@ -399,12 +401,13 @@ pub fn append_mode(cx: &mut Context) {
// TODO: I, A, o and O can share a lot of the primitives.
pub fn command_mode(cx: &mut Context) {
- cx.callback = Some(Box::new(|compositor: &mut Compositor| {
- let prompt = Prompt::new(
- ":".to_owned(),
- |_input: &str| {
- // TODO: i need this duplicate list right now to avoid borrow checker issues
- let command_list = vec![
+ cx.callback = Some(Box::new(
+ |compositor: &mut Compositor, editor: &mut Editor| {
+ let prompt = Prompt::new(
+ ":".to_owned(),
+ |_input: &str| {
+ // TODO: i need this duplicate list right now to avoid borrow checker issues
+ let command_list = vec![
String::from("q"),
String::from("aaa"),
String::from("bbb"),
@@ -437,37 +440,49 @@ pub fn command_mode(cx: &mut Context) {
String::from("ddd"),
String::from("eee"),
];
- command_list
- .into_iter()
- .filter(|command| command.contains(_input))
- .collect()
- }, // completion
- |editor: &mut Editor, input: &str, event: PromptEvent| {
- if event != PromptEvent::Validate {
- return;
- }
+ command_list
+ .into_iter()
+ .filter(|command| command.contains(_input))
+ .collect()
+ }, // completion
+ |editor: &mut Editor, input: &str, event: PromptEvent| {
+ if event != PromptEvent::Validate {
+ return;
+ }
- let parts = input.split_ascii_whitespace().collect::<Vec<&str>>();
+ let parts = input.split_ascii_whitespace().collect::<Vec<&str>>();
- match parts.as_slice() {
- &["q"] => editor.should_close = true,
- &["o", path] => {
- // TODO: make view()/view_mut() always contain a view.
- let size = editor.view().unwrap().size;
- editor.open(path.into(), size);
+ match parts.as_slice() {
+ &["q"] => editor.should_close = true,
+ &["o", path] => {
+ // TODO: make view()/view_mut() always contain a view.
+ let size = editor.view().unwrap().size;
+ editor.open(path.into(), size);
+ }
+ _ => (),
}
- _ => (),
- }
- },
- );
- compositor.push(Box::new(prompt));
- }));
+ },
+ );
+ compositor.push(Box::new(prompt));
+ },
+ ));
}
pub fn file_picker(cx: &mut Context) {
- cx.callback = Some(Box::new(|compositor: &mut Compositor| {
- let picker = ui::file_picker("./");
- compositor.push(Box::new(picker));
- }));
+ cx.callback = Some(Box::new(
+ |compositor: &mut Compositor, editor: &mut Editor| {
+ let picker = ui::file_picker("./");
+ compositor.push(Box::new(picker));
+ },
+ ));
+}
+
+pub fn buffer_picker(cx: &mut Context) {
+ cx.callback = Some(Box::new(
+ |compositor: &mut Compositor, editor: &mut Editor| {
+ let picker = ui::buffer_picker(&editor.views, editor.focus);
+ compositor.push(Box::new(picker));
+ },
+ ));
}
// calculate line numbers for each selection range