summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helix-core/src/selection.rs2
-rw-r--r--helix-term/src/commands.rs11
-rw-r--r--helix-term/src/keymap.rs1
3 files changed, 12 insertions, 2 deletions
diff --git a/helix-core/src/selection.rs b/helix-core/src/selection.rs
index d3ac045f..edad81a7 100644
--- a/helix-core/src/selection.rs
+++ b/helix-core/src/selection.rs
@@ -120,7 +120,7 @@ impl Range {
// groupAt
#[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))
}
}
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index b6d8d818..c048ff9a 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -1,7 +1,7 @@
use helix_core::{
comment, graphemes,
indent::TAB_WIDTH,
- regex::Regex,
+ regex::{self, Regex},
register, selection,
state::{Direction, Granularity, State},
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
// need to loop around buffer also and show a message
// same for no matches
diff --git a/helix-term/src/keymap.rs b/helix-term/src/keymap.rs
index 124456c9..69c8e48c 100644
--- a/helix-term/src/keymap.rs
+++ b/helix-term/src/keymap.rs
@@ -170,6 +170,7 @@ pub fn default() -> Keymaps {
vec![key!('x')] => commands::select_line,
vec![key!('/')] => commands::search,
vec![key!('n')] => commands::search_next,
+ vec![key!('*')] => commands::search_selection,
vec![key!('u')] => commands::undo,
vec![shift!('U')] => commands::redo,
vec![key!('y')] => commands::yank,