From 900ebaf78f7340dbd9a3a818f284a52b71621f60 Mon Sep 17 00:00:00 2001 From: Z YS <202330452442@mail.scut.edu.cn> Date: Thu, 21 Nov 2024 12:06:43 +0000 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E4=B8=80=E6=AD=A5=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=A7=BB=E5=8A=A8=E5=BC=95=E8=B5=B7=E7=9A=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/application/handler/mod.rs | 2 +- src/application/handler/search.rs | 2 +- src/application/mode/mod.rs | 4 ++-- src/application/mode/search.rs | 28 +++++++++++++++++----------- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/application/handler/mod.rs b/src/application/handler/mod.rs index d58c4fa..65ffb92 100644 --- a/src/application/handler/mod.rs +++ b/src/application/handler/mod.rs @@ -9,8 +9,8 @@ mod cursor; mod delete; mod insert; mod monitor; -mod search; mod normal; +mod search; mod workspace; pub fn handle_map() -> HashMap<&'static str, fn(&mut Application) -> Result<()>> { diff --git a/src/application/handler/search.rs b/src/application/handler/search.rs index c1e9f28..08661dd 100644 --- a/src/application/handler/search.rs +++ b/src/application/handler/search.rs @@ -1,8 +1,8 @@ use crate::application::mode::ModeData; use crate::application::Application; use crate::errors::*; -use crate::util::{position::Position, range::Range}; use crossterm::event::KeyCode; +use held_core::utils::{position::Position, range::Range}; pub fn exec_search(app: &mut Application) -> Result<()> { if let ModeData::Search(ref mut search_data) = app.mode { diff --git a/src/application/mode/mod.rs b/src/application/mode/mod.rs index 53a98b7..5a42c85 100644 --- a/src/application/mode/mod.rs +++ b/src/application/mode/mod.rs @@ -19,13 +19,13 @@ use super::handler::handle_map; use super::Application; pub mod command; -pub mod motion; pub mod delete; pub mod error; mod insert; +pub mod motion; pub mod normal; -pub mod workspace; pub mod search; +pub mod workspace; pub enum ModeData { Normal, diff --git a/src/application/mode/search.rs b/src/application/mode/search.rs index 3bc28e2..852cd49 100644 --- a/src/application/mode/search.rs +++ b/src/application/mode/search.rs @@ -1,12 +1,11 @@ use super::ModeRenderer; -use crate::util::range::Range; use crate::{ errors::*, - view::{ - colors::colors::Colors, - status_data::{buffer_status_data, StatusLineData}, - style::CharStyle, - }, + view::status_data::{buffer_status_data, StatusLineData}, +}; +use held_core::{ + utils::range::Range, + view::{colors::Colors, style::CharStyle}, }; pub(super) struct SearchRenderer; @@ -24,12 +23,19 @@ impl ModeRenderer for SearchRenderer { if let super::ModeData::Search(ref search_data) = _mode { let highlight_search_string = search_data.search_result.clone(); - let highlight_search_string_slice: Option<&[Range]> = + let collected_ranges: Vec<(Range, CharStyle, Colors)> = if !highlight_search_string.is_empty() { - Some( - &highlight_search_string[search_data.search_result_index - ..search_data.search_result_index + 1], - ) + highlight_search_string + .iter() + .map(|range| (range.clone(), CharStyle::Bold, Colors::Inverted)) + .collect() + } else { + Vec::new() + }; + + let highlight_search_string_slice: Option<&[(Range, CharStyle, Colors)]> = + if !collected_ranges.is_empty() { + Some(collected_ranges.as_slice()) } else { None };