Implement replace command (r<key>).

pull/11/head
Blaž Hrastnik 4 years ago
parent bf95ee27aa
commit 42d07b0621

@ -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) { fn scroll(view: &mut View, offset: usize, direction: Direction) {
use Direction::*; use Direction::*;
// we use short lived borrows since view's methods read from doc too // we use short lived borrows since view's methods read from doc too

@ -141,6 +141,8 @@ pub fn default() -> Keymaps {
shift!('T') => commands::till_prev_char, shift!('T') => commands::till_prev_char,
shift!('F') => commands::find_prev_char, shift!('F') => commands::find_prev_char,
// and matching set for select mode (extend) // and matching set for select mode (extend)
//
key!('r') => commands::replace,
key!('0') => commands::move_line_start, key!('0') => commands::move_line_start,
key!('$') => commands::move_line_end, key!('$') => commands::move_line_end,

Loading…
Cancel
Save