From d716ec2c7dca1deb17e0de75b6a9d732958539dd Mon Sep 17 00:00:00 2001 From: Joshua Cao Date: Sun, 4 Feb 2024 23:25:05 -0800 Subject: [PATCH 1/2] Support relative path imports from config file --- CHANGELOG.md | 1 + alacritty/src/config/mod.rs | 18 +++++++++++++++--- alacritty/src/migrate.rs | 5 +++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20741f5187..0a389a7821 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - No unused-key warnings will be emitted for OS-specific config keys - Use built-in font for sextant symbols from `U+1FB00` to `U+1FB3B` - Kitty encoding is not used anymore for uncommon keys unless the protocol enabled +- Support relative path imports from config files ## 0.13.1 diff --git a/alacritty/src/config/mod.rs b/alacritty/src/config/mod.rs index a77ed770fb..36bf2eeca7 100644 --- a/alacritty/src/config/mod.rs +++ b/alacritty/src/config/mod.rs @@ -210,7 +210,7 @@ fn parse_config( let config = deserialize_config(path, false)?; // Merge config with imports. - let imports = load_imports(&config, config_paths, recursion_limit); + let imports = load_imports(&config, path, config_paths, recursion_limit); Ok(serde_utils::merge(imports, config)) } @@ -242,9 +242,14 @@ pub fn deserialize_config(path: &Path, warn_pruned: bool) -> Result { } /// Load all referenced configuration files. -fn load_imports(config: &Value, config_paths: &mut Vec, recursion_limit: usize) -> Value { +fn load_imports( + config: &Value, + base_path: &Path, + config_paths: &mut Vec, + recursion_limit: usize, +) -> Value { // Get paths for all imports. - let import_paths = match imports(config, recursion_limit) { + let import_paths = match imports(config, base_path, recursion_limit) { Ok(import_paths) => import_paths, Err(err) => { error!(target: LOG_TARGET_CONFIG, "{err}"); @@ -284,6 +289,7 @@ fn load_imports(config: &Value, config_paths: &mut Vec, recursion_limit /// Get all import paths for a configuration. pub fn imports( config: &Value, + base_path: &Path, recursion_limit: usize, ) -> StdResult>, String> { let imports = match config.get("import") { @@ -313,6 +319,12 @@ pub fn imports( path = home_dir.join(stripped); } + if path.is_relative() { + if let Some(config_path) = base_path.parent() { + path = config_path.join(path) + } + } + import_paths.push(Ok(path)); } diff --git a/alacritty/src/migrate.rs b/alacritty/src/migrate.rs index dbcfb2ae7d..6d116858b0 100644 --- a/alacritty/src/migrate.rs +++ b/alacritty/src/migrate.rs @@ -81,7 +81,7 @@ fn migrate_config( // Migrate config imports. if !options.skip_imports { - migrate_imports(options, &mut config, recursion_limit)?; + migrate_imports(options, &mut config, path, recursion_limit)?; } // Migrate deprecated field names to their new location. @@ -110,9 +110,10 @@ fn migrate_config( fn migrate_imports( options: &MigrateOptions, config: &mut Value, + base_path: &Path, recursion_limit: usize, ) -> Result<(), String> { - let imports = match config::imports(config, recursion_limit) { + let imports = match config::imports(config, base_path, recursion_limit) { Ok(imports) => imports, Err(err) => return Err(format!("import error: {err}")), }; From ef5ddf220c9ab4aaad0e44314d6cce7caf64be22 Mon Sep 17 00:00:00 2001 From: Joshua Cao Date: Sun, 23 Jun 2024 01:21:31 -0700 Subject: [PATCH 2/2] Update alacritty/src/config/mod.rs rename `config_path` to `base_path` based on reviewer suggestion Co-authored-by: Christian Duerr --- alacritty/src/config/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/alacritty/src/config/mod.rs b/alacritty/src/config/mod.rs index 36bf2eeca7..a822125f20 100644 --- a/alacritty/src/config/mod.rs +++ b/alacritty/src/config/mod.rs @@ -320,8 +320,8 @@ pub fn imports( } if path.is_relative() { - if let Some(config_path) = base_path.parent() { - path = config_path.join(path) + if let Some(base_path) = base_path.parent() { + path = base_path.join(path) } }