helix: Fix line select with empty first line (#48026)
Josh Robson Chase
,
Jakub Konka
, and
Lena Falk
created
Release Notes:
- Fixed `HelixSelectLine` with an empty first line and a pre-existing
selection.
---------
Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
Co-authored-by: Lena Falk <lena@zed.dev>
@@ -714,7 +714,11 @@ impl Vim {
// Check if cursor is on empty line by checking first character
let line_start_offset = buffer_snapshot.point_to_offset(Point::new(start_row, 0));
let first_char = buffer_snapshot.chars_at(line_start_offset).next();
- let extra_line = if first_char == Some('\n') { 1 } else { 0 };
+ let extra_line = if first_char == Some('\n') && selection.is_empty() {
+ 1
+ } else {
+ 0
+ };
let end_row = current_end_row + count as u32 + extra_line;
@@ -1335,7 +1339,9 @@ mod test {
line one
ˇ
line three
- line four"},
+ line four
+ line five
+ line six"},
Mode::HelixNormal,
);
cx.simulate_keystrokes("x");
@@ -1344,7 +1350,22 @@ mod test {
line one
«
line three
- ˇ»line four"},
+ ˇ»line four
+ line five
+ line six"},
+ Mode::HelixNormal,
+ );
+
+ // Another x should only select the next line
+ cx.simulate_keystrokes("x");
+ cx.assert_state(
+ indoc! {"
+ line one
+ «
+ line three
+ line four
+ ˇ»line five
+ line six"},
Mode::HelixNormal,
);