Skip to content

Commit

Permalink
Add pseudo_pending for t/T/f/F (helix-editor#4062)
Browse files Browse the repository at this point in the history
  • Loading branch information
mbStavola authored and Shekhinah Memmel committed Dec 11, 2022
1 parent f65d421 commit fda5623
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions helix-term/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1089,18 +1089,27 @@ fn extend_next_long_word_end(cx: &mut Context) {
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)
where
fn will_find_char<F>(
cx: &mut Context,
search_fn: F,
inclusive: bool,
extend: bool,
pseudo_pending: &str,
) where
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.
// Would be nice to carry over.
let count = cx.count();

cx.editor.pseudo_pending = Some(pseudo_pending.to_string());

// need to wait for next key
// 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.
cx.on_next_key(move |cx, event| {
cx.editor.pseudo_pending = None;

let ch = match event {
KeyEvent {
code: KeyCode::Enter,
Expand Down Expand Up @@ -1203,35 +1212,35 @@ fn find_prev_char_impl(
}

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) {
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) {
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) {
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) {
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) {
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) {
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) {
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) {
Expand Down

0 comments on commit fda5623

Please sign in to comment.