Add pseudo_pending for t/T/f/F (#4062)

pull/4077/head
Matt Freitas-Stavola 2 years ago committed by GitHub
parent 8c2cc43017
commit 9d1793c45b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1086,18 +1086,27 @@ fn extend_next_long_word_end(cx: &mut Context) {
extend_word_impl(cx, movement::move_next_long_word_end) extend_word_impl(cx, movement::move_next_long_word_end)
} }
fn will_find_char<F>(cx: &mut Context, search_fn: F, inclusive: bool, extend: bool) fn will_find_char<F>(
where cx: &mut Context,
search_fn: F,
inclusive: bool,
extend: bool,
pseudo_pending: &str,
) where
F: Fn(RopeSlice, char, usize, usize, bool) -> Option<usize> + 'static, F: Fn(RopeSlice, char, usize, usize, bool) -> Option<usize> + 'static,
{ {
// TODO: count is reset to 1 before next key so we move it into the closure here. // TODO: count is reset to 1 before next key so we move it into the closure here.
// Would be nice to carry over. // Would be nice to carry over.
let count = cx.count(); let count = cx.count();
cx.editor.pseudo_pending = Some(pseudo_pending.to_string());
// need to wait for next key // need to wait for next key
// TODO: should this be done by grapheme rather than char? For example, // TODO: should this be done by grapheme rather than char? For example,
// we can't properly handle the line-ending CRLF case here in terms of char. // we can't properly handle the line-ending CRLF case here in terms of char.
cx.on_next_key(move |cx, event| { cx.on_next_key(move |cx, event| {
cx.editor.pseudo_pending = None;
let ch = match event { let ch = match event {
KeyEvent { KeyEvent {
code: KeyCode::Enter, code: KeyCode::Enter,
@ -1200,35 +1209,35 @@ fn find_prev_char_impl(
} }
fn find_till_char(cx: &mut Context) { fn find_till_char(cx: &mut Context) {
will_find_char(cx, find_next_char_impl, false, false) will_find_char(cx, find_next_char_impl, false, false, "t")
} }
fn find_next_char(cx: &mut Context) { fn find_next_char(cx: &mut Context) {
will_find_char(cx, find_next_char_impl, true, false) will_find_char(cx, find_next_char_impl, true, false, "f")
} }
fn extend_till_char(cx: &mut Context) { fn extend_till_char(cx: &mut Context) {
will_find_char(cx, find_next_char_impl, false, true) will_find_char(cx, find_next_char_impl, false, true, "t")
} }
fn extend_next_char(cx: &mut Context) { fn extend_next_char(cx: &mut Context) {
will_find_char(cx, find_next_char_impl, true, true) will_find_char(cx, find_next_char_impl, true, true, "f")
} }
fn till_prev_char(cx: &mut Context) { fn till_prev_char(cx: &mut Context) {
will_find_char(cx, find_prev_char_impl, false, false) will_find_char(cx, find_prev_char_impl, false, false, "T")
} }
fn find_prev_char(cx: &mut Context) { fn find_prev_char(cx: &mut Context) {
will_find_char(cx, find_prev_char_impl, true, false) will_find_char(cx, find_prev_char_impl, true, false, "F")
} }
fn extend_till_prev_char(cx: &mut Context) { fn extend_till_prev_char(cx: &mut Context) {
will_find_char(cx, find_prev_char_impl, false, true) will_find_char(cx, find_prev_char_impl, false, true, "T")
} }
fn extend_prev_char(cx: &mut Context) { fn extend_prev_char(cx: &mut Context) {
will_find_char(cx, find_prev_char_impl, true, true) will_find_char(cx, find_prev_char_impl, true, true, "F")
} }
fn repeat_last_motion(cx: &mut Context) { fn repeat_last_motion(cx: &mut Context) {

Loading…
Cancel
Save