From 0ee3ccac920d3871049b54f2235cb033d3de0499 Mon Sep 17 00:00:00 2001 From: kraem Date: Wed, 15 Sep 2021 11:26:01 +0200 Subject: [PATCH] helix-term: enable smartcase search by default --- helix-term/src/commands.rs | 5 +++-- helix-term/src/ui/mod.rs | 5 ++++- helix-view/src/editor.rs | 3 +++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index c5409494a8598..e8baa1e50e439 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -5,7 +5,7 @@ use helix_core::{ match_brackets, movement::{self, Direction}, object, pos_at_coords, - regex::{self, Regex}, + regex::{self, Regex, RegexBuilder}, register::Register, search, selection, surround, textobject, LineEnding, Position, Range, Rope, RopeGraphemes, RopeSlice, Selection, SmallVec, Tendril, Transaction, @@ -1154,7 +1154,8 @@ fn search_next_impl(cx: &mut Context, extend: bool) { if let Some(query) = registers.read('/') { let query = query.last().unwrap(); let contents = doc.text().slice(..).to_string(); - let regex = Regex::new(query).unwrap(); + let case_insensitive = if cx.editor.config.smartcase { query.to_owned() == query.to_lowercase() } else { false }; + let regex = RegexBuilder::new(query).case_insensitive(case_insensitive).build().expect("unable to build regex"); search_impl(doc, view, &contents, ®ex, extend); } } diff --git a/helix-term/src/ui/mod.rs b/helix-term/src/ui/mod.rs index 07eef3525d879..ecbbbe628e5ba 100644 --- a/helix-term/src/ui/mod.rs +++ b/helix-term/src/ui/mod.rs @@ -20,6 +20,7 @@ pub use spinner::{ProgressSpinners, Spinner}; pub use text::Text; use helix_core::regex::Regex; +use helix_core::regex::RegexBuilder; use helix_view::{Document, Editor, View}; use std::path::PathBuf; @@ -53,7 +54,9 @@ pub fn regex_prompt( return; } - match Regex::new(input) { + let case_insensitive = if cx.editor.config.smartcase { input == input.to_lowercase() } else { false }; + + match RegexBuilder::new(input).case_insensitive(case_insensitive).build() { Ok(regex) => { let (view, doc) = current!(cx.editor); diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index a3d0d0323fcc4..849bfe7d5221e 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -39,6 +39,8 @@ pub struct Config { pub line_number: LineNumber, /// Middle click paste support. Defaults to true pub middle_click_paste: bool, + /// Smartcase: Case insensitive searching unless pattern has upper case character. Defaults to true. + pub smartcase: bool, } #[derive(Debug, Clone, PartialEq, Eq, Deserialize)] @@ -64,6 +66,7 @@ impl Default for Config { }, line_number: LineNumber::Absolute, middle_click_paste: true, + smartcase: true, } } }