on master help sign in
Refactor {move,extend}_word_* commands
33ce877Gokul Soumya
helix-term/src/commands.rs+28−99
@@ -503,7 +503,10 @@ fn goto_window_bottom(cx: &mut Context) {
503 goto_window(cx, Align::Bottom)
503 goto_window(cx, Align::Bottom)
504}
504}
505
505
506−fn move_next_word_start(cx: &mut Context) {
506+fn move_word_impl<F>(cx: &mut Context, move_fn: F)
507+where
508+ F: Fn(RopeSlice, Range, usize) -> Range,
509+{
507 let count = cx.count();
510 let count = cx.count();
508 let (view, doc) = current!(cx.editor);
511 let (view, doc) = current!(cx.editor);
509 let text = doc.text().slice(..);
512 let text = doc.text().slice(..);
@@ -511,68 +514,32 @@ fn move_next_word_start(cx: &mut Context) {
511 let selection = doc
514 let selection = doc
512 .selection(view.id)
515 .selection(view.id)
513 .clone()
516 .clone()
514− .transform(|range| movement::move_next_word_start(text, range, count));
517+ .transform(|range| move_fn(text, range, count));
515 doc.set_selection(view.id, selection);
518 doc.set_selection(view.id, selection);
516}
519}
517
520
518−fn move_prev_word_start(cx: &mut Context) {
521+fn move_next_word_start(cx: &mut Context) {
519− let count = cx.count();
522+ move_word_impl(cx, movement::move_next_word_start)
520− let (view, doc) = current!(cx.editor);
523+}
521− let text = doc.text().slice(..);
522
524
523− let selection = doc
525+fn move_prev_word_start(cx: &mut Context) {
524− .selection(view.id)
525− .clone()
526− .transform(|range| movement::move_prev_word_start(text, range, count));
526+ move_word_impl(cx, movement::move_prev_word_start)
527− doc.set_selection(view.id, selection);
528}
527}
529
528
530fn move_next_word_end(cx: &mut Context) {
529fn move_next_word_end(cx: &mut Context) {
531− let count = cx.count();
532− let (view, doc) = current!(cx.editor);
533− let text = doc.text().slice(..);
534−
535− let selection = doc
536− .selection(view.id)
537− .clone()
538− .transform(|range| movement::move_next_word_end(text, range, count));
530+ move_word_impl(cx, movement::move_next_word_end)
539− doc.set_selection(view.id, selection);
540}
531}
541
532
542fn move_next_long_word_start(cx: &mut Context) {
533fn move_next_long_word_start(cx: &mut Context) {
543− let count = cx.count();
544− let (view, doc) = current!(cx.editor);
545− let text = doc.text().slice(..);
546−
547− let selection = doc
548− .selection(view.id)
549− .clone()
550− .transform(|range| movement::move_next_long_word_start(text, range, count));
534+ move_word_impl(cx, movement::move_next_long_word_start)
551− doc.set_selection(view.id, selection);
552}
535}
553
536
554fn move_prev_long_word_start(cx: &mut Context) {
537fn move_prev_long_word_start(cx: &mut Context) {
555− let count = cx.count();
556− let (view, doc) = current!(cx.editor);
557− let text = doc.text().slice(..);
558−
559− let selection = doc
560− .selection(view.id)
561− .clone()
562− .transform(|range| movement::move_prev_long_word_start(text, range, count));
538+ move_word_impl(cx, movement::move_prev_long_word_start)
563− doc.set_selection(view.id, selection);
564}
539}
565
540
566fn move_next_long_word_end(cx: &mut Context) {
541fn move_next_long_word_end(cx: &mut Context) {
567− let count = cx.count();
568− let (view, doc) = current!(cx.editor);
569− let text = doc.text().slice(..);
570−
571− let selection = doc
572− .selection(view.id)
573− .clone()
574− .transform(|range| movement::move_next_long_word_end(text, range, count));
542+ move_word_impl(cx, movement::move_next_long_word_end)
575− doc.set_selection(view.id, selection);
576}
543}
577
544
578fn goto_file_start(cx: &mut Context) {
545fn goto_file_start(cx: &mut Context) {
@@ -591,82 +558,44 @@ fn goto_file_end(cx: &mut Context) {
591 doc.set_selection(view.id, Selection::point(doc.text().len_chars()));
558 doc.set_selection(view.id, Selection::point(doc.text().len_chars()));
592}
559}
593
560
594−fn extend_next_word_start(cx: &mut Context) {
561+fn extend_word_impl<F>(cx: &mut Context, extend_fn: F)
562+where
563+ F: Fn(RopeSlice, Range, usize) -> Range,
564+{
595 let count = cx.count();
565 let count = cx.count();
596 let (view, doc) = current!(cx.editor);
566 let (view, doc) = current!(cx.editor);
597 let text = doc.text().slice(..);
567 let text = doc.text().slice(..);
598
568
599 let selection = doc.selection(view.id).clone().transform(|range| {
569 let selection = doc.selection(view.id).clone().transform(|range| {
600− let word = movement::move_next_word_start(text, range, count);
570+ let word = extend_fn(text, range, count);
601 let pos = word.cursor(text);
571 let pos = word.cursor(text);
602 range.put_cursor(text, pos, true)
572 range.put_cursor(text, pos, true)
603 });
573 });
604 doc.set_selection(view.id, selection);
574 doc.set_selection(view.id, selection);
605}
575}
606
576
607−fn extend_prev_word_start(cx: &mut Context) {
577+fn extend_next_word_start(cx: &mut Context) {
608− let count = cx.count();
578+ extend_word_impl(cx, movement::move_next_word_start)
609− let (view, doc) = current!(cx.editor);
579+}
610− let text = doc.text().slice(..);
611
580
612− let selection = doc.selection(view.id).clone().transform(|range| {
581+fn extend_prev_word_start(cx: &mut Context) {
613− let word = movement::move_prev_word_start(text, range, count);
582+ extend_word_impl(cx, movement::move_prev_word_start)
614− let pos = word.cursor(text);
615− range.put_cursor(text, pos, true)
616− });
617− doc.set_selection(view.id, selection);
618}
583}
619
584
620fn extend_next_word_end(cx: &mut Context) {
585fn extend_next_word_end(cx: &mut Context) {
621− let count = cx.count();
622− let (view, doc) = current!(cx.editor);
623− let text = doc.text().slice(..);
624−
625− let selection = doc.selection(view.id).clone().transform(|range| {
626− let word = movement::move_next_word_end(text, range, count);
586+ extend_word_impl(cx, movement::move_next_word_end)
627− let pos = word.cursor(text);
628− range.put_cursor(text, pos, true)
629− });
630− doc.set_selection(view.id, selection);
631}
587}
632
588
633fn extend_next_long_word_start(cx: &mut Context) {
589fn extend_next_long_word_start(cx: &mut Context) {
634− let count = cx.count();
635− let (view, doc) = current!(cx.editor);
636− let text = doc.text().slice(..);
637−
638− let selection = doc.selection(view.id).clone().transform(|range| {
639− let word = movement::move_next_long_word_start(text, range, count);
590+ extend_word_impl(cx, movement::move_next_long_word_start)
640− let pos = word.cursor(text);
641− range.put_cursor(text, pos, true)
642− });
643− doc.set_selection(view.id, selection);
644}
591}
645
592
646fn extend_prev_long_word_start(cx: &mut Context) {
593fn extend_prev_long_word_start(cx: &mut Context) {
647− let count = cx.count();
648− let (view, doc) = current!(cx.editor);
649− let text = doc.text().slice(..);
650−
651− let selection = doc.selection(view.id).clone().transform(|range| {
652− let word = movement::move_prev_long_word_start(text, range, count);
594+ extend_word_impl(cx, movement::move_prev_long_word_start)
653− let pos = word.cursor(text);
654− range.put_cursor(text, pos, true)
655− });
656− doc.set_selection(view.id, selection);
657}
595}
658
596
659fn extend_next_long_word_end(cx: &mut Context) {
597fn extend_next_long_word_end(cx: &mut Context) {
660− let count = cx.count();
661− let (view, doc) = current!(cx.editor);
662− let text = doc.text().slice(..);
663−
664− let selection = doc.selection(view.id).clone().transform(|range| {
665− let word = movement::move_next_long_word_end(text, range, count);
598+ extend_word_impl(cx, movement::move_next_long_word_end)
666− let pos = word.cursor(text);
667− range.put_cursor(text, pos, true)
668− });
669− doc.set_selection(view.id, selection);
670}
599}
671
600
672#[inline]
601#[inline]