Skip to content

Commit 6fcfbbd

Browse files
committed
Word movement select from first range
3w currently selects the 3rd word, this changes the behavior to select all 3 words rather than just the last.
1 parent 4044c70 commit 6fcfbbd

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

helix-core/src/movement.rs

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,14 @@ fn word_move(slice: RopeSlice, range: Range, count: usize, target: WordMotionTar
140140
};
141141

142142
// 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, _| {
144147
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)
146151
}
147152

148153
// ---- util ------------
@@ -579,11 +584,11 @@ mod test {
579584
]),
580585
("Multiple motions at once resolve correctly",
581586
vec![
582-
(3, Range::new(0, 0), Range::new(17, 20)),
587+
(3, Range::new(0, 0), Range::new(0, 20)),
583588
]),
584589
("Excessive motions are performed partially",
585590
vec![
586-
(999, Range::new(0, 0), Range::new(32, 41)),
591+
(999, Range::new(0, 0), Range::new(0, 41)),
587592
]),
588593
("", // Edge case of moving forward in empty string
589594
vec![
@@ -663,11 +668,11 @@ mod test {
663668
]),
664669
("Multiple motions at once resolve correctly",
665670
vec![
666-
(3, Range::new(0, 0), Range::new(17, 20)),
671+
(3, Range::new(0, 0), Range::new(0, 20)),
667672
]),
668673
("Excessive motions are performed partially",
669674
vec![
670-
(999, Range::new(0, 0), Range::new(32, 41)),
675+
(999, Range::new(0, 0), Range::new(0, 41)),
671676
]),
672677
("", // Edge case of moving forward in empty string
673678
vec![
@@ -748,11 +753,11 @@ mod test {
748753
]),
749754
("Multiple motions at once resolve correctly",
750755
vec![
751-
(3, Range::new(18, 18), Range::new(9, 0)),
756+
(3, Range::new(18, 18), Range::new(19, 0)),
752757
]),
753758
("Excessive motions are performed partially",
754759
vec![
755-
(999, Range::new(40, 40), Range::new(10, 0)),
760+
(999, Range::new(40, 40), Range::new(41, 0)),
756761
]),
757762
("", // Edge case of moving backwards in empty string
758763
vec![
@@ -845,11 +850,11 @@ mod test {
845850
),
846851
(
847852
"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))],
849854
),
850855
(
851856
"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))],
853858
),
854859
(
855860
"", // Edge case of moving backwards in empty string
@@ -929,11 +934,11 @@ mod test {
929934
]),
930935
("Multiple motions at once resolve correctly",
931936
vec![
932-
(3, Range::new(0, 0), Range::new(16, 19)),
937+
(3, Range::new(0, 0), Range::new(0, 19)),
933938
]),
934939
("Excessive motions are performed partially",
935940
vec![
936-
(999, Range::new(0, 0), Range::new(31, 41)),
941+
(999, Range::new(0, 0), Range::new(0, 41)),
937942
]),
938943
("", // Edge case of moving forward in empty string
939944
vec![
@@ -1011,11 +1016,11 @@ mod test {
10111016
]),
10121017
("Multiple motions at once resolve correctly",
10131018
vec![
1014-
(3, Range::new(24, 24), Range::new(16, 8)),
1019+
(3, Range::new(24, 24), Range::new(24, 8)),
10151020
]),
10161021
("Excessive motions are performed partially",
10171022
vec![
1018-
(999, Range::new(40, 40), Range::new(9, 0)),
1023+
(999, Range::new(40, 40), Range::new(41, 0)),
10191024
]),
10201025
("", // Edge case of moving backwards in empty string
10211026
vec![
@@ -1093,11 +1098,11 @@ mod test {
10931098
]),
10941099
("Multiple motions at once resolve correctly",
10951100
vec![
1096-
(3, Range::new(0, 0), Range::new(16, 19)),
1101+
(3, Range::new(0, 0), Range::new(0, 19)),
10971102
]),
10981103
("Excessive motions are performed partially",
10991104
vec![
1100-
(999, Range::new(0, 0), Range::new(31, 41)),
1105+
(999, Range::new(0, 0), Range::new(0, 41)),
11011106
]),
11021107
("", // Edge case of moving forward in empty string
11031108
vec![

0 commit comments

Comments
 (0)