feat: add expandable diff excerpts with configurable context

This commit is contained in:
2026-10-11 01:45:13 +02:00
parent 5e0700bb8c
commit 704dce2539
8 changed files with 590 additions and 21 deletions
+12 -1
View File
@@ -1064,6 +1064,7 @@ pub struct Editor {
file_explorer_view: FileView,
count: Option<usize>,
diff: Option<DiffState>,
diff_context_options: (usize, usize),
next_diff_request: u64,
outstanding_diff_request: Option<u64>,
}
@@ -1134,6 +1135,7 @@ impl Editor {
file_explorer_view: FileView::Tree,
count: None,
diff: None,
diff_context_options: (10, 15),
next_diff_request: 0,
outstanding_diff_request: None,
};
@@ -1240,6 +1242,13 @@ impl Editor {
self.diff.as_ref()
}
pub(crate) fn set_diff_context_options(&mut self, context_lines: usize, expand_lines: usize) {
self.diff_context_options = (context_lines, expand_lines);
if let Some(diff) = &mut self.diff {
diff.set_context_options(context_lines, expand_lines);
}
}
pub(crate) fn take_diff_request(&mut self) -> Option<(u64, Operation)> {
let operation = self.diff.as_mut()?.take_request()?;
self.next_diff_request = self
@@ -1275,7 +1284,9 @@ impl Editor {
self.active.mode = Mode::Normal;
}
self.outstanding_diff_request = None;
self.diff = Some(DiffState::new());
let mut diff = DiffState::new();
diff.set_context_options(self.diff_context_options.0, self.diff_context_options.1);
self.diff = Some(diff);
}
fn handle_diff(&mut self, input: Input) {