mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-04-25 10:08:33 +02:00
feat(config): add fmt cmd & float rule comments
This commit adds a fmt command which allows users to prepare PRs to the configuration repository in a unified way. The 'custom' formatter basically just ensures that the yaml array is sorted by application name to make for easier diffs. Serializing of Option::None has been disabled to keep the yaml file more concise. Finally, an option for adding comments to float rules has been included as some of these rules can be quite esoteric and there is value in having them annotated with comments in the configuration to preserve and pass down the knowledge. The config generation command has been renamed to 'ahk-app-specific-configuration' (with a short alias of 'ahk-asc') to emphasise that an ahk file is being generated (similar to 'ahk-library'). re #62
This commit is contained in:
@@ -57,12 +57,22 @@ pub struct IdWithIdentifier {
|
||||
id: String,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)]
|
||||
pub struct IdWithIdentifierAndComment {
|
||||
kind: ApplicationIdentifier,
|
||||
id: String,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
comment: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)]
|
||||
pub struct ApplicationConfiguration {
|
||||
name: String,
|
||||
identifier: IdWithIdentifier,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
options: Option<Vec<ApplicationOptions>>,
|
||||
float_identifiers: Option<Vec<IdWithIdentifier>>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
float_identifiers: Option<Vec<IdWithIdentifierAndComment>>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)]
|
||||
@@ -73,7 +83,13 @@ impl ApplicationConfigurationGenerator {
|
||||
Ok(serde_yaml::from_str(content)?)
|
||||
}
|
||||
|
||||
pub fn generate(content: &str) -> Result<Vec<String>> {
|
||||
pub fn format(content: &str) -> Result<String> {
|
||||
let mut cfgen = Self::load(content)?;
|
||||
cfgen.sort_by(|a, b| a.name.cmp(&b.name));
|
||||
Ok(serde_yaml::to_string(&cfgen)?)
|
||||
}
|
||||
|
||||
pub fn generate_ahk(content: &str) -> Result<Vec<String>> {
|
||||
let mut cfgen = Self::load(content)?;
|
||||
cfgen.sort_by(|a, b| a.name.cmp(&b.name));
|
||||
|
||||
@@ -93,6 +109,7 @@ impl ApplicationConfigurationGenerator {
|
||||
if let ApplicationOptions::TrayAndMultiWindow = opt {
|
||||
lines.push(String::from("; If you have disabled minimize/close to tray for this application, you can delete/comment out the next line"));
|
||||
}
|
||||
|
||||
lines.push(opt.cfgen(&app.identifier.kind, &app.identifier.id));
|
||||
}
|
||||
}
|
||||
@@ -107,10 +124,16 @@ impl ApplicationConfigurationGenerator {
|
||||
// Don't want to send duped signals especially as configs get larger
|
||||
if !float_rules.contains(&float_rule) {
|
||||
float_rules.push(float_rule.clone());
|
||||
|
||||
if let Some(comment) = float.comment {
|
||||
lines.push(format!("; {}", comment));
|
||||
};
|
||||
|
||||
lines.push(float_rule);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lines.push(String::from(""));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user