Diff
diff --cc src/bin/main.rs
index 82d6f8f,0b3297d..3926aff
--- a/src/bin/main.rs
+++ b/src/bin/main.rs
@@@ -1,40 -1,43 +1,42 @@@
+use oxwm::errors::ConfigError;
+use oxwm::errors::MainError;
+use std::path::Path;
use std::path::PathBuf;
-fn main() -> Result<(), Box<dyn std::error::Error>> {
- let arguments: Vec<String> = std::env::args().collect();
+static CONFIG_FILE: &str = "config.lua";
+static TEMPLATE: &str = include_str!("../../templates/config.lua");
- let mut custom_config_path: Option<PathBuf> = None;
+enum Args {
+ Exit,
+ Arguments(Vec<String>),
+ Error(MainError),
+}
- match arguments.get(1).map(|string| string.as_str()) {
- Some("--version") => {
- println!("oxwm {}", env!("CARGO_PKG_VERSION"));
- return Ok(());
- }
- Some("--help") => {
- print_help();
- return Ok(());
- }
- Some("--init") => {
- init_config()?;
- return Ok(());
- }
- Some("--config") => {
- if let Some(path) = arguments.get(2) {
- custom_config_path = Some(PathBuf::from(path));
- } else {
- eprintln!("Error: --config requires a path argument");
- std::process::exit(1);
- }
- }
- _ => {}
- }
+fn main() -> Result<(), MainError> {
+ let arguments = match process_args() {
+ Args::Exit => return Ok(()),
+ Args::Arguments(v) => v,
+ Args::Error(e) => return Err(e),
+ };
- let (config, config_error) = load_config(custom_config_path)?;
+ let (config, config_warning) = load_config(arguments.get(2))?;
- let mut window_manager = oxwm::window_manager::WindowManager::new(config)?;
+ let mut window_manager = match oxwm::window_manager::WindowManager::new(config) {
+ Ok(wm) => wm,
+ Err(e) => return Err(MainError::CouldNotStartWm(e)),
+ };
- if let Some(warning) = config_warning {
- eprintln!("{warning}");
- window_manager.show_migration_overlay();
+ if let Some(error) = config_error {
++ // Change show_startup_config_error to accept a ConfigError instead of
++ // a string slice.
++ let error = format!("{error}");
+ window_manager.show_startup_config_error(&error);
}
- let should_restart = window_manager.run()?;
+ let should_restart = match window_manager.run() {
+ Ok(sr) => sr,
+ Err(e) => return Err(MainError::BadRestartStatus(e)),
+ };
drop(window_manager);