small software-rendered rust tty
-rw-r--r--src/term.rs9
-rw-r--r--src/term/cells.rs8
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();