Incorporate long word commands into keymap

pull/392/head
PabloMansanet 3 years ago committed by Blaž Hrastnik
parent 73572b7780
commit de8745aea7

@ -194,7 +194,9 @@ impl CharHelpers for Chars<'_> {
// Index advancement also depends on the direction. // Index advancement also depends on the direction.
let advance: &dyn Fn(&mut usize) = match target { let advance: &dyn Fn(&mut usize) = match target {
WordMotionTarget::PrevWordStart | WordMotionTarget::PrevLongWordStart => &|u| *u = u.saturating_sub(1), WordMotionTarget::PrevWordStart | WordMotionTarget::PrevLongWordStart => {
&|u| *u = u.saturating_sub(1)
}
_ => &|u| *u += 1, _ => &|u| *u += 1,
}; };
@ -254,9 +256,9 @@ fn is_word_boundary(a: char, b: char) -> bool {
fn is_long_word_boundary(a: char, b: char) -> bool { fn is_long_word_boundary(a: char, b: char) -> bool {
match (categorize_char(a), categorize_char(b)) { match (categorize_char(a), categorize_char(b)) {
(CharCategory::Word, CharCategory::Punctuation) (CharCategory::Word, CharCategory::Punctuation)
| (CharCategory::Punctuation, CharCategory::Word) => false, | (CharCategory::Punctuation, CharCategory::Word) => false,
(a, b) if a != b => true, (a, b) if a != b => true,
_ => false _ => false,
} }
} }

@ -158,6 +158,9 @@ impl Command {
move_next_word_start, move_next_word_start,
move_prev_word_start, move_prev_word_start,
move_next_word_end, move_next_word_end,
move_next_long_word_start,
move_prev_long_word_start,
move_next_long_word_end,
move_file_start, move_file_start,
move_file_end, move_file_end,
extend_next_word_start, extend_next_word_start,
@ -434,6 +437,42 @@ fn move_next_word_end(cx: &mut Context) {
doc.set_selection(view.id, selection); doc.set_selection(view.id, selection);
} }
fn move_next_long_word_start(cx: &mut Context) {
let count = cx.count();
let (view, doc) = current!(cx.editor);
let text = doc.text().slice(..);
let selection = doc
.selection(view.id)
.transform(|range| movement::move_next_long_word_start(text, range, count));
doc.set_selection(view.id, selection);
}
fn move_prev_long_word_start(cx: &mut Context) {
let count = cx.count();
let (view, doc) = current!(cx.editor);
let text = doc.text().slice(..);
let selection = doc
.selection(view.id)
.transform(|range| movement::move_prev_long_word_start(text, range, count));
doc.set_selection(view.id, selection);
}
fn move_next_long_word_end(cx: &mut Context) {
let count = cx.count();
let (view, doc) = current!(cx.editor);
let text = doc.text().slice(..);
let selection = doc
.selection(view.id)
.transform(|range| movement::move_next_long_word_end(text, range, count));
doc.set_selection(view.id, selection);
}
fn move_file_start(cx: &mut Context) { fn move_file_start(cx: &mut Context) {
push_jump(cx.editor); push_jump(cx.editor);
let (view, doc) = current!(cx.editor); let (view, doc) = current!(cx.editor);

@ -186,6 +186,10 @@ impl Default for Keymaps {
key!('b') => Command::move_prev_word_start, key!('b') => Command::move_prev_word_start,
key!('e') => Command::move_next_word_end, key!('e') => Command::move_next_word_end,
key!('W') => Command::move_next_long_word_start,
key!('B') => Command::move_prev_long_word_start,
key!('E') => Command::move_next_long_word_end,
key!('v') => Command::select_mode, key!('v') => Command::select_mode,
key!('g') => Command::goto_mode, key!('g') => Command::goto_mode,
key!(':') => Command::command_mode, key!(':') => Command::command_mode,

Loading…
Cancel
Save