fix: retain repository status between picker openings
This commit is contained in:
+57
-10
@@ -4649,7 +4649,6 @@ fn draw_file_list(
|
||||
);
|
||||
}
|
||||
let entries = picker.entries();
|
||||
let normal_markers = changed_files.is_none() && picker.has_repository_changes();
|
||||
if entries.len() == 0 {
|
||||
frame.render_widget(
|
||||
Paragraph::new(if picker.query.is_empty() {
|
||||
@@ -4722,7 +4721,7 @@ fn draw_file_list(
|
||||
Style::default().fg(color),
|
||||
));
|
||||
spans.push(Span::raw(" "));
|
||||
} else if normal_markers {
|
||||
} else if changed_files.is_none() {
|
||||
spans.push(Span::raw(" "));
|
||||
}
|
||||
if status == Some(FileStatus::Renamed)
|
||||
@@ -7559,7 +7558,6 @@ mod tests {
|
||||
}
|
||||
}
|
||||
picker.refresh();
|
||||
assert!(picker.has_repository_changes());
|
||||
assert!(
|
||||
picker
|
||||
.entries()
|
||||
@@ -7581,13 +7579,57 @@ mod tests {
|
||||
})
|
||||
.unwrap();
|
||||
let text = screen_text(&terminal);
|
||||
assert!(text.contains("> clean.txt"));
|
||||
assert!(text.contains("r.txt"));
|
||||
assert!(!text.contains("old�name.txt"));
|
||||
assert!(!text.contains("d.txt"));
|
||||
assert!(!text.contains('✓'));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn normal_file_names_stay_put_when_status_arrives_or_clears() {
|
||||
let directory = Directory::new();
|
||||
directory.file("file.txt", "");
|
||||
let mut picker = FilePicker::scan(
|
||||
directory.0.clone(),
|
||||
FilePresentation::Floating,
|
||||
FileView::List,
|
||||
)
|
||||
.unwrap();
|
||||
let mut terminal = Terminal::new(ratatui::backend::TestBackend::new(80, 12)).unwrap();
|
||||
for view in [FileView::List, FileView::Tree] {
|
||||
picker.set_view(view);
|
||||
let mut columns = Vec::new();
|
||||
for status in [None, Some(FileStatus::Modified), None] {
|
||||
picker.set_repository_changes(
|
||||
status
|
||||
.into_iter()
|
||||
.map(|status| crate::repository::WorkingFileChange {
|
||||
path: "file.txt".into(),
|
||||
status,
|
||||
old_path: None,
|
||||
})
|
||||
.collect(),
|
||||
);
|
||||
terminal
|
||||
.draw(|frame| {
|
||||
draw_file_list(
|
||||
frame,
|
||||
&picker,
|
||||
frame.area(),
|
||||
"",
|
||||
&mut WheelPanels::default(),
|
||||
None,
|
||||
);
|
||||
})
|
||||
.unwrap();
|
||||
let text = screen_text(&terminal);
|
||||
columns.push(text.lines().find_map(|row| row.find("file.txt")).unwrap());
|
||||
}
|
||||
assert_eq!(columns[0], columns[1], "status arrival moved the filename");
|
||||
assert_eq!(columns[1], columns[2], "clearing status moved the filename");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn normal_status_prefix_clips_without_review_columns_or_painting_outside_tiny_bounds() {
|
||||
let directory = Directory::new();
|
||||
@@ -13167,7 +13209,7 @@ end
|
||||
.draw(|frame| draw_file_list(frame, &picker, area, "", &mut panels, None))
|
||||
.unwrap();
|
||||
assert!(panels.manual_files.is_none());
|
||||
assert!(screen_text(&terminal).contains("> file-10"));
|
||||
assert!(screen_text(&terminal).contains("file-10"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -13306,7 +13348,11 @@ end
|
||||
})
|
||||
.unwrap();
|
||||
let text = screen_text(&terminal);
|
||||
assert!(text.contains(&format!("> {label}")), "{text}");
|
||||
assert!(
|
||||
text.lines()
|
||||
.any(|row| row.contains(label) && row.contains('>')),
|
||||
"{text}"
|
||||
);
|
||||
let buffer = terminal.backend().buffer();
|
||||
let selected_y = (3..8).find(|&y| buffer[(1, y)].symbol() == ">").unwrap();
|
||||
assert_eq!(buffer[(1, selected_y)].bg, Color::Blue);
|
||||
@@ -13451,8 +13497,10 @@ end
|
||||
let selected_y = (area.y + 2..area.bottom() - 1)
|
||||
.find(|&y| buffer[(area.x + 1, y)].symbol() == ">")
|
||||
.unwrap();
|
||||
assert_eq!(buffer[(area.x + 3, selected_y)].symbol(), "界");
|
||||
assert_eq!(buffer[(area.x + 5, selected_y)].symbol(), "e\u{301}");
|
||||
let selected_x = (area.x + 2..area.right())
|
||||
.find(|&x| buffer[(x, selected_y)].symbol() == "界")
|
||||
.unwrap();
|
||||
assert_eq!(buffer[(selected_x + 2, selected_y)].symbol(), "e\u{301}");
|
||||
assert_eq!(buffer[(area.x + 1, selected_y)].bg, Color::Blue);
|
||||
assert!(
|
||||
buffer[(area.x + 1, selected_y)]
|
||||
@@ -13729,7 +13777,6 @@ end
|
||||
" nested/",
|
||||
" inner.txt",
|
||||
" sibling.txt",
|
||||
"> single/",
|
||||
" only.txt",
|
||||
" root.txt",
|
||||
] {
|
||||
@@ -13833,7 +13880,7 @@ end
|
||||
}
|
||||
if width == 100 {
|
||||
let text = screen_text(&terminal);
|
||||
assert!(text.contains("> file.txt"), "{text}");
|
||||
assert!(text.contains("file.txt"), "{text}");
|
||||
assert!(!text.contains("dir-00"), "{text}");
|
||||
}
|
||||
for query in ["missing", long_query.as_str()] {
|
||||
|
||||
Reference in New Issue
Block a user