mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 17:36:19 +04:00
Make editor remember the latest search register (#5244)
This commit is contained in:
parent
085706e0cd
commit
3a162e2bef
@ -1895,7 +1895,9 @@ fn searcher(cx: &mut Context, direction: Direction) {
|
|||||||
.collect()
|
.collect()
|
||||||
},
|
},
|
||||||
move |editor, regex, event| {
|
move |editor, regex, event| {
|
||||||
if !matches!(event, PromptEvent::Update | PromptEvent::Validate) {
|
if event == PromptEvent::Validate {
|
||||||
|
editor.registers.last_search_register = reg;
|
||||||
|
} else if event != PromptEvent::Update {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
search_impl(
|
search_impl(
|
||||||
@ -1914,7 +1916,9 @@ 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 count = cx.count();
|
let count = cx.count();
|
||||||
let register = cx.register.unwrap_or('/');
|
let register = cx
|
||||||
|
.register
|
||||||
|
.unwrap_or(cx.editor.registers.last_search_register);
|
||||||
let config = cx.editor.config();
|
let config = cx.editor.config();
|
||||||
let scrolloff = config.scrolloff;
|
let scrolloff = config.scrolloff;
|
||||||
if let Some(query) = cx.editor.registers.first(register, cx.editor) {
|
if let Some(query) = cx.editor.registers.first(register, cx.editor) {
|
||||||
@ -1982,13 +1986,21 @@ fn search_selection(cx: &mut Context) {
|
|||||||
|
|
||||||
let msg = format!("register '{}' set to '{}'", register, ®ex);
|
let msg = format!("register '{}' set to '{}'", register, ®ex);
|
||||||
match cx.editor.registers.push(register, regex) {
|
match cx.editor.registers.push(register, regex) {
|
||||||
Ok(_) => cx.editor.set_status(msg),
|
Ok(_) => {
|
||||||
|
cx.editor.registers.last_search_register = register;
|
||||||
|
cx.editor.set_status(msg)
|
||||||
|
}
|
||||||
Err(err) => cx.editor.set_error(err.to_string()),
|
Err(err) => cx.editor.set_error(err.to_string()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn make_search_word_bounded(cx: &mut Context) {
|
fn make_search_word_bounded(cx: &mut Context) {
|
||||||
let register = cx.register.unwrap_or('/');
|
// Defaults to the active search register instead `/` to be more ergonomic assuming most people
|
||||||
|
// would use this command following `search_selection`. This avoids selecting the register
|
||||||
|
// twice.
|
||||||
|
let register = cx
|
||||||
|
.register
|
||||||
|
.unwrap_or(cx.editor.registers.last_search_register);
|
||||||
let regex = match cx.editor.registers.first(register, cx.editor) {
|
let regex = match cx.editor.registers.first(register, cx.editor) {
|
||||||
Some(regex) => regex,
|
Some(regex) => regex,
|
||||||
None => return,
|
None => return,
|
||||||
@ -2014,7 +2026,10 @@ fn make_search_word_bounded(cx: &mut Context) {
|
|||||||
|
|
||||||
let msg = format!("register '{}' set to '{}'", register, &new_regex);
|
let msg = format!("register '{}' set to '{}'", register, &new_regex);
|
||||||
match cx.editor.registers.push(register, new_regex) {
|
match cx.editor.registers.push(register, new_regex) {
|
||||||
Ok(_) => cx.editor.set_status(msg),
|
Ok(_) => {
|
||||||
|
cx.editor.registers.last_search_register = register;
|
||||||
|
cx.editor.set_status(msg)
|
||||||
|
}
|
||||||
Err(err) => cx.editor.set_error(err.to_string()),
|
Err(err) => cx.editor.set_error(err.to_string()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2078,6 +2093,7 @@ fn format(&self, current_path: &Self::Data) -> Row {
|
|||||||
if event != PromptEvent::Validate {
|
if event != PromptEvent::Validate {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
editor.registers.last_search_register = reg;
|
||||||
|
|
||||||
let documents: Vec<_> = editor
|
let documents: Vec<_> = editor
|
||||||
.documents()
|
.documents()
|
||||||
|
@ -29,6 +29,7 @@ pub struct Registers {
|
|||||||
/// efficiently prepend new values in `Registers::push`.
|
/// efficiently prepend new values in `Registers::push`.
|
||||||
inner: HashMap<char, Vec<String>>,
|
inner: HashMap<char, Vec<String>>,
|
||||||
clipboard_provider: Box<dyn ClipboardProvider>,
|
clipboard_provider: Box<dyn ClipboardProvider>,
|
||||||
|
pub last_search_register: char,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Registers {
|
impl Default for Registers {
|
||||||
@ -36,6 +37,7 @@ fn default() -> Self {
|
|||||||
Self {
|
Self {
|
||||||
inner: Default::default(),
|
inner: Default::default(),
|
||||||
clipboard_provider: get_clipboard_provider(),
|
clipboard_provider: get_clipboard_provider(),
|
||||||
|
last_search_register: '/',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user