small software-rendered rust tty
add delete chars
| -rw-r--r-- | src/term.rs | 9 | ||||
| -rw-r--r-- | src/term/cells.rs | 8 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/term.rs b/src/term.rs index f59597b..6afd9b4 100644 --- a/src/term.rs +++ b/src/term.rs @@ -252,6 +252,15 @@ impl Terminal { } Control(ControlFunction { start: b'[', + params: [p], + end: b'P', + .. + }) => { + let count = p.value_or(1); + self.cells.delete_chars(count, self.cursor); + } + Control(ControlFunction { + start: b'[', params: [x], end: b'X', .. diff --git a/src/term/cells.rs b/src/term/cells.rs index 99a887f..2bea8bb 100644 --- a/src/term/cells.rs +++ b/src/term/cells.rs @@ -94,6 +94,14 @@ impl Cells { self.row(y)[w as usize - characters as usize..] .fill(Cell::default()); } + pub fn delete_chars(&mut self, characters: u16, (x, y): (u16, u16)) { + let s = &mut self.row(y)[x as usize - 1..]; + s.rotate_left(characters as usize); + s[..characters as usize].fill(Cell::default()); + let w = self.c(); + self.row(y)[w as usize - characters as usize..] + .fill(Cell::default()); + } pub fn insert_lines(&mut self, lines: u16, below: u16) { let c = self.c(); let o = self.offset(); |