added the line_end helper function
This commit is contained in:
parent
701eb0dd68
commit
8634e04a31
4 changed files with 13 additions and 22 deletions
|
@ -114,6 +114,6 @@ pub use state::State;
|
||||||
|
|
||||||
pub use line_ending::{
|
pub use line_ending::{
|
||||||
auto_detect_line_ending, get_line_ending, rope_slice_to_line_ending, LineEnding,
|
auto_detect_line_ending, get_line_ending, rope_slice_to_line_ending, LineEnding,
|
||||||
DEFAULT_LINE_ENDING,
|
DEFAULT_LINE_ENDING, line_end
|
||||||
};
|
};
|
||||||
pub use transaction::{Assoc, Change, ChangeSet, Operation, Transaction};
|
pub use transaction::{Assoc, Change, ChangeSet, Operation, Transaction};
|
||||||
|
|
|
@ -111,6 +111,12 @@ pub fn get_line_ending(line: &RopeSlice) -> Option<LineEnding> {
|
||||||
str_to_line_ending(g2).or_else(|| str_to_line_ending(g1))
|
str_to_line_ending(g2).or_else(|| str_to_line_ending(g1))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn line_end(slice: &RopeSlice, line: usize) -> usize {
|
||||||
|
slice.line_to_char(line + 1).saturating_sub(get_line_ending(&slice.line(line))
|
||||||
|
.map(|le| le.len_chars())
|
||||||
|
.unwrap_or(0))
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
pub const DEFAULT_LINE_ENDING: LineEnding = LineEnding::Crlf;
|
pub const DEFAULT_LINE_ENDING: LineEnding = LineEnding::Crlf;
|
||||||
#[cfg(not(target_os = "windows"))]
|
#[cfg(not(target_os = "windows"))]
|
||||||
|
|
|
@ -5,7 +5,7 @@ use ropey::iter::Chars;
|
||||||
use crate::{
|
use crate::{
|
||||||
coords_at_pos,
|
coords_at_pos,
|
||||||
graphemes::{nth_next_grapheme_boundary, nth_prev_grapheme_boundary},
|
graphemes::{nth_next_grapheme_boundary, nth_prev_grapheme_boundary},
|
||||||
pos_at_coords, Position, Range, RopeSlice, get_line_ending
|
pos_at_coords, Position, Range, RopeSlice, get_line_ending, line_end
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||||
|
@ -38,9 +38,7 @@ pub fn move_horizontally(
|
||||||
}
|
}
|
||||||
Direction::Forward => {
|
Direction::Forward => {
|
||||||
// Line end is pos at the start of next line - 1
|
// Line end is pos at the start of next line - 1
|
||||||
let end = slice.line_to_char(line + 1).saturating_sub(get_line_ending(&slice.line(line))
|
let end = line_end(&slice, line);
|
||||||
.map(|le| le.len_chars())
|
|
||||||
.unwrap_or(0));
|
|
||||||
nth_next_grapheme_boundary(slice, pos, count).min(end)
|
nth_next_grapheme_boundary(slice, pos, count).min(end)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use helix_core::{
|
use helix_core::{
|
||||||
comment, coords_at_pos, find_first_non_whitespace_char, find_root, get_line_ending, graphemes,
|
comment, coords_at_pos, find_first_non_whitespace_char, find_root, get_line_ending, graphemes,
|
||||||
indent, match_brackets,
|
indent, line_end, match_brackets,
|
||||||
movement::{self, Direction},
|
movement::{self, Direction},
|
||||||
object, pos_at_coords,
|
object, pos_at_coords,
|
||||||
regex::{self, Regex},
|
regex::{self, Regex},
|
||||||
|
@ -342,11 +342,7 @@ fn move_line_end(cx: &mut Context) {
|
||||||
let text = doc.text();
|
let text = doc.text();
|
||||||
let line = text.char_to_line(range.head);
|
let line = text.char_to_line(range.head);
|
||||||
|
|
||||||
let pos = text.line_to_char(line + 1).saturating_sub(
|
let pos = line_end(&text.slice(..), line);
|
||||||
get_line_ending(&text.line(line))
|
|
||||||
.map(|le| le.len_chars())
|
|
||||||
.unwrap_or(0),
|
|
||||||
);
|
|
||||||
|
|
||||||
Range::new(pos, pos)
|
Range::new(pos, pos)
|
||||||
});
|
});
|
||||||
|
@ -767,11 +763,7 @@ fn extend_line_end(cx: &mut Context) {
|
||||||
let text = doc.text();
|
let text = doc.text();
|
||||||
let line = text.char_to_line(range.head);
|
let line = text.char_to_line(range.head);
|
||||||
|
|
||||||
let pos = text.line_to_char(line + 1).saturating_sub(
|
let pos = line_end(&text.slice(..), line);
|
||||||
get_line_ending(&text.line(line))
|
|
||||||
.map(|le| le.len_chars())
|
|
||||||
.unwrap_or(0),
|
|
||||||
);
|
|
||||||
|
|
||||||
Range::new(range.anchor, pos)
|
Range::new(range.anchor, pos)
|
||||||
});
|
});
|
||||||
|
@ -1650,12 +1642,7 @@ fn append_to_line(cx: &mut Context) {
|
||||||
let selection = doc.selection(view.id).transform(|range| {
|
let selection = doc.selection(view.id).transform(|range| {
|
||||||
let text = doc.text();
|
let text = doc.text();
|
||||||
let line = text.char_to_line(range.head);
|
let line = text.char_to_line(range.head);
|
||||||
// we can't use line_to_char(line + 1) - 2 because the last line might not contain a newline
|
let pos = line_end(&text.slice(..), line);
|
||||||
let pos = (text.line_to_char(line) + text.line(line).len_chars()).saturating_sub(
|
|
||||||
get_line_ending(&text.line(line))
|
|
||||||
.map(|le| le.len_chars())
|
|
||||||
.unwrap_or(0),
|
|
||||||
);
|
|
||||||
Range::new(pos, pos)
|
Range::new(pos, pos)
|
||||||
});
|
});
|
||||||
doc.set_selection(view.id, selection);
|
doc.set_selection(view.id, selection);
|
||||||
|
|
Loading…
Add table
Reference in a new issue