mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-07-09 14:42:44 +02:00
feat(asc): add json schema cmd and output
This commit adds a command to output a JSON Schema for the applications.yaml file maintained in the komorebi-application-specific-configuration repo, and also adds an up-to-date version of the JSON Schema as a file in the root of this repository so that users can reference it as an autocompletion source.
This commit is contained in:
@@ -155,6 +155,7 @@ pub enum SocketMessage {
|
|||||||
ToggleTitleBars,
|
ToggleTitleBars,
|
||||||
AddSubscriber(String),
|
AddSubscriber(String),
|
||||||
RemoveSubscriber(String),
|
RemoveSubscriber(String),
|
||||||
|
ApplicationSpecificConfigurationSchema,
|
||||||
NotificationSchema,
|
NotificationSchema,
|
||||||
SocketSchema,
|
SocketSchema,
|
||||||
StaticConfigSchema,
|
StaticConfigSchema,
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ use parking_lot::Mutex;
|
|||||||
use schemars::schema_for;
|
use schemars::schema_for;
|
||||||
use uds_windows::UnixStream;
|
use uds_windows::UnixStream;
|
||||||
|
|
||||||
|
use komorebi_core::config_generation::ApplicationConfiguration;
|
||||||
use komorebi_core::config_generation::IdWithIdentifier;
|
use komorebi_core::config_generation::IdWithIdentifier;
|
||||||
use komorebi_core::config_generation::MatchingStrategy;
|
use komorebi_core::config_generation::MatchingStrategy;
|
||||||
use komorebi_core::ApplicationIdentifier;
|
use komorebi_core::ApplicationIdentifier;
|
||||||
@@ -1176,6 +1177,14 @@ impl WindowManager {
|
|||||||
SocketMessage::AltFocusHack(enable) => {
|
SocketMessage::AltFocusHack(enable) => {
|
||||||
ALT_FOCUS_HACK.store(enable, Ordering::SeqCst);
|
ALT_FOCUS_HACK.store(enable, Ordering::SeqCst);
|
||||||
}
|
}
|
||||||
|
SocketMessage::ApplicationSpecificConfigurationSchema => {
|
||||||
|
let asc = schema_for!(Vec<ApplicationConfiguration>);
|
||||||
|
let schema = serde_json::to_string_pretty(&asc)?;
|
||||||
|
let socket = DATA_DIR.join("komorebic.sock");
|
||||||
|
|
||||||
|
let mut stream = UnixStream::connect(socket)?;
|
||||||
|
stream.write_all(schema.as_bytes())?;
|
||||||
|
}
|
||||||
SocketMessage::NotificationSchema => {
|
SocketMessage::NotificationSchema => {
|
||||||
let notification = schema_for!(Notification);
|
let notification = schema_for!(Notification);
|
||||||
let schema = serde_json::to_string_pretty(¬ification)?;
|
let schema = serde_json::to_string_pretty(¬ification)?;
|
||||||
|
|||||||
@@ -1087,6 +1087,9 @@ enum SubCommand {
|
|||||||
/// Fetch the latest version of applications.yaml from komorebi-application-specific-configuration
|
/// Fetch the latest version of applications.yaml from komorebi-application-specific-configuration
|
||||||
#[clap(alias = "fetch-asc")]
|
#[clap(alias = "fetch-asc")]
|
||||||
FetchAppSpecificConfiguration,
|
FetchAppSpecificConfiguration,
|
||||||
|
/// Generate a JSON Schema for applications.yaml
|
||||||
|
#[clap(alias = "asc-schema")]
|
||||||
|
ApplicationSpecificConfigurationSchema,
|
||||||
/// Generate a JSON Schema of subscription notifications
|
/// Generate a JSON Schema of subscription notifications
|
||||||
NotificationSchema,
|
NotificationSchema,
|
||||||
/// Generate a JSON Schema of socket messages
|
/// Generate a JSON Schema of socket messages
|
||||||
@@ -2095,6 +2098,11 @@ Stop-Process -Name:whkd -ErrorAction SilentlyContinue
|
|||||||
output_file.display()
|
output_file.display()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
SubCommand::ApplicationSpecificConfigurationSchema => {
|
||||||
|
with_komorebic_socket(|| {
|
||||||
|
send_message(&SocketMessage::ApplicationSpecificConfigurationSchema.as_bytes()?)
|
||||||
|
})?;
|
||||||
|
}
|
||||||
SubCommand::NotificationSchema => {
|
SubCommand::NotificationSchema => {
|
||||||
with_komorebic_socket(|| send_message(&SocketMessage::NotificationSchema.as_bytes()?))?;
|
with_komorebic_socket(|| send_message(&SocketMessage::NotificationSchema.as_bytes()?))?;
|
||||||
}
|
}
|
||||||
|
|||||||
+128
@@ -0,0 +1,128 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Array_of_ApplicationConfiguration",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/ApplicationConfiguration"
|
||||||
|
},
|
||||||
|
"definitions": {
|
||||||
|
"ApplicationConfiguration": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"identifier",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"float_identifiers": {
|
||||||
|
"type": [
|
||||||
|
"array",
|
||||||
|
"null"
|
||||||
|
],
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/IdWithIdentifierAndComment"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"identifier": {
|
||||||
|
"$ref": "#/definitions/IdWithIdentifier"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"type": [
|
||||||
|
"array",
|
||||||
|
"null"
|
||||||
|
],
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/ApplicationOptions"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ApplicationIdentifier": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"Exe",
|
||||||
|
"Class",
|
||||||
|
"Title"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ApplicationOptions": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"object_name_change",
|
||||||
|
"layered",
|
||||||
|
"border_overflow",
|
||||||
|
"tray_and_multi_window",
|
||||||
|
"force"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"IdWithIdentifier": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"id",
|
||||||
|
"kind"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"$ref": "#/definitions/ApplicationIdentifier"
|
||||||
|
},
|
||||||
|
"matching_strategy": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/MatchingStrategy"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "null"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"IdWithIdentifierAndComment": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"id",
|
||||||
|
"kind"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"comment": {
|
||||||
|
"type": [
|
||||||
|
"string",
|
||||||
|
"null"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"$ref": "#/definitions/ApplicationIdentifier"
|
||||||
|
},
|
||||||
|
"matching_strategy": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/MatchingStrategy"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "null"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"MatchingStrategy": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"Legacy",
|
||||||
|
"Equals",
|
||||||
|
"StartsWith",
|
||||||
|
"EndsWith",
|
||||||
|
"Contains",
|
||||||
|
"Regex"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user