Phase 5: IDE-Rahmen implementieren, synchronisieren und archivieren

This commit is contained in:
2026-09-06 16:28:16 +02:00
parent 687fc230ec
commit df85a4b7b2
27 changed files with 4215 additions and 34 deletions

View File

@@ -1,11 +1,33 @@
//! `tb` — die integrierte Entwicklungsumgebung von Terminal Basic (TUI).
//!
//! Nachbildung der klassischen DOS-IDE: Menüleiste, Editor mit
//! Syntaxprüfung pro Zeile, Formular-Designer, Direktfenster,
//! Debugger (Einzelschritt, Breakpoints, Überwachungsausdrücke).
//! Siehe PLAN.md, Phase 5.
use anyhow::{ensure, Result};
use crossterm::event;
use ratatui::{backend::CrosstermBackend, Terminal};
use std::{
io::{self, IsTerminal},
path::PathBuf,
};
use tb_ide::{app::App, options, terminal::TerminalGuard};
fn main() -> anyhow::Result<()> {
println!("tb — Terminal Basic IDE (Projektrahmen, noch ohne Funktion)");
fn main() -> Result<()> {
let args: Vec<_> = std::env::args().skip(1).collect();
if args.iter().any(|s| s == "--help" || s == "-h") {
println!("tb [Projekt.mak|Modul.bas|Formular.frm]\nTerminal Basic IDE · mindestens 80×25\nF11: Menü · Alt+F4: Beenden");
return Ok(());
}
ensure!(args.len() <= 1, "Aufruf: tb [Projektdatei]");
ensure!(
io::stdin().is_terminal() && io::stdout().is_terminal(),
"tb benötigt ein interaktives Terminal; --help zeigt den Aufruf"
);
let base = std::env::current_dir()?;
let mut app = App::new(&base, options::config_path()?, crossterm::terminal::size()?)?;
if let Some(path) = args.first() {
app.load_initial_project(PathBuf::from(path))?;
}
let _guard = TerminalGuard::enter(io::stdout())?;
let mut terminal = Terminal::new(CrosstermBackend::new(io::stdout()))?;
while !app.quit {
terminal.draw(|f| app.render(f))?;
app.handle(event::read()?);
}
Ok(())
}