1pub mod action;
2pub mod buffer;
3pub mod color;
4pub mod command;
5pub mod config;
6pub mod editor;
7pub mod highlighter;
8pub mod logger;
9pub mod theme;
10pub mod unicode;
11pub mod window;
12pub mod window_manager;
13
14#[doc(hidden)]
15pub mod ext;
16
17use once_cell::sync::OnceCell;
18
19pub use logger::Logger;
20
21pub const VERSION_AND_GIT_HASH: &str = env!("VERSION_AND_GIT_HASH");
22
23pub static LOGGER: OnceCell<Option<Logger>> = OnceCell::new();
25
26#[macro_export]
27macro_rules! log {
28 ($($arg:tt)*) => {
29 {
30 let log_message = format!($($arg)*);
31 if let Some(logger) = $crate::LOGGER.get_or_init(|| Some($crate::Logger::new("tsu.log"))) {
32 logger.log(&log_message);
33 }
34 }
35 };
36}
37
38#[macro_export]
39macro_rules! debug {
40 ($($arg:tt)*) => {
41 {
42 let log_message = format!($($arg)*);
43 if let Some(logger) = $crate::LOGGER.get_or_init(|| Some($crate::Logger::new("tsu.log"))) {
44 logger.debug(&log_message);
45 }
46 }
47 };
48}
49
50#[macro_export]
51macro_rules! info {
52 ($($arg:tt)*) => {
53 {
54 let log_message = format!($($arg)*);
55 if let Some(logger) = $crate::LOGGER.get_or_init(|| Some($crate::Logger::new("tsu.log"))) {
56 logger.info(&log_message);
57 }
58 }
59 };
60}
61
62#[macro_export]
63macro_rules! warn {
64 ($($arg:tt)*) => {
65 {
66 let log_message = format!($($arg)*);
67 if let Some(logger) = $crate::LOGGER.get_or_init(|| Some($crate::Logger::new("tsu.log"))) {
68 logger.warn(&log_message);
69 }
70 }
71 };
72}
73
74#[macro_export]
75macro_rules! error {
76 ($($arg:tt)*) => {
77 {
78 let log_message = format!($($arg)*);
79 if let Some(logger) = $crate::LOGGER.get_or_init(|| Some($crate::Logger::new("tsu.log"))) {
80 logger.error(&log_message);
81 }
82 }
83 };
84}