continued work on vi line editing

This commit is contained in:
2025-05-20 18:03:43 -04:00
parent 25534d4cd9
commit 47759a05d4
3 changed files with 114 additions and 22 deletions

View File

@@ -2,12 +2,14 @@ use std::ops::Range;
use crate::{libsh::{error::ShResult, term::{Style, Styled}}, prompt::readline::linecmd::Anchor};
use super::linecmd::{At, CharSearch, MoveCmd, Movement, Verb, VerbCmd, Word};
use super::linecmd::{At, CharSearch, MoveCmd, Movement, Repeat, Verb, VerbCmd, Word};
#[derive(Default,Debug)]
pub struct LineBuf {
pub buffer: Vec<char>,
pub inserting: bool,
pub last_insert: String,
cursor: usize
}
@@ -19,6 +21,15 @@ impl LineBuf {
self.buffer = init.to_string().chars().collect();
self
}
pub fn begin_insert(&mut self) {
self.inserting = true;
}
pub fn finish_insert(&mut self) {
self.inserting = false;
}
pub fn take_ins_text(&mut self) -> String {
std::mem::take(&mut self.last_insert)
}
pub fn display_lines(&self) -> Vec<String> {
let line_bullet = "".styled(Style::Dim);
self.split_lines()
@@ -519,7 +530,20 @@ impl LineBuf {
}
}
}
Verb::InsertChar(ch) => self.insert_at_cursor(ch),
Verb::InsertChar(ch) => {
if self.inserting {
self.last_insert.push(ch);
}
self.insert_at_cursor(ch)
}
Verb::Insert(text) => {
for ch in text.chars() {
if self.inserting {
self.last_insert.push(ch);
}
self.insert_at_cursor(ch);
}
}
Verb::InsertMode => todo!(),
Verb::JoinLines => todo!(),
Verb::ToggleCase => todo!(),
@@ -579,6 +603,9 @@ impl LineBuf {
self.buffer.drain(range);
self.repos_cursor();
});
}
Verb::Repeat(rep) => {
}
Verb::DeleteOne(anchor) => todo!(),
Verb::Breakline(anchor) => todo!(),