add delete command
This commit is contained in:
parent
4a583272d6
commit
e3af34a827
3 changed files with 27 additions and 1 deletions
|
@ -71,6 +71,30 @@ impl Buffer {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn delete(&mut self, addr:Address) {
|
||||
self.has_changed = true;
|
||||
let curr = self.current_line;
|
||||
let last_line = self.buffer.len();
|
||||
match addr {
|
||||
Address::Actual | Address::Empty => self.delete_lines(curr, curr.saturating_add(1)),
|
||||
Address::Line(l) => self.delete_lines(l.saturating_sub(1), l),
|
||||
Address::Last => self.delete_lines(last_line.saturating_sub(1), last_line),
|
||||
Address::All => self.delete_lines(0, last_line),
|
||||
Address::FromTo(a, b) => self.delete_lines(a.saturating_sub(1), b),
|
||||
Address::FromStartTo(a) => self.delete_lines(0, a),
|
||||
Address::FromToEnd(a) => self.delete_lines(a.saturating_sub(1), last_line),
|
||||
Address::FromActTo(a) => self.delete_lines(curr, a),
|
||||
Address::FromActToEnd => self.delete_lines(curr, last_line),
|
||||
Address::Null => println!("nul !"),
|
||||
}
|
||||
}
|
||||
|
||||
fn delete_lines(&mut self, start: usize, end: usize) {
|
||||
for i in start..end {
|
||||
self.buffer.remove(start);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn append(&mut self, addr:Address, lines: Vec<String>) {
|
||||
self.has_changed = true;
|
||||
match addr {
|
||||
|
|
|
@ -172,6 +172,7 @@ fn parse(c: char, addr: Address) -> Result<Command, String> {
|
|||
Ok(Command::Insert(addr))
|
||||
}
|
||||
}
|
||||
'd' => Ok(Command::Delete(addr)),
|
||||
'p' => Ok(Command::Print(addr)),
|
||||
'n' => Ok(Command::Number(addr)),
|
||||
'q' => Ok(Command::Quit(false)),
|
||||
|
|
|
@ -71,6 +71,7 @@ fn execute_command(buffer: &mut Buffer, c: Command) -> Exit {
|
|||
match c {
|
||||
Command::Append(a) => buffer.append(a, read_user_input()),
|
||||
Command::Insert(a) => buffer.insert(a, read_user_input()),
|
||||
Command::Delete(a) => buffer.delete(a),
|
||||
Command::Print(a) => buffer.print(a, false),
|
||||
Command::Number(a) => buffer.print(a, true),
|
||||
Command::Quit(q) => {
|
||||
|
@ -96,7 +97,7 @@ fn execute_command(buffer: &mut Buffer, c: Command) -> Exit {
|
|||
|
||||
fn parse_line(input: &str) -> Result<Command, String> {
|
||||
let address = take_while(check_address_complete);
|
||||
let command = one_of::<_, _, (&str, ErrorKind)>("aipnqQw");
|
||||
let command = one_of::<_, _, (&str, ErrorKind)>("aidpnqQw");
|
||||
|
||||
//if let Ok((input, (a, c))) = alt(address, command).parse(input) {
|
||||
let tmp = (address, command).parse(input);
|
||||
|
|
Loading…
Reference in a new issue