From fae004f76c3315473b480ec473c0fbb6ad6404d0 Mon Sep 17 00:00:00 2001 From: Condorra Date: Sat, 17 Aug 2024 22:09:06 +1000 Subject: [PATCH] Improve history handling with regards to position and duplicates --- src/lineengine/history.rs | 2 +- src/lineengine/line.rs | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lineengine/history.rs b/src/lineengine/history.rs index 9805cf9..e8454de 100644 --- a/src/lineengine/history.rs +++ b/src/lineengine/history.rs @@ -3,7 +3,7 @@ use std::collections::VecDeque; pub struct History { pub entries: VecDeque, pub max_size: usize, - current_position: Option, + pub current_position: Option, } impl Default for History { fn default() -> Self { diff --git a/src/lineengine/line.rs b/src/lineengine/line.rs index abb660a..9e59014 100644 --- a/src/lineengine/line.rs +++ b/src/lineengine/line.rs @@ -359,7 +359,11 @@ impl LineState { self.clear_and_render(term)?; // Add to history... - self.history.entries.push_front(line.clone()); + if self.history.entries.front() != Some(&line) { + self.history.entries.push_front(line.clone()); + self.history.entries.truncate(self.history.max_size); + } + self.history.current_position = None; // Return line return Ok(Some(ReadlineEvent::Line(line)));