Phase 6: Plattformprüfungen und absolute RGB-Farben, Change 05 archivieren
This commit is contained in:
@@ -1,15 +1,12 @@
|
||||
//! Phase-0-Spike: 80×25-Bildschirmpuffer, 16-Farben-Palette, Unicode,
|
||||
//! Tastatur- und Mausereignisse.
|
||||
//!
|
||||
//! Start: `cargo run -p tb-ui --example spike` — Beenden mit Esc.
|
||||
//! Start: `cargo run -p tb-ui --features terminal --example spike -- --log events.txt` — Beenden mit Esc.
|
||||
//! Getippte Zeichen erscheinen im Eingabebereich; Sondertasten und
|
||||
//! Mausereignisse werden in der Statuszeile angezeigt.
|
||||
|
||||
use crossterm::event::{
|
||||
self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEventKind,
|
||||
};
|
||||
use crossterm::execute;
|
||||
use std::io::stdout;
|
||||
use crossterm::event::{self, Event, KeyCode, KeyEventKind};
|
||||
use std::io::{stdout, Write};
|
||||
use std::time::Duration;
|
||||
use tb_ui::screen::{ScreenWidget, TextScreen};
|
||||
|
||||
@@ -57,8 +54,24 @@ fn status(s: &mut TextScreen, text: &str) {
|
||||
}
|
||||
|
||||
fn main() -> anyhow::Result<()> {
|
||||
let mut terminal = ratatui::init();
|
||||
execute!(stdout(), EnableMouseCapture)?;
|
||||
let args: Vec<_> = std::env::args_os().skip(1).collect();
|
||||
anyhow::ensure!(
|
||||
args.is_empty() || (args.len() == 2 && args[0] == "--log"),
|
||||
"Aufruf: spike [--log neue-datei]"
|
||||
);
|
||||
let mut log = if args.len() == 2 {
|
||||
Some(
|
||||
std::fs::OpenOptions::new()
|
||||
.write(true)
|
||||
.create_new(true)
|
||||
.open(&args[1])?,
|
||||
)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let _guard = tb_ui::terminal::TerminalGuard::enter(stdout())?;
|
||||
let mut terminal = ratatui::Terminal::new(ratatui::backend::CrosstermBackend::new(stdout()))?;
|
||||
let mut sequence = 0u64;
|
||||
|
||||
let (tw, th) = crossterm::terminal::size()?;
|
||||
let mut screen = TextScreen::with_size(tw as usize, th as usize);
|
||||
@@ -70,7 +83,12 @@ fn main() -> anyhow::Result<()> {
|
||||
if !event::poll(Duration::from_millis(100))? {
|
||||
continue;
|
||||
}
|
||||
match event::read()? {
|
||||
let received = event::read()?;
|
||||
sequence += 1;
|
||||
if let Some(log) = &mut log {
|
||||
writeln!(log, "{sequence}: {received:?}")?;
|
||||
}
|
||||
match received {
|
||||
Event::Key(k) if k.kind != KeyEventKind::Release => match k.code {
|
||||
KeyCode::Esc => break,
|
||||
KeyCode::Char(c) => {
|
||||
@@ -105,7 +123,5 @@ fn main() -> anyhow::Result<()> {
|
||||
}
|
||||
}
|
||||
|
||||
execute!(stdout(), DisableMouseCapture)?;
|
||||
ratatui::restore();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user