summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-03-19 09:01:08 +0000
committerBlaž Hrastnik2021-03-22 04:53:43 +0000
commit42d07b0621f034049ba3872122144ea9e69092eb (patch)
treea45fa524ee27409fa01357a0973dbbd4106fed5c
parentbf95ee27aa3c9f137e34f30a01f25e4930a8b1bb (diff)
Implement replace command (r<key>).
-rw-r--r--helix-term/src/commands.rs23
-rw-r--r--helix-term/src/keymap.rs2
2 files changed, 25 insertions, 0 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 3c337c50..fc98f712 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -380,6 +380,29 @@ pub fn extend_prev_char(cx: &mut Context) {
)
}
+pub fn replace(cx: &mut Context) {
+ // need to wait for next key
+ cx.on_next_key(move |cx, event| {
+ if let KeyEvent {
+ code: KeyCode::Char(ch),
+ ..
+ } = event
+ {
+ let text = Tendril::from_char(ch);
+
+ let mut doc = cx.doc();
+
+ let transaction =
+ Transaction::change_by_selection(doc.text(), doc.selection(), |range| {
+ (range.from(), range.to() + 1, Some(text.clone()))
+ });
+
+ doc.apply(&transaction);
+ doc.append_changes_to_history();
+ }
+ })
+}
+
fn scroll(view: &mut View, offset: usize, direction: Direction) {
use Direction::*;
// we use short lived borrows since view's methods read from doc too
diff --git a/helix-term/src/keymap.rs b/helix-term/src/keymap.rs
index d9fe348f..5a39b774 100644
--- a/helix-term/src/keymap.rs
+++ b/helix-term/src/keymap.rs
@@ -141,6 +141,8 @@ pub fn default() -> Keymaps {
shift!('T') => commands::till_prev_char,
shift!('F') => commands::find_prev_char,
// and matching set for select mode (extend)
+ //
+ key!('r') => commands::replace,
key!('0') => commands::move_line_start,
key!('$') => commands::move_line_end,