|
|
@ -1175,6 +1175,7 @@ fn search_impl(
|
|
|
|
regex: &Regex,
|
|
|
|
regex: &Regex,
|
|
|
|
movement: Movement,
|
|
|
|
movement: Movement,
|
|
|
|
direction: Direction,
|
|
|
|
direction: Direction,
|
|
|
|
|
|
|
|
scrolloff: usize,
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
let text = doc.text().slice(..);
|
|
|
|
let text = doc.text().slice(..);
|
|
|
|
let selection = doc.selection(view.id);
|
|
|
|
let selection = doc.selection(view.id);
|
|
|
@ -1233,7 +1234,11 @@ fn search_impl(
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
doc.set_selection(view.id, selection);
|
|
|
|
doc.set_selection(view.id, selection);
|
|
|
|
align_view(doc, view, Align::Center);
|
|
|
|
if view.is_cursor_in_view(doc, 0) {
|
|
|
|
|
|
|
|
view.ensure_cursor_in_view(doc, scrolloff);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
align_view(doc, view, Align::Center)
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1257,6 +1262,8 @@ fn rsearch(cx: &mut Context) {
|
|
|
|
// TODO: use one function for search vs extend
|
|
|
|
// TODO: use one function for search vs extend
|
|
|
|
fn searcher(cx: &mut Context, direction: Direction) {
|
|
|
|
fn searcher(cx: &mut Context, direction: Direction) {
|
|
|
|
let reg = cx.register.unwrap_or('/');
|
|
|
|
let reg = cx.register.unwrap_or('/');
|
|
|
|
|
|
|
|
let scrolloff = cx.editor.config.scrolloff;
|
|
|
|
|
|
|
|
|
|
|
|
let (_, doc) = current!(cx.editor);
|
|
|
|
let (_, doc) = current!(cx.editor);
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: could probably share with select_on_matches?
|
|
|
|
// TODO: could probably share with select_on_matches?
|
|
|
@ -1281,7 +1288,15 @@ fn searcher(cx: &mut Context, direction: Direction) {
|
|
|
|
if event != PromptEvent::Update {
|
|
|
|
if event != PromptEvent::Update {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
search_impl(doc, view, &contents, ®ex, Movement::Move, direction);
|
|
|
|
search_impl(
|
|
|
|
|
|
|
|
doc,
|
|
|
|
|
|
|
|
view,
|
|
|
|
|
|
|
|
&contents,
|
|
|
|
|
|
|
|
®ex,
|
|
|
|
|
|
|
|
Movement::Move,
|
|
|
|
|
|
|
|
direction,
|
|
|
|
|
|
|
|
scrolloff,
|
|
|
|
|
|
|
|
);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
@ -1289,6 +1304,7 @@ fn searcher(cx: &mut Context, direction: Direction) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fn search_next_or_prev_impl(cx: &mut Context, movement: Movement, direction: Direction) {
|
|
|
|
fn search_next_or_prev_impl(cx: &mut Context, movement: Movement, direction: Direction) {
|
|
|
|
|
|
|
|
let scrolloff = cx.editor.config.scrolloff;
|
|
|
|
let (view, doc) = current!(cx.editor);
|
|
|
|
let (view, doc) = current!(cx.editor);
|
|
|
|
let registers = &cx.editor.registers;
|
|
|
|
let registers = &cx.editor.registers;
|
|
|
|
if let Some(query) = registers.read('/') {
|
|
|
|
if let Some(query) = registers.read('/') {
|
|
|
@ -1303,7 +1319,7 @@ fn search_next_or_prev_impl(cx: &mut Context, movement: Movement, direction: Dir
|
|
|
|
.case_insensitive(case_insensitive)
|
|
|
|
.case_insensitive(case_insensitive)
|
|
|
|
.build()
|
|
|
|
.build()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
search_impl(doc, view, &contents, ®ex, movement, direction);
|
|
|
|
search_impl(doc, view, &contents, ®ex, movement, direction, scrolloff);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
// get around warning `mutable_borrow_reservation_conflict`
|
|
|
|
// get around warning `mutable_borrow_reservation_conflict`
|
|
|
|
// which will be a hard error in the future
|
|
|
|
// which will be a hard error in the future
|
|
|
|