use crate::EditorState;
use super::Execute;
#[derive(Clone, Debug, Copy)]
pub struct AppendCharToSearch(pub char);
impl Execute for AppendCharToSearch {
fn execute(&mut self, state: &mut EditorState) {
state.search.push_char(self.0);
state.search.trigger_search(&state.lines);
if let Some(index) = state.search.first() {
state.cursor = *index;
}
}
}
#[derive(Clone, Debug, Copy)]
pub struct RemoveCharFromSearch;
impl Execute for RemoveCharFromSearch {
fn execute(&mut self, state: &mut EditorState) {
state.search.remove_char();
state.search.trigger_search(&state.lines);
}
}
#[derive(Clone, Debug)]
pub struct FindFirst;
impl Execute for FindFirst {
fn execute(&mut self, state: &mut EditorState) {
if let Some(index) = state.search.first() {
state.cursor = *index;
}
}
}
#[derive(Clone, Debug)]
pub struct FindNext;
impl Execute for FindNext {
fn execute(&mut self, state: &mut EditorState) {
if let Some(index) = state.search.next() {
state.cursor = *index;
}
}
}
#[derive(Clone, Debug)]
pub struct FindPrevious;
impl Execute for FindPrevious {
fn execute(&mut self, state: &mut EditorState) {
if let Some(index) = state.search.previous() {
state.cursor = *index;
}
}
}
#[derive(Clone, Debug)]
pub struct SelectCurrentSearch;
impl Execute for SelectCurrentSearch {
fn execute(&mut self, state: &mut EditorState) {
if let Some(index) = state.search.current() {
state.cursor = *index;
}
}
}
#[derive(Clone, Debug)]
pub struct StartSearch;
impl Execute for StartSearch {
fn execute(&mut self, state: &mut EditorState) {
state.search.start(state.cursor);
}
}
#[derive(Clone, Debug)]
pub struct StopSearch;
impl Execute for StopSearch {
fn execute(&mut self, state: &mut EditorState) {
state.search.clear();
state.cursor = state.search.start_cursor;
}
}