From e8b585dc07183584bd9e01deb39ee6cf8b6aea96 Mon Sep 17 00:00:00 2001 From: filipriec Date: Tue, 15 Apr 2025 18:43:36 +0200 Subject: [PATCH] killing of the buffers now works --- client/src/state/app/buffer.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/client/src/state/app/buffer.rs b/client/src/state/app/buffer.rs index 054a7ea..c3f7e71 100644 --- a/client/src/state/app/buffer.rs +++ b/client/src/state/app/buffer.rs @@ -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 }