mirror of https://github.com/helix-editor/helix
Incorporate long word commands into keymap
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…
Reference in New Issue