Remove more push_layer calls

pull/1872/head
Blaž Hrastnik 3 years ago
parent 5c162ef995
commit 96a4eb8483
No known key found for this signature in database
GPG Key ID: 1238B9C4AD889640

@ -2187,7 +2187,7 @@ async fn make_format_callback(
format: impl Future<Output = helix_lsp::util::LspFormatting> + Send + 'static, format: impl Future<Output = helix_lsp::util::LspFormatting> + Send + 'static,
) -> anyhow::Result<job::Callback> { ) -> anyhow::Result<job::Callback> {
let format = format.await; let format = format.await;
let call: job::Callback = Box::new(move |editor: &mut Editor, _compositor: &mut Compositor| { let call: job::Callback = Box::new(move |editor, _compositor| {
let view_id = view!(editor).id; let view_id = view!(editor).id;
if let Some(doc) = editor.document_mut(doc_id) { if let Some(doc) = editor.document_mut(doc_id) {
if doc.version() == doc_version { if doc.version() == doc_version {
@ -3475,9 +3475,7 @@ pub fn completion(cx: &mut Context) {
cx.callback( cx.callback(
future, future,
move |editor: &mut Editor, move |editor, compositor, response: Option<lsp::CompletionResponse>| {
compositor: &mut Compositor,
response: Option<lsp::CompletionResponse>| {
let doc = doc!(editor); let doc = doc!(editor);
if doc.mode() != Mode::Insert { if doc.mode() != Mode::Insert {
// we're not in insert mode anymore // we're not in insert mode anymore
@ -4123,11 +4121,12 @@ fn shell_append_output(cx: &mut Context) {
} }
fn shell_keep_pipe(cx: &mut Context) { fn shell_keep_pipe(cx: &mut Context) {
let prompt = Prompt::new( ui::prompt(
cx,
"keep-pipe:".into(), "keep-pipe:".into(),
Some('|'), Some('|'),
ui::completers::none, ui::completers::none,
move |cx: &mut compositor::Context, input: &str, event: PromptEvent| { move |cx, input: &str, event: PromptEvent| {
let shell = &cx.editor.config().shell; let shell = &cx.editor.config().shell;
if event != PromptEvent::Validate { if event != PromptEvent::Validate {
return; return;
@ -4171,8 +4170,6 @@ fn shell_keep_pipe(cx: &mut Context) {
doc.set_selection(view.id, Selection::new(ranges, index)); doc.set_selection(view.id, Selection::new(ranges, index));
}, },
); );
cx.push_layer(Box::new(prompt));
} }
fn shell_impl( fn shell_impl(
@ -4219,11 +4216,13 @@ fn shell(cx: &mut Context, prompt: Cow<'static, str>, behavior: ShellBehavior) {
ShellBehavior::Replace | ShellBehavior::Ignore => true, ShellBehavior::Replace | ShellBehavior::Ignore => true,
ShellBehavior::Insert | ShellBehavior::Append => false, ShellBehavior::Insert | ShellBehavior::Append => false,
}; };
let prompt = Prompt::new(
ui::prompt(
cx,
prompt, prompt,
Some('|'), Some('|'),
ui::completers::none, ui::completers::none,
move |cx: &mut compositor::Context, input: &str, event: PromptEvent| { move |cx, input: &str, event: PromptEvent| {
let config = cx.editor.config(); let config = cx.editor.config();
let shell = &config.shell; let shell = &config.shell;
if event != PromptEvent::Validate { if event != PromptEvent::Validate {
@ -4273,8 +4272,6 @@ fn shell(cx: &mut Context, prompt: Cow<'static, str>, behavior: ShellBehavior) {
view.ensure_cursor_in_view(doc, config.scrolloff); view.ensure_cursor_in_view(doc, config.scrolloff);
}, },
); );
cx.push_layer(Box::new(prompt));
} }
fn suspend(_cx: &mut Context) { fn suspend(_cx: &mut Context) {
@ -4420,13 +4417,11 @@ fn replay_macro(cx: &mut Context) {
}; };
let count = cx.count(); let count = cx.count();
cx.callback = Some(Box::new( cx.callback = Some(Box::new(move |compositor, cx| {
move |compositor: &mut Compositor, cx: &mut compositor::Context| { for _ in 0..count {
for _ in 0..count { for &key in keys.iter() {
for &key in keys.iter() { compositor.handle_event(crossterm::event::Event::Key(key.into()), cx);
compositor.handle_event(crossterm::event::Event::Key(key.into()), cx);
}
} }
}, }
)); }));
} }

@ -11,7 +11,7 @@ use helix_view::editor::Action;
use crate::{ use crate::{
compositor::{self, Compositor}, compositor::{self, Compositor},
ui::{self, overlay::overlayed, FileLocation, FilePicker, Popup, Prompt, PromptEvent}, ui::{self, overlay::overlayed, FileLocation, FilePicker, Popup, PromptEvent},
}; };
use std::borrow::Cow; use std::borrow::Cow;
@ -138,9 +138,7 @@ pub fn symbol_picker(cx: &mut Context) {
cx.callback( cx.callback(
future, future,
move |editor: &mut Editor, move |editor, compositor, response: Option<lsp::DocumentSymbolResponse>| {
compositor: &mut Compositor,
response: Option<lsp::DocumentSymbolResponse>| {
if let Some(symbols) = response { if let Some(symbols) = response {
// lsp has two ways to represent symbols (flat/nested) // lsp has two ways to represent symbols (flat/nested)
// convert the nested variant to flat, so that we have a homogeneous list // convert the nested variant to flat, so that we have a homogeneous list
@ -172,9 +170,7 @@ pub fn workspace_symbol_picker(cx: &mut Context) {
cx.callback( cx.callback(
future, future,
move |_editor: &mut Editor, move |_editor, compositor, response: Option<Vec<lsp::SymbolInformation>>| {
compositor: &mut Compositor,
response: Option<Vec<lsp::SymbolInformation>>| {
if let Some(symbols) = response { if let Some(symbols) = response {
let picker = sym_picker(symbols, current_url, offset_encoding); let picker = sym_picker(symbols, current_url, offset_encoding);
compositor.push(Box::new(overlayed(picker))) compositor.push(Box::new(overlayed(picker)))
@ -208,9 +204,7 @@ pub fn code_action(cx: &mut Context) {
cx.callback( cx.callback(
future, future,
move |editor: &mut Editor, move |editor, compositor, response: Option<lsp::CodeActionResponse>| {
compositor: &mut Compositor,
response: Option<lsp::CodeActionResponse>| {
let actions = match response { let actions = match response {
Some(a) => a, Some(a) => a,
None => return, None => return,
@ -613,7 +607,7 @@ pub fn hover(cx: &mut Context) {
cx.callback( cx.callback(
future, future,
move |editor: &mut Editor, compositor: &mut Compositor, response: Option<lsp::Hover>| { move |editor, compositor, response: Option<lsp::Hover>| {
if let Some(hover) = response { if let Some(hover) = response {
// hover.contents / .range <- used for visualizing // hover.contents / .range <- used for visualizing
@ -650,7 +644,8 @@ pub fn hover(cx: &mut Context) {
); );
} }
pub fn rename_symbol(cx: &mut Context) { pub fn rename_symbol(cx: &mut Context) {
let prompt = Prompt::new( ui::prompt(
cx,
"rename-to:".into(), "rename-to:".into(),
None, None,
ui::completers::none, ui::completers::none,
@ -670,5 +665,4 @@ pub fn rename_symbol(cx: &mut Context) {
apply_workspace_edit(cx.editor, offset_encoding, &edits); apply_workspace_edit(cx.editor, offset_encoding, &edits);
}, },
); );
cx.push_layer(Box::new(prompt));
} }

@ -26,6 +26,19 @@ use helix_view::{Document, Editor, View};
use std::path::PathBuf; use std::path::PathBuf;
pub fn prompt(
cx: &mut crate::commands::Context,
prompt: std::borrow::Cow<'static, str>,
history_register: Option<char>,
completion_fn: impl FnMut(&Editor, &str) -> Vec<prompt::Completion> + 'static,
callback_fn: impl FnMut(&mut crate::compositor::Context, &str, PromptEvent) + 'static,
) {
let mut prompt = Prompt::new(prompt, history_register, completion_fn, callback_fn);
// Calculate initial completion
prompt.recalculate_completion(cx.editor);
cx.push_layer(Box::new(prompt));
}
pub fn regex_prompt( pub fn regex_prompt(
cx: &mut crate::commands::Context, cx: &mut crate::commands::Context,
prompt: std::borrow::Cow<'static, str>, prompt: std::borrow::Cow<'static, str>,

Loading…
Cancel
Save