mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-18 13:55:23 -05:00
Move config loading logic to config.rs
Config loading was complexity that shouldn't be in main.
This commit is contained in:
parent
150d5bf98f
commit
c67f0ddf34
2 changed files with 47 additions and 37 deletions
|
@ -1123,7 +1123,43 @@ impl Config {
|
||||||
self.hide_cursor_when_typing
|
self.hide_cursor_when_typing
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load_from<P: Into<PathBuf>>(path: P) -> Result<Config> {
|
/// Load configuration
|
||||||
|
///
|
||||||
|
/// If a configuration file is given as a command line argument we don't
|
||||||
|
/// generate a default file. If an empty configuration file is given, i.e.
|
||||||
|
/// /dev/null, we load the compiled-in defaults.
|
||||||
|
pub fn load(options: &::cli::Options) -> Config {
|
||||||
|
let config_path = options.config_path()
|
||||||
|
.or_else(|| Config::installed_config())
|
||||||
|
.unwrap_or_else(|| {
|
||||||
|
Config::write_defaults()
|
||||||
|
.unwrap_or_else(|err| die!("Write defaults config failure: {}", err))
|
||||||
|
});
|
||||||
|
|
||||||
|
Config::load_from(&*config_path)
|
||||||
|
.map(|config| {
|
||||||
|
if let Some(path) = config.path().as_ref() {
|
||||||
|
info!("Config loaded from {}", path.display());
|
||||||
|
}
|
||||||
|
|
||||||
|
config
|
||||||
|
})
|
||||||
|
.unwrap_or_else(|err| {
|
||||||
|
use self::Error::*;
|
||||||
|
match err {
|
||||||
|
NotFound => {
|
||||||
|
die!("Config file not found at: {}", config_path.display());
|
||||||
|
},
|
||||||
|
Empty => {
|
||||||
|
err_println!("Empty config; Loading defaults");
|
||||||
|
Config::default()
|
||||||
|
},
|
||||||
|
_ => die!("{}", err),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn load_from<P: Into<PathBuf>>(path: P) -> Result<Config> {
|
||||||
let path = path.into();
|
let path = path.into();
|
||||||
let raw = Config::read_file(path.as_path())?;
|
let raw = Config::read_file(path.as_path())?;
|
||||||
let mut config: Config = serde_yaml::from_str(&raw)?;
|
let mut config: Config = serde_yaml::from_str(&raw)?;
|
||||||
|
|
46
src/main.rs
46
src/main.rs
|
@ -37,55 +37,29 @@ use alacritty::tty::{self, process_should_exit};
|
||||||
use alacritty::util::fmt::Red;
|
use alacritty::util::fmt::Red;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// Load command line options and config
|
|
||||||
let options = cli::Options::load();
|
|
||||||
let config = load_config(&options);
|
|
||||||
|
|
||||||
// Run alacritty
|
// Run alacritty
|
||||||
if let Err(err) = run(config, options) {
|
if let Err(err) = run() {
|
||||||
die!("Alacritty encountered an unrecoverable error:\n\n\t{}\n", Red(err));
|
die!("Encountered an unrecoverable error:\n\n\t{}\n", Red(err));
|
||||||
}
|
}
|
||||||
|
|
||||||
info!("Goodbye.");
|
info!("Goodbye.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load configuration
|
|
||||||
///
|
|
||||||
/// If a configuration file is given as a command line argument we don't
|
|
||||||
/// generate a default file. If an empty configuration file is given, i.e.
|
|
||||||
/// /dev/null, we load the compiled-in defaults.
|
|
||||||
fn load_config(options: &cli::Options) -> Config {
|
|
||||||
let config_path = options.config_path()
|
|
||||||
.or_else(|| Config::installed_config())
|
|
||||||
.unwrap_or_else(|| {
|
|
||||||
Config::write_defaults()
|
|
||||||
.unwrap_or_else(|err| die!("Write defaults config failure: {}", err))
|
|
||||||
});
|
|
||||||
|
|
||||||
Config::load_from(&*config_path).unwrap_or_else(|err| {
|
|
||||||
match err {
|
|
||||||
config::Error::NotFound => {
|
|
||||||
die!("Config file not found at: {}", config_path.display());
|
|
||||||
},
|
|
||||||
config::Error::Empty => {
|
|
||||||
err_println!("Empty config; Loading defaults");
|
|
||||||
Config::default()
|
|
||||||
},
|
|
||||||
_ => die!("{}", err),
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Run Alacritty
|
/// Run Alacritty
|
||||||
///
|
///
|
||||||
/// Creates a window, the terminal state, pty, I/O event loop, input processor,
|
/// Creates a window, the terminal state, pty, I/O event loop, input processor,
|
||||||
/// config change monitor, and runs the main display loop.
|
/// config change monitor, and runs the main display loop.
|
||||||
fn run(mut config: Config, options: cli::Options) -> Result<(), Box<Error>> {
|
fn run() -> Result<(), Box<Error>> {
|
||||||
// Initialize the logger first as to capture output from other subsystems
|
// Load command line options
|
||||||
logging::initialize(&options)?;
|
let options = cli::Options::load();
|
||||||
|
|
||||||
|
// Initialize the logger ASAP
|
||||||
|
logging::initialize(&options)?;
|
||||||
info!("Welcome to Alacritty.");
|
info!("Welcome to Alacritty.");
|
||||||
|
|
||||||
|
// Load config
|
||||||
|
let mut config = Config::load(&options);
|
||||||
|
|
||||||
// Create a display.
|
// Create a display.
|
||||||
//
|
//
|
||||||
// The display manages a window and can draw the terminal
|
// The display manages a window and can draw the terminal
|
||||||
|
|
Loading…
Reference in a new issue