feat: show relative line numbers around primary cursor
This commit is contained in:
+27
-2
@@ -246,7 +246,12 @@ fn draw(frame: &mut Frame, editor: &Editor, top: &mut usize, left: &mut usize) {
|
||||
} else {
|
||||
Style::default().fg(Color::DarkGray)
|
||||
};
|
||||
Line::styled(format!("{:>digits$} ", row + 1), style)
|
||||
let number = if row == cursor.row {
|
||||
row + 1
|
||||
} else {
|
||||
row.abs_diff(cursor.row)
|
||||
};
|
||||
Line::styled(format!("{number:>digits$} "), style)
|
||||
})
|
||||
.collect();
|
||||
frame.render_widget(Paragraph::new(numbers), gutter);
|
||||
@@ -509,7 +514,7 @@ mod tests {
|
||||
.unwrap();
|
||||
assert_eq!((top, left), (8, 8));
|
||||
let buffer = terminal.backend().buffer();
|
||||
for (y, expected) in [(2, " 9 "), (3, "10 "), (4, "11 ")] {
|
||||
for (y, expected) in [(2, " 2 "), (3, " 1 "), (4, "11 ")] {
|
||||
let number: String = (3..6).map(|x| buffer[(x, y)].symbol()).collect();
|
||||
assert_eq!(number, expected);
|
||||
assert_eq!(buffer[(6, y)].symbol(), "8");
|
||||
@@ -533,6 +538,26 @@ mod tests {
|
||||
terminal.get_cursor_position().unwrap(),
|
||||
ratatui::layout::Position::new(6, 4)
|
||||
);
|
||||
editor.handle(Input::Up);
|
||||
editor.handle(Input::Up);
|
||||
terminal
|
||||
.draw(|frame| draw(frame, &editor, &mut top, &mut left))
|
||||
.unwrap();
|
||||
let buffer = terminal.backend().buffer();
|
||||
for (y, expected) in [(2, "10 "), (3, " 1 "), (4, " 2 ")] {
|
||||
let number: String = (3..6).map(|x| buffer[(x, y)].symbol()).collect();
|
||||
assert_eq!(number, expected);
|
||||
}
|
||||
editor.handle(Input::Ctrl('e'));
|
||||
assert_eq!(editor.selection_count(), 2);
|
||||
terminal
|
||||
.draw(|frame| draw(frame, &editor, &mut top, &mut left))
|
||||
.unwrap();
|
||||
let buffer = terminal.backend().buffer();
|
||||
for (y, expected) in [(2, " 1 "), (3, "11 "), (4, " 1 ")] {
|
||||
let number: String = (3..6).map(|x| buffer[(x, y)].symbol()).collect();
|
||||
assert_eq!(number, expected);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user