From 6834194b9e16a7b5ee68b539ceb1a99b8f1ff90b Mon Sep 17 00:00:00 2001 From: Silas Bartha Date: Thu, 2 May 2024 02:53:51 -0400 Subject: Added ratatui integration + logger redirect --- src/lib.rs | 68 ++++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 19 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 3ad98f4..ac093de 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,13 +1,22 @@ -use std::io::stdout; +use std::{io::stdout, fs::OpenOptions}; -use bevy::prelude::*; +use bevy::{ + log::{ + tracing_subscriber::{self, Registry, prelude::*}, + LogPlugin, Level, + }, + prelude::*, utils::tracing::level_filters::LevelFilter, +}; use crossterm::{ - event::PopKeyboardEnhancementFlags, terminal::disable_raw_mode, ExecutableCommand, + event::DisableMouseCapture, + terminal::{disable_raw_mode, LeaveAlternateScreen}, + ExecutableCommand, }; use grex_dither_post_process::DitherPostProcessPlugin; use grex_framebuffer_extract::FramebufferExtractPlugin; -pub use crossterm::event::KeyCode; +pub use crossterm; +pub use ratatui; pub mod components; pub mod events; @@ -18,26 +27,47 @@ pub struct TerminalDisplayPlugin; impl Plugin for TerminalDisplayPlugin { fn build(&self, app: &mut App) { - app.add_plugins((DitherPostProcessPlugin, FramebufferExtractPlugin)) - .add_systems(Startup, systems::setup) - .add_systems( - Update, - ( - systems::input_handling, - systems::resize_handling, - systems::print_to_terminal, - ), - ) - .insert_resource(resources::EventQueue::default()) - .insert_resource(resources::TerminalInput::default()) - .add_event::(); + app.add_plugins(( + DitherPostProcessPlugin, + FramebufferExtractPlugin, + LogPlugin { + update_subscriber: Some(|_| { + let log_file = OpenOptions::new() + .write(true) + .create(true) + .open("debug.log") + .unwrap(); + let file_layer = tracing_subscriber::fmt::Layer::new() + .with_writer(log_file) + .with_filter(LevelFilter::from_level(Level::INFO)); + Box::new(Registry::default().with(file_layer)) + }), + ..Default::default() + }, + )) + .add_systems(Startup, systems::setup) + .add_systems( + Update, + ( + systems::input_handling, + systems::resize_handling, + systems::print_to_terminal, + systems::widget_input_handling, + ), + ) + .insert_resource(resources::Terminal::default()) + .insert_resource(resources::EventQueue::default()) + .insert_resource(resources::TerminalInput::default()) + .insert_resource(resources::TerminalUI::default()) + .add_event::(); } } impl Drop for TerminalDisplayPlugin { fn drop(&mut self) { let mut stdout = stdout(); - stdout.execute(PopKeyboardEnhancementFlags).unwrap(); - disable_raw_mode().unwrap(); + let _ = stdout.execute(DisableMouseCapture); + let _ = stdout.execute(LeaveAlternateScreen); + let _ = disable_raw_mode(); } } -- cgit v1.2.3