Fix YankPop panic
thread 'main' panicked at 'already borrowed: BorrowMutError'
diff --git a/src/lib.rs b/src/lib.rs
index 2562b68..b7106a4 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -280,8 +280,11 @@
// Delete previously yanked text and yank/paste `text` at current position.
fn edit_yank_pop(s: &mut State, yank_size: usize, text: &str) -> Result<()> {
s.changes.borrow_mut().begin();
- s.line.yank_pop(yank_size, text);
- let result = edit_yank(s, text, Anchor::Before, 1);
+ let result = if s.line.yank_pop(yank_size, text).is_some() {
+ s.refresh_line()
+ } else {
+ Ok(())
+ };
s.changes.borrow_mut().end();
result
}
diff --git a/src/line_buffer.rs b/src/line_buffer.rs
index d64b1d7..94bc030 100644
--- a/src/line_buffer.rs
+++ b/src/line_buffer.rs
@@ -668,8 +668,9 @@
fn drain(&mut self, range: Range<usize>, dir: Direction) -> Drain {
for dl in &self.dl {
- dl.borrow_mut()
- .delete(range.start, &self.buf[range.start..range.end], dir);
+ if let Ok(mut dl) = dl.try_borrow_mut() {
+ dl.delete(range.start, &self.buf[range.start..range.end], dir);
+ }
}
for cl in &self.cl {
cl.borrow_mut()