|
|
|
@ -250,6 +250,7 @@ impl MappableCommand {
|
|
|
|
|
extend_search_next, "Add next search match to selection",
|
|
|
|
|
extend_search_prev, "Add previous search match to selection",
|
|
|
|
|
search_selection, "Use current selection as search pattern",
|
|
|
|
|
make_search_word_bounded, "Modify current search to make it word bounded",
|
|
|
|
|
global_search, "Global search in workspace folder",
|
|
|
|
|
extend_line, "Select current line, if already selected, extend to another line based on the anchor",
|
|
|
|
|
extend_line_below, "Select current line, if already selected, extend to next line",
|
|
|
|
@ -1809,6 +1810,35 @@ fn search_selection(cx: &mut Context) {
|
|
|
|
|
cx.editor.set_status(msg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn make_search_word_bounded(cx: &mut Context) {
|
|
|
|
|
let regex = match cx.editor.registers.last('/') {
|
|
|
|
|
Some(regex) => regex,
|
|
|
|
|
None => return,
|
|
|
|
|
};
|
|
|
|
|
let start_anchored = regex.starts_with("\\b");
|
|
|
|
|
let end_anchored = regex.ends_with("\\b");
|
|
|
|
|
|
|
|
|
|
if start_anchored && end_anchored {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let mut new_regex = String::with_capacity(
|
|
|
|
|
regex.len() + if start_anchored { 0 } else { 2 } + if end_anchored { 0 } else { 2 },
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if !start_anchored {
|
|
|
|
|
new_regex.push_str("\\b");
|
|
|
|
|
}
|
|
|
|
|
new_regex.push_str(regex);
|
|
|
|
|
if !end_anchored {
|
|
|
|
|
new_regex.push_str("\\b");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let msg = format!("register '{}' set to '{}'", '/', &new_regex);
|
|
|
|
|
cx.editor.registers.get_mut('/').push(new_regex);
|
|
|
|
|
cx.editor.set_status(msg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn global_search(cx: &mut Context) {
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
|
struct FileResult {
|
|
|
|
|