commands: add * as selection search.

pull/8/head
Blaž Hrastnik 4 years ago
parent 61ce2c9cfe
commit 33c67f1388

@ -120,7 +120,7 @@ impl Range {
// groupAt // groupAt
#[inline] #[inline]
pub fn fragment<'a>(&'a self, text: RopeSlice<'a>) -> Cow<'a, str> { pub fn fragment<'a, 'b: 'a>(&'a self, text: RopeSlice<'b>) -> Cow<'b, str> {
Cow::from(text.slice(self.from()..self.to() + 1)) Cow::from(text.slice(self.from()..self.to() + 1))
} }
} }

@ -1,7 +1,7 @@
use helix_core::{ use helix_core::{
comment, graphemes, comment, graphemes,
indent::TAB_WIDTH, indent::TAB_WIDTH,
regex::Regex, regex::{self, Regex},
register, selection, register, selection,
state::{Direction, Granularity, State}, state::{Direction, Granularity, State},
ChangeSet, Range, Selection, Tendril, Transaction, ChangeSet, Range, Selection, Tendril, Transaction,
@ -412,6 +412,15 @@ pub fn search_next(cx: &mut Context) {
} }
} }
pub fn search_selection(cx: &mut Context) {
let doc = cx.doc();
let contents = doc.text().slice(..);
let query = doc.selection().primary().fragment(contents);
let regex = regex::escape(&query);
register::set('\\', vec![regex]);
search_next(cx);
}
// TODO: N -> search_prev // TODO: N -> search_prev
// need to loop around buffer also and show a message // need to loop around buffer also and show a message
// same for no matches // same for no matches

@ -170,6 +170,7 @@ pub fn default() -> Keymaps {
vec![key!('x')] => commands::select_line, vec![key!('x')] => commands::select_line,
vec![key!('/')] => commands::search, vec![key!('/')] => commands::search,
vec![key!('n')] => commands::search_next, vec![key!('n')] => commands::search_next,
vec![key!('*')] => commands::search_selection,
vec![key!('u')] => commands::undo, vec![key!('u')] => commands::undo,
vec![shift!('U')] => commands::redo, vec![shift!('U')] => commands::redo,
vec![key!('y')] => commands::yank, vec![key!('y')] => commands::yank,

Loading…
Cancel
Save