on master help sign in
Add commands that extends to long words (#706)
07fe4a6Kangwook Lee (이강욱)
helix-term/src/commands.rs+42
@@ -180,6 +180,9 @@ impl Command {
180 move_next_long_word_end, "Move to end of next long word",
180 move_next_long_word_end, "Move to end of next long word",
181 extend_next_word_start, "Extend to beginning of next word",
181 extend_next_word_start, "Extend to beginning of next word",
182 extend_prev_word_start, "Extend to beginning of previous word",
182 extend_prev_word_start, "Extend to beginning of previous word",
183+ extend_next_long_word_start, "Extend to beginning of next long word",
184+ extend_prev_long_word_start, "Extend to beginning of previous long word",
185+ extend_next_long_word_end, "Extend to end of next long word",
183 extend_next_word_end, "Extend to end of next word",
186 extend_next_word_end, "Extend to end of next word",
184 find_till_char, "Move till next occurance of char",
187 find_till_char, "Move till next occurance of char",
185 find_next_char, "Move to next occurance of char",
188 find_next_char, "Move to next occurance of char",
@@ -622,6 +625,45 @@ fn extend_next_word_end(cx: &mut Context) {
622 doc.set_selection(view.id, selection);
625 doc.set_selection(view.id, selection);
623}
626}
624
627
628+fn extend_next_long_word_start(cx: &mut Context) {
629+ let count = cx.count();
630+ let (view, doc) = current!(cx.editor);
631+ let text = doc.text().slice(..);
632+
633+ let selection = doc.selection(view.id).clone().transform(|range| {
634+ let word = movement::move_next_long_word_start(text, range, count);
635+ let pos = word.cursor(text);
636+ range.put_cursor(text, pos, true)
637+ });
638+ doc.set_selection(view.id, selection);
639+}
640+
641+fn extend_prev_long_word_start(cx: &mut Context) {
642+ let count = cx.count();
643+ let (view, doc) = current!(cx.editor);
644+ let text = doc.text().slice(..);
645+
646+ let selection = doc.selection(view.id).clone().transform(|range| {
647+ let word = movement::move_prev_long_word_start(text, range, count);
648+ let pos = word.cursor(text);
649+ range.put_cursor(text, pos, true)
650+ });
651+ doc.set_selection(view.id, selection);
652+}
653+
654+fn extend_next_long_word_end(cx: &mut Context) {
655+ let count = cx.count();
656+ let (view, doc) = current!(cx.editor);
657+ let text = doc.text().slice(..);
658+
659+ let selection = doc.selection(view.id).clone().transform(|range| {
660+ let word = movement::move_next_long_word_end(text, range, count);
661+ let pos = word.cursor(text);
662+ range.put_cursor(text, pos, true)
663+ });
664+ doc.set_selection(view.id, selection);
665+}
666+
625#[inline]
667#[inline]
626fn find_char_impl<F>(cx: &mut Context, search_fn: F, inclusive: bool, extend: bool)
668fn find_char_impl<F>(cx: &mut Context, search_fn: F, inclusive: bool, extend: bool)
627where
669where
helix-term/src/keymap.rs+3
@@ -527,6 +527,9 @@ impl Default for Keymaps {
527 "w" => extend_next_word_start,
527 "w" => extend_next_word_start,
528 "b" => extend_prev_word_start,
528 "b" => extend_prev_word_start,
529 "e" => extend_next_word_end,
529 "e" => extend_next_word_end,
530+ "W" => extend_next_long_word_start,
531+ "B" => extend_prev_long_word_start,
532+ "E" => extend_next_long_word_end,
530
533
531 "t" => extend_till_char,
534 "t" => extend_till_char,
532 "f" => extend_next_char,
535 "f" => extend_next_char,