Simplify Paste/Yank operation
diff --git a/src/lib.rs b/src/lib.rs
index 3fb381d..dba37c9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -352,7 +352,10 @@
// Yank/paste `text` at current position.
fn edit_yank(s: &mut State, text: &str, anchor: Anchor, n: RepeatCount) -> Result<()> {
- if s.line.yank(text, anchor, n).is_some() {
+ if let Anchor::After = anchor {
+ s.line.move_forward(1);
+ }
+ if s.line.yank(text, n).is_some() {
if !s.edit_state.is_emacs_mode() {
s.line.move_backward(1);
}
diff --git a/src/line_buffer.rs b/src/line_buffer.rs
index a2178cf..91fade5 100644
--- a/src/line_buffer.rs
+++ b/src/line_buffer.rs
@@ -3,7 +3,7 @@
use std::ops::{Deref, Range};
use std_unicode::str::UnicodeStr;
use unicode_segmentation::UnicodeSegmentation;
-use keymap::{Anchor, At, CharSearch, Movement, RepeatCount, Word};
+use keymap::{At, CharSearch, Movement, RepeatCount, Word};
/// Maximum buffer size for the line read
pub static MAX_LINE: usize = 4096;
@@ -151,14 +151,11 @@
/// Yank/paste `text` at current position.
/// Return `None` when maximum buffer size has been reached,
/// `true` when the character has been appended to the end of the line.
- pub fn yank(&mut self, text: &str, anchor: Anchor, n: RepeatCount) -> Option<bool> {
+ pub fn yank(&mut self, text: &str, n: RepeatCount) -> Option<bool> {
let shift = text.len() * n;
if text.is_empty() || (self.buf.len() + shift) > self.buf.capacity() {
return None;
}
- if let Anchor::After = anchor {
- self.move_forward(1);
- }
let push = self.pos == self.buf.len();
if push {
self.buf.reserve(shift);
@@ -178,7 +175,7 @@
pub fn yank_pop(&mut self, yank_size: usize, text: &str) -> Option<bool> {
self.buf.drain((self.pos - yank_size)..self.pos);
self.pos -= yank_size;
- self.yank(text, Anchor::Before, 1)
+ self.yank(text, 1)
}
/// Move cursor on the left.
@@ -280,7 +277,7 @@
}
let chars = self.delete(1).unwrap();
self.move_backward(1);
- self.yank(&chars, Anchor::Before, 1);
+ self.yank(&chars, 1);
self.move_forward(1);
true
}
@@ -690,7 +687,7 @@
#[cfg(test)]
mod test {
- use keymap::{Anchor, At, CharSearch, Word};
+ use keymap::{At, CharSearch, Word};
use super::{LineBuffer, MAX_LINE, WordAction};
#[test]
@@ -740,7 +737,8 @@
#[test]
fn yank_after() {
let mut s = LineBuffer::init("αß", 2);
- let ok = s.yank("γδε", Anchor::After, 1);
+ s.move_forward(1);
+ let ok = s.yank("γδε", 1);
assert_eq!(Some(true), ok);
assert_eq!("αßγδε", s.buf);
assert_eq!(10, s.pos);
@@ -749,7 +747,7 @@
#[test]
fn yank_before() {
let mut s = LineBuffer::init("αε", 2);
- let ok = s.yank("ßγδ", Anchor::Before, 1);
+ let ok = s.yank("ßγδ", 1);
assert_eq!(Some(false), ok);
assert_eq!("αßγδε", s.buf);
assert_eq!(8, s.pos);