killing of the buffers now works

This commit is contained in:
filipriec
2025-04-15 18:43:36 +02:00
parent afce27184a
commit e8b585dc07

View File

@@ -64,20 +64,27 @@ impl BufferState {
self.history.get(self.active_index)
}
/// Removes the currently active buffer from the history.
/// Removes the currently active buffer from the history, unless it's the Intro buffer.
/// Sets the new active buffer to the one preceding the closed one.
/// Returns `true` if a buffer was closed, `false` otherwise (e.g., only one buffer left).
/// # Returns
/// * `true` if a non-Intro buffer was closed.
/// * `false` if the active buffer was Intro or only Intro remained.
pub fn close_active_buffer(&mut self) -> bool {
if self.history.len() <= 1 {
return false; // Cannot close the last buffer
let current_index = self.active_index;
// Rule 1: Cannot close Intro buffer.
if matches!(self.history.get(current_index), Some(AppView::Intro)) {
return false;
}
let current_index = self.active_index;
self.history.remove(current_index); // Remove the active buffer
// Rule 2: Cannot close if only Intro would remain (or already remains).
// This check implicitly covers the case where len <= 1.
if self.history.len() <= 1 {
return false;
}
// Set the new active index to the one *before* the closed one,
// ensuring it doesn't go below 0. This mimics closing a tab.
self.active_index = current_index.saturating_sub(1);
self.history.remove(current_index);
self.active_index = current_index.saturating_sub(1).min(self.history.len() - 1);
true
}