@@ -140,9 +140,14 @@ fn word_move(slice: RopeSlice, range: Range, count: usize, target: WordMotionTar
140
140
} ;
141
141
142
142
// Do the main work.
143
- ( 0 ..count) . fold ( start_range, |r, _| {
143
+ let first_range = slice
144
+ . chars_at ( start_range. head )
145
+ . range_to_target ( target, start_range) ;
146
+ let last_range = ( 1 ..count) . fold ( first_range, |r, _| {
144
147
slice. chars_at ( r. head ) . range_to_target ( target, r)
145
- } )
148
+ } ) ;
149
+ // Select from first range to last range rather than just the last range.
150
+ Range :: new ( first_range. anchor , last_range. head )
146
151
}
147
152
148
153
// ---- util ------------
@@ -579,11 +584,11 @@ mod test {
579
584
] ) ,
580
585
( "Multiple motions at once resolve correctly" ,
581
586
vec ! [
582
- ( 3 , Range :: new( 0 , 0 ) , Range :: new( 17 , 20 ) ) ,
587
+ ( 3 , Range :: new( 0 , 0 ) , Range :: new( 0 , 20 ) ) ,
583
588
] ) ,
584
589
( "Excessive motions are performed partially" ,
585
590
vec ! [
586
- ( 999 , Range :: new( 0 , 0 ) , Range :: new( 32 , 41 ) ) ,
591
+ ( 999 , Range :: new( 0 , 0 ) , Range :: new( 0 , 41 ) ) ,
587
592
] ) ,
588
593
( "" , // Edge case of moving forward in empty string
589
594
vec ! [
@@ -663,11 +668,11 @@ mod test {
663
668
] ) ,
664
669
( "Multiple motions at once resolve correctly" ,
665
670
vec ! [
666
- ( 3 , Range :: new( 0 , 0 ) , Range :: new( 17 , 20 ) ) ,
671
+ ( 3 , Range :: new( 0 , 0 ) , Range :: new( 0 , 20 ) ) ,
667
672
] ) ,
668
673
( "Excessive motions are performed partially" ,
669
674
vec ! [
670
- ( 999 , Range :: new( 0 , 0 ) , Range :: new( 32 , 41 ) ) ,
675
+ ( 999 , Range :: new( 0 , 0 ) , Range :: new( 0 , 41 ) ) ,
671
676
] ) ,
672
677
( "" , // Edge case of moving forward in empty string
673
678
vec ! [
@@ -748,11 +753,11 @@ mod test {
748
753
] ) ,
749
754
( "Multiple motions at once resolve correctly" ,
750
755
vec ! [
751
- ( 3 , Range :: new( 18 , 18 ) , Range :: new( 9 , 0 ) ) ,
756
+ ( 3 , Range :: new( 18 , 18 ) , Range :: new( 19 , 0 ) ) ,
752
757
] ) ,
753
758
( "Excessive motions are performed partially" ,
754
759
vec ! [
755
- ( 999 , Range :: new( 40 , 40 ) , Range :: new( 10 , 0 ) ) ,
760
+ ( 999 , Range :: new( 40 , 40 ) , Range :: new( 41 , 0 ) ) ,
756
761
] ) ,
757
762
( "" , // Edge case of moving backwards in empty string
758
763
vec ! [
@@ -845,11 +850,11 @@ mod test {
845
850
) ,
846
851
(
847
852
"Multiple motions at once resolve correctly" ,
848
- vec ! [ ( 3 , Range :: new( 19 , 19 ) , Range :: new( 9 , 0 ) ) ] ,
853
+ vec ! [ ( 3 , Range :: new( 19 , 19 ) , Range :: new( 20 , 0 ) ) ] ,
849
854
) ,
850
855
(
851
856
"Excessive motions are performed partially" ,
852
- vec ! [ ( 999 , Range :: new( 40 , 40 ) , Range :: new( 10 , 0 ) ) ] ,
857
+ vec ! [ ( 999 , Range :: new( 40 , 40 ) , Range :: new( 41 , 0 ) ) ] ,
853
858
) ,
854
859
(
855
860
"" , // Edge case of moving backwards in empty string
@@ -929,11 +934,11 @@ mod test {
929
934
] ) ,
930
935
( "Multiple motions at once resolve correctly" ,
931
936
vec ! [
932
- ( 3 , Range :: new( 0 , 0 ) , Range :: new( 16 , 19 ) ) ,
937
+ ( 3 , Range :: new( 0 , 0 ) , Range :: new( 0 , 19 ) ) ,
933
938
] ) ,
934
939
( "Excessive motions are performed partially" ,
935
940
vec ! [
936
- ( 999 , Range :: new( 0 , 0 ) , Range :: new( 31 , 41 ) ) ,
941
+ ( 999 , Range :: new( 0 , 0 ) , Range :: new( 0 , 41 ) ) ,
937
942
] ) ,
938
943
( "" , // Edge case of moving forward in empty string
939
944
vec ! [
@@ -1011,11 +1016,11 @@ mod test {
1011
1016
] ) ,
1012
1017
( "Multiple motions at once resolve correctly" ,
1013
1018
vec ! [
1014
- ( 3 , Range :: new( 24 , 24 ) , Range :: new( 16 , 8 ) ) ,
1019
+ ( 3 , Range :: new( 24 , 24 ) , Range :: new( 24 , 8 ) ) ,
1015
1020
] ) ,
1016
1021
( "Excessive motions are performed partially" ,
1017
1022
vec ! [
1018
- ( 999 , Range :: new( 40 , 40 ) , Range :: new( 9 , 0 ) ) ,
1023
+ ( 999 , Range :: new( 40 , 40 ) , Range :: new( 41 , 0 ) ) ,
1019
1024
] ) ,
1020
1025
( "" , // Edge case of moving backwards in empty string
1021
1026
vec ! [
@@ -1093,11 +1098,11 @@ mod test {
1093
1098
] ) ,
1094
1099
( "Multiple motions at once resolve correctly" ,
1095
1100
vec ! [
1096
- ( 3 , Range :: new( 0 , 0 ) , Range :: new( 16 , 19 ) ) ,
1101
+ ( 3 , Range :: new( 0 , 0 ) , Range :: new( 0 , 19 ) ) ,
1097
1102
] ) ,
1098
1103
( "Excessive motions are performed partially" ,
1099
1104
vec ! [
1100
- ( 999 , Range :: new( 0 , 0 ) , Range :: new( 31 , 41 ) ) ,
1105
+ ( 999 , Range :: new( 0 , 0 ) , Range :: new( 0 , 41 ) ) ,
1101
1106
] ) ,
1102
1107
( "" , // Edge case of moving forward in empty string
1103
1108
vec ! [
0 commit comments