From 9b837b68580efe3864d50a084d911a3b3ab112b7 Mon Sep 17 00:00:00 2001 From: "Dustin L. Howett" Date: Sun, 20 Aug 2023 18:08:33 -0500 Subject: [PATCH 1/2] Switch the schema depending on the branding we're being built for Ever since we started writing the entire settings file out ourselves, we've had the opportunity to control which schema it uses. This is a quality-of-life improvement for Preview users, and might make life easier for Dev users as well. One thing to consider is whether, if building Terminal in Debug+Dev mode, we should substitute in a `file:///` path. That would make the _local_ dev experience way cooler and cost us practically nothing. --- .../CascadiaSettingsSerialization.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettingsSerialization.cpp b/src/cascadia/TerminalSettingsModel/CascadiaSettingsSerialization.cpp index 542b4b8398d..70b6297b823 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettingsSerialization.cpp +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettingsSerialization.cpp @@ -1238,7 +1238,15 @@ Json::Value CascadiaSettings::ToJson() const // top-level json object auto json{ _globals->ToJson() }; json["$help"] = "https://aka.ms/terminal-documentation"; - json["$schema"] = "https://aka.ms/terminal-profiles-schema"; + json["$schema"] = +#if defined(WT_BRANDING_RELEASE) + "https://aka.ms/terminal-profiles-schema" +#elif defined(WT_BRANDING_PREVIEW) + "https://aka.ms/terminal-profiles-schema-preview" +#else + "https://raw.githubusercontent.com/microsoft/terminal/main/doc/cascadia/profiles.schema.json" +#endif + ; // "profiles" will always be serialized as an object Json::Value profiles{ Json::ValueType::objectValue }; From 742ab8f8e55873725b5258adb2823214a63edfcf Mon Sep 17 00:00:00 2001 From: Dustin Howett Date: Mon, 21 Aug 2023 16:21:08 -0500 Subject: [PATCH 2/2] Construct a fun, adorable path to the local file schema for Dev Debug builds --- .../CascadiaSettingsSerialization.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettingsSerialization.cpp b/src/cascadia/TerminalSettingsModel/CascadiaSettingsSerialization.cpp index 70b6297b823..3063f549494 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettingsSerialization.cpp +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettingsSerialization.cpp @@ -1227,6 +1227,15 @@ void CascadiaSettings::WriteSettingsToDisk() } } +#ifndef NDEBUG +static [[maybe_unused]] std::string _getDevPathToSchema() +{ + std::filesystem::path filePath{ __FILE__ }; + auto schemaPath = filePath.parent_path().parent_path().parent_path().parent_path() / "doc" / "cascadia" / "profiles.schema.json"; + return "file:///" + schemaPath.generic_string(); +} +#endif + // Method Description: // - Create a new serialized JsonObject from an instance of this class // Arguments: @@ -1243,7 +1252,9 @@ Json::Value CascadiaSettings::ToJson() const "https://aka.ms/terminal-profiles-schema" #elif defined(WT_BRANDING_PREVIEW) "https://aka.ms/terminal-profiles-schema-preview" -#else +#elif !defined(NDEBUG) // DEBUG mode + _getDevPathToSchema() // magic schema path that refers to the local source directory +#else // All other brandings "https://raw.githubusercontent.com/microsoft/terminal/main/doc/cascadia/profiles.schema.json" #endif ;