mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-26 03:13:29 +04:00
wip: Use prompt for interactive commands.
This commit is contained in:
parent
07801b60bc
commit
ed6a4c4bd2
@ -248,6 +248,39 @@ pub fn extend_line_down(cx: &mut Context) {
|
|||||||
cx.view.doc.set_selection(selection);
|
cx.view.doc.set_selection(selection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn split_selection(cx: &mut Context) {
|
||||||
|
// TODO: this needs to store initial selection state, revert on esc, confirm on enter
|
||||||
|
// needs to also call the callback function per input change, not just final time.
|
||||||
|
// could cheat and put it into completion_fn
|
||||||
|
//
|
||||||
|
// kakoune does it like this:
|
||||||
|
// # save state to register
|
||||||
|
// {
|
||||||
|
// # restore state from register
|
||||||
|
// # if event == abort, return early
|
||||||
|
// # add to history if enabled
|
||||||
|
// # update state
|
||||||
|
// }
|
||||||
|
|
||||||
|
let prompt = Prompt::new(
|
||||||
|
"split:".to_string(),
|
||||||
|
|input: &str| Vec::new(), // TODO: use Option here?
|
||||||
|
|editor: &mut Editor, input: &str| {
|
||||||
|
match Regex::new(input) {
|
||||||
|
Ok(regex) => {
|
||||||
|
let view = editor.view_mut().unwrap();
|
||||||
|
let text = &view.doc.text().slice(..);
|
||||||
|
let selection = selection::split_on_matches(text, view.doc.selection(), ®ex);
|
||||||
|
view.doc.set_selection(selection);
|
||||||
|
}
|
||||||
|
Err(_) => (), // TODO: mark command line as error
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn split_selection_on_newline(cx: &mut Context) {
|
pub fn split_selection_on_newline(cx: &mut Context) {
|
||||||
let text = &cx.view.doc.text().slice(..);
|
let text = &cx.view.doc.text().slice(..);
|
||||||
// only compile the regex once
|
// only compile the regex once
|
||||||
|
@ -156,6 +156,7 @@ pub fn default() -> Keymaps {
|
|||||||
vec![key!('o')] => commands::open_below,
|
vec![key!('o')] => commands::open_below,
|
||||||
vec![key!('d')] => commands::delete_selection,
|
vec![key!('d')] => commands::delete_selection,
|
||||||
vec![key!('c')] => commands::change_selection,
|
vec![key!('c')] => commands::change_selection,
|
||||||
|
vec![shift!('S')] => commands::split_selection,
|
||||||
vec![key!('s')] => commands::split_selection_on_newline,
|
vec![key!('s')] => commands::split_selection_on_newline,
|
||||||
vec![key!(';')] => commands::collapse_selection,
|
vec![key!(';')] => commands::collapse_selection,
|
||||||
// TODO should be alt(;)
|
// TODO should be alt(;)
|
||||||
|
@ -10,7 +10,6 @@ pub struct Prompt {
|
|||||||
pub line: String,
|
pub line: String,
|
||||||
pub cursor: usize,
|
pub cursor: usize,
|
||||||
pub completion: Vec<String>,
|
pub completion: Vec<String>,
|
||||||
pub should_close: bool,
|
|
||||||
pub completion_selection_index: Option<usize>,
|
pub completion_selection_index: Option<usize>,
|
||||||
completion_fn: Box<dyn FnMut(&str) -> Vec<String>>,
|
completion_fn: Box<dyn FnMut(&str) -> Vec<String>>,
|
||||||
callback_fn: Box<dyn FnMut(&mut Editor, &str)>,
|
callback_fn: Box<dyn FnMut(&mut Editor, &str)>,
|
||||||
@ -27,7 +26,6 @@ pub fn new(
|
|||||||
line: String::new(),
|
line: String::new(),
|
||||||
cursor: 0,
|
cursor: 0,
|
||||||
completion: completion_fn(""),
|
completion: completion_fn(""),
|
||||||
should_close: false,
|
|
||||||
completion_selection_index: None,
|
completion_selection_index: None,
|
||||||
completion_fn: Box::new(completion_fn),
|
completion_fn: Box::new(completion_fn),
|
||||||
callback_fn: Box::new(callback_fn),
|
callback_fn: Box::new(callback_fn),
|
||||||
@ -42,9 +40,7 @@ pub fn insert_char(&mut self, c: char) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn move_char_left(&mut self) {
|
pub fn move_char_left(&mut self) {
|
||||||
if self.cursor > 0 {
|
self.cursor = self.cursor.saturating_sub(1)
|
||||||
self.cursor -= 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn move_char_right(&mut self) {
|
pub fn move_char_right(&mut self) {
|
||||||
|
Loading…
Reference in New Issue
Block a user