diff --git a/src/core/exec.rs b/src/core/exec.rs index 1d18425e548d0084089e4e43b7afcc8c1b2ba4de..820cdc0a5f003821849dfb353d6b1b4bd81d81d8 100644 --- a/src/core/exec.rs +++ b/src/core/exec.rs @@ -70,7 +70,7 @@ impl Editor { String::new() }; let last = ind.len(); - self.buffers.current_buffer_mut().insert_line(y, ind.into()); + self.buffers.current_buffer_mut().insert_line(y + 1, ind.into()); self.goto((last, y + 1)); self.cursor_mut().mode = Mode::Primitive(PrimitiveMode::Insert(InsertOptions { diff --git a/src/edit/buffer.rs b/src/edit/buffer.rs index ab2aa8eb9ad3148b5d2c290766ddc5b356d347a3..69819c4bdcdad572db35cd8dc22e285287c4de75 100644 --- a/src/edit/buffer.rs +++ b/src/edit/buffer.rs @@ -155,8 +155,8 @@ impl<'a> TextBuffer<'a> for SplitBuffer { fn insert_line(&mut self, n: usize, line: String) { if n < self.before.len() { self.before.insert(n, line); - } else if n < self.len() { - let n = self.len() - 1 - n; + } else if n <= self.len() { + let n = self.len() - n; self.after.insert(n, line); } else { panic!("Out of bound"); diff --git a/src/edit/insert.rs b/src/edit/insert.rs index c892d65aa2253a009f734b0abe0bc6986f000e58..5fe4b9a62619206ccedbf2dbcdfadfca07b23836 100644 --- a/src/edit/insert.rs +++ b/src/edit/insert.rs @@ -38,7 +38,7 @@ impl Editor { }; let begin = nl.len(); - self.buffers.current_buffer_mut().insert_line(y, nl + &second_part); + self.buffers.current_buffer_mut().insert_line(y + 1, nl + &second_part); self.redraw_task = RedrawTask::LinesAfter(y); self.goto((begin, y + 1));