mirror of
https://github.com/helix-editor/helix.git
synced 2025-01-19 21:47:07 +04:00
support prefilling prompt (#2459)
* support prefilling prompt * introduce with_line builder method in Prompt * extract show_prompt * use textobject_word as fallback input
This commit is contained in:
parent
55b45ec4a4
commit
e5c7aaed91
@ -885,9 +885,21 @@ fn marked_string_to_markdown(contents: lsp::MarkedString) -> String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn rename_symbol(cx: &mut Context) {
|
pub fn rename_symbol(cx: &mut Context) {
|
||||||
ui::prompt(
|
let (view, doc) = current_ref!(cx.editor);
|
||||||
|
let text = doc.text().slice(..);
|
||||||
|
let primary_selection = doc.selection(view.id).primary();
|
||||||
|
let prefill = if primary_selection.len() > 1 {
|
||||||
|
primary_selection
|
||||||
|
} else {
|
||||||
|
use helix_core::textobject::{textobject_word, TextObject};
|
||||||
|
textobject_word(text, primary_selection, TextObject::Inside, 1, false)
|
||||||
|
}
|
||||||
|
.fragment(text)
|
||||||
|
.into();
|
||||||
|
ui::prompt_with_input(
|
||||||
cx,
|
cx,
|
||||||
"rename-to:".into(),
|
"rename-to:".into(),
|
||||||
|
prefill,
|
||||||
None,
|
None,
|
||||||
ui::completers::none,
|
ui::completers::none,
|
||||||
move |cx: &mut compositor::Context, input: &str, event: PromptEvent| {
|
move |cx: &mut compositor::Context, input: &str, event: PromptEvent| {
|
||||||
|
@ -34,7 +34,27 @@ pub fn prompt(
|
|||||||
completion_fn: impl FnMut(&Editor, &str) -> Vec<prompt::Completion> + 'static,
|
completion_fn: impl FnMut(&Editor, &str) -> Vec<prompt::Completion> + 'static,
|
||||||
callback_fn: impl FnMut(&mut crate::compositor::Context, &str, PromptEvent) + 'static,
|
callback_fn: impl FnMut(&mut crate::compositor::Context, &str, PromptEvent) + 'static,
|
||||||
) {
|
) {
|
||||||
let mut prompt = Prompt::new(prompt, history_register, completion_fn, callback_fn);
|
show_prompt(
|
||||||
|
cx,
|
||||||
|
Prompt::new(prompt, history_register, completion_fn, callback_fn),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn prompt_with_input(
|
||||||
|
cx: &mut crate::commands::Context,
|
||||||
|
prompt: std::borrow::Cow<'static, str>,
|
||||||
|
input: String,
|
||||||
|
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,
|
||||||
|
) {
|
||||||
|
show_prompt(
|
||||||
|
cx,
|
||||||
|
Prompt::new(prompt, history_register, completion_fn, callback_fn).with_line(input),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn show_prompt(cx: &mut crate::commands::Context, mut prompt: Prompt) {
|
||||||
// Calculate initial completion
|
// Calculate initial completion
|
||||||
prompt.recalculate_completion(cx.editor);
|
prompt.recalculate_completion(cx.editor);
|
||||||
cx.push_layer(Box::new(prompt));
|
cx.push_layer(Box::new(prompt));
|
||||||
|
@ -84,6 +84,13 @@ pub fn new(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn with_line(mut self, line: String) -> Self {
|
||||||
|
let cursor = line.len();
|
||||||
|
self.line = line;
|
||||||
|
self.cursor = cursor;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
pub fn line(&self) -> &String {
|
pub fn line(&self) -> &String {
|
||||||
&self.line
|
&self.line
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user