Rust termion crate:如何清除单个字符?
Rust termion crate: how to clear a single character?
我正在尝试使用 termion crate 实现一个简单的文本编辑器。当用户按下退格键时,我想删除一个字符 - 但我不知道如何实现。
箱子似乎只提供 these options:
AfterCursor Clear everything after the cursor.
All Clear the entire screen.
BeforeCursor Clear everything before the cursor.
CurrentLine Clear the current line.
UntilNewline Clear from cursor to newline.
None其中音适。 UntilNewLine
有点效果,除非您让用户将光标向左移动,在这种情况下,它会删除超过 1 个字符(基本上是该行的其余部分)。
我当前的代码:
fn main() {
let stdin = io::stdin();
let mut stdout = stdout().into_raw_mode().unwrap();
write!(stdout, "{}{}", termion::clear::All, termion::cursor::Goto(1, 1));
stdout.flush().unwrap();
for c in stdin.keys() {
match c.unwrap() {
Key::Esc => break,
Key::Left => {
let (x, y) = stdout.cursor_pos().unwrap();
write!(stdout, "{}", termion::cursor::Goto(x-1, y));
},
Key::Right => {
let (x, y) = stdout.cursor_pos().unwrap();
write!(stdout, "{}", termion::cursor::Goto(x+1, y));
},
Key::Up => {
let (x, y) = stdout.cursor_pos().unwrap();
write!(stdout, "{}", termion::cursor::Goto(x, y-1));
},
Key::Down => {
let (x, y) = stdout.cursor_pos().unwrap();
write!(stdout, "{}", termion::cursor::Goto(x, y+1));
},
Key::Backspace => {
let (x, y) = stdout.cursor_pos().unwrap();
write!(stdout, "{}{}", termion::cursor::Goto(x-1, y), termion::clear::UntilNewline );
},
Key::Char('\n') => { write!(stdout, "\r\n"); },
Key::Char(x) => { write!(stdout, "{}", x); },
_ => ()
}
stdout.flush().unwrap();
}
}
我想我有一个分为两部分的问题:
- 如何解决这个特定问题(清除单个字符)?
- 如果解决方案在文档中的某处,我将如何找到它?我尝试搜索 delete / backspace / clear - 但没有用。有什么我可以在这里做的,还是我 运行 进入了图书馆的限制?
要擦除单个字符,将光标放在它前面,然后打印一个space来覆盖该字符。
我正在尝试使用 termion crate 实现一个简单的文本编辑器。当用户按下退格键时,我想删除一个字符 - 但我不知道如何实现。
箱子似乎只提供 these options:
AfterCursor Clear everything after the cursor.
All Clear the entire screen.
BeforeCursor Clear everything before the cursor.
CurrentLine Clear the current line.
UntilNewline Clear from cursor to newline.
None其中音适。 UntilNewLine
有点效果,除非您让用户将光标向左移动,在这种情况下,它会删除超过 1 个字符(基本上是该行的其余部分)。
我当前的代码:
fn main() {
let stdin = io::stdin();
let mut stdout = stdout().into_raw_mode().unwrap();
write!(stdout, "{}{}", termion::clear::All, termion::cursor::Goto(1, 1));
stdout.flush().unwrap();
for c in stdin.keys() {
match c.unwrap() {
Key::Esc => break,
Key::Left => {
let (x, y) = stdout.cursor_pos().unwrap();
write!(stdout, "{}", termion::cursor::Goto(x-1, y));
},
Key::Right => {
let (x, y) = stdout.cursor_pos().unwrap();
write!(stdout, "{}", termion::cursor::Goto(x+1, y));
},
Key::Up => {
let (x, y) = stdout.cursor_pos().unwrap();
write!(stdout, "{}", termion::cursor::Goto(x, y-1));
},
Key::Down => {
let (x, y) = stdout.cursor_pos().unwrap();
write!(stdout, "{}", termion::cursor::Goto(x, y+1));
},
Key::Backspace => {
let (x, y) = stdout.cursor_pos().unwrap();
write!(stdout, "{}{}", termion::cursor::Goto(x-1, y), termion::clear::UntilNewline );
},
Key::Char('\n') => { write!(stdout, "\r\n"); },
Key::Char(x) => { write!(stdout, "{}", x); },
_ => ()
}
stdout.flush().unwrap();
}
}
我想我有一个分为两部分的问题:
- 如何解决这个特定问题(清除单个字符)?
- 如果解决方案在文档中的某处,我将如何找到它?我尝试搜索 delete / backspace / clear - 但没有用。有什么我可以在这里做的,还是我 运行 进入了图书馆的限制?
要擦除单个字符,将光标放在它前面,然后打印一个space来覆盖该字符。