Fix word editing
diff --git a/src/line_buffer.rs b/src/line_buffer.rs
index eb07d5f..4988a91 100644
--- a/src/line_buffer.rs
+++ b/src/line_buffer.rs
@@ -497,10 +497,17 @@
}
}
+ fn skip_whitespace(&self) -> Option<usize> {
+ if self.pos == self.buf.len() {
+ return None;
+ }
+ self.buf[self.pos..].grapheme_indices(true).filter(|&(_, ch)| ch.is_alphanumeric())
+ .map(|(i, _)| i).next().map(|i| i + self.pos)
+ }
/// Alter the next word.
pub fn edit_word(&mut self, a: WordAction) -> bool {
- if let Some(start) = self.next_word_pos(self.pos, At::Start, Word::Emacs, 1) {
- if let Some(end) = self.next_word_pos(self.pos, At::AfterEnd, Word::Emacs, 1) {
+ if let Some(start) = self.skip_whitespace() {
+ if let Some(end) = self.next_word_pos(start, At::AfterEnd, Word::Emacs, 1) {
if start == end {
return false;
}
@@ -1098,6 +1105,11 @@
assert!(s.edit_word(WordAction::CAPITALIZE));
assert_eq!("a SSeta c", s.buf);
assert_eq!(7, s.pos);
+
+ let mut s = LineBuffer::init("test", 1);
+ assert!(s.edit_word(WordAction::CAPITALIZE));
+ assert_eq!("tEst", s.buf);
+ assert_eq!(4, s.pos);
}
#[test]