fix(322): fix undo/redo after reverting all changes

This commit is contained in:
Andrew Yatsko 2025-08-24 15:17:02 -04:00
parent c125d5c951
commit 18f6bc4e74

View file

@ -128,11 +128,26 @@ impl EditorTab {
let scroll = editor.with_buffer(|buffer| buffer.scroll());
//TODO: save/restore more?
match editor.load_text(path, self.attrs.clone()) {
Ok(()) => {
match std::fs::read_to_string(path) {
Ok(file_content) => {
log::info!("reloaded {:?}", path);
// Clear changed state
// Store the entire operation as a single change for undo
editor.start_change();
// Grab everything in the buffer
let cursor_start: Cursor = cosmic_text::Cursor::new(0, 0);
let cursor_end = editor.with_buffer(|buffer| {
let last_line = buffer.lines.len().saturating_sub(1);
cosmic_text::Cursor::new(last_line, buffer.lines.get(last_line).map(|line| line.text().len()).unwrap_or(0))
});
// Replace everything in the buffer with the content from disk
editor.delete_range(cursor_start, cursor_end);
editor.insert_at(cursor_start, &file_content, None);
editor.set_cursor(cursor_start);
editor.finish_change();
editor.set_changed(false);
}
Err(err) => {