From ff060cf43647171420183cafe75ece24983cf617 Mon Sep 17 00:00:00 2001 From: gwenn <gtreguier@gmail.com> Date: Sun, 22 Apr 2018 11:50:20 +0200 Subject: [PATCH] Undo: ignore empty change and keep tx boundaries --- src/undo.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/undo.rs b/src/undo.rs index 8e5b4233..b7b887f0 100644 --- a/src/undo.rs +++ b/src/undo.rs @@ -151,9 +151,12 @@ impl Changeset { self.undos.push(last_change); } - pub fn insert_str<S: Into<String> + Debug>(&mut self, idx: usize, string: S) { + pub fn insert_str<S: AsRef<str> + Into<String> + Debug>(&mut self, idx: usize, string: S) { debug!(target: "rustyline", "Changeset::insert_str({}, {:?})", idx, string); self.redos.clear(); + if string.as_ref().is_empty() { + return; + } self.undos.push(Change::Insert { idx, text: string.into(), @@ -163,6 +166,9 @@ impl Changeset { pub fn delete<S: AsRef<str> + Into<String> + Debug>(&mut self, indx: usize, string: S) { debug!(target: "rustyline", "Changeset::delete({}, {:?})", indx, string); self.redos.clear(); + if string.as_ref().is_empty() { + return; + } if !Self::single_char(string.as_ref()) || !self.undos @@ -246,10 +252,10 @@ impl Changeset { } _ => { change.undo(line); - self.redos.push(change); undone = true; } }; + self.redos.push(change); } else { break; } @@ -280,10 +286,10 @@ impl Changeset { } _ => { change.redo(line); - self.undos.push(change); redone = true; } }; + self.undos.push(change); } else { break; } -- GitLab