Phase 5: IDE-Rahmen implementieren, synchronisieren und archivieren
This commit is contained in:
@@ -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(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user