2020-07-17 03:31:09 +02:00
|
|
|
|
/*++
|
|
|
|
|
Copyright (c) Microsoft Corporation
|
|
|
|
|
Licensed under the MIT license.
|
|
|
|
|
|
|
|
|
|
Module Name:
|
|
|
|
|
- TerminalSettingsSerializationHelpers.h
|
|
|
|
|
|
|
|
|
|
Abstract:
|
|
|
|
|
- Specializations of the JsonUtils helpers for things that might end up in a
|
|
|
|
|
settings document.
|
|
|
|
|
|
|
|
|
|
--*/
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "pch.h"
|
|
|
|
|
|
|
|
|
|
#include "JsonUtils.h"
|
|
|
|
|
#include "SettingsTypes.h"
|
|
|
|
|
|
2021-03-17 21:47:24 +01:00
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Core::CursorStyle)
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
2021-01-20 20:36:07 +01:00
|
|
|
|
static constexpr std::array<pair_type, 6> mappings = {
|
2020-07-17 03:31:09 +02:00
|
|
|
|
pair_type{ "bar", ValueType::Bar },
|
|
|
|
|
pair_type{ "vintage", ValueType::Vintage },
|
|
|
|
|
pair_type{ "underscore", ValueType::Underscore },
|
2021-01-20 20:36:07 +01:00
|
|
|
|
pair_type{ "doubleUnderscore", ValueType::DoubleUnderscore },
|
2020-07-17 03:31:09 +02:00
|
|
|
|
pair_type{ "filledBox", ValueType::FilledBox },
|
|
|
|
|
pair_type{ "emptyBox", ValueType::EmptyBox }
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Windows::UI::Xaml::Media::Stretch)
|
|
|
|
|
{
|
|
|
|
|
static constexpr std::array<pair_type, 4> mappings = {
|
|
|
|
|
pair_type{ "uniformToFill", ValueType::UniformToFill },
|
|
|
|
|
pair_type{ "none", ValueType::None },
|
|
|
|
|
pair_type{ "fill", ValueType::Fill },
|
|
|
|
|
pair_type{ "uniform", ValueType::Uniform }
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2021-03-17 21:47:24 +01:00
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Control::ScrollbarState)
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
|
|
|
|
static constexpr std::array<pair_type, 2> mappings = {
|
|
|
|
|
pair_type{ "visible", ValueType::Visible },
|
|
|
|
|
pair_type{ "hidden", ValueType::Hidden }
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2020-11-18 23:55:10 +01:00
|
|
|
|
JSON_FLAG_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::BellStyle)
|
2020-10-16 00:27:27 +02:00
|
|
|
|
{
|
2021-05-25 00:51:03 +02:00
|
|
|
|
static constexpr std::array<pair_type, 6> mappings = {
|
2020-11-18 23:55:10 +01:00
|
|
|
|
pair_type{ "none", AllClear },
|
|
|
|
|
pair_type{ "audible", ValueType::Audible },
|
2021-05-25 00:51:03 +02:00
|
|
|
|
pair_type{ "visual", ValueType::Window | ValueType::Taskbar },
|
|
|
|
|
pair_type{ "window", ValueType::Window },
|
|
|
|
|
pair_type{ "taskbar", ValueType::Taskbar },
|
2020-11-18 23:55:10 +01:00
|
|
|
|
pair_type{ "all", AllSet },
|
2020-10-16 00:27:27 +02:00
|
|
|
|
};
|
2020-11-18 23:55:10 +01:00
|
|
|
|
|
|
|
|
|
auto FromJson(const Json::Value& json)
|
|
|
|
|
{
|
|
|
|
|
if (json.isBool())
|
|
|
|
|
{
|
|
|
|
|
return json.asBool() ? AllSet : AllClear;
|
|
|
|
|
}
|
|
|
|
|
return BaseFlagMapper::FromJson(json);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CanConvert(const Json::Value& json)
|
|
|
|
|
{
|
|
|
|
|
return BaseFlagMapper::CanConvert(json) || json.isBool();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Json::Value ToJson(const ::winrt::Microsoft::Terminal::Settings::Model::BellStyle& bellStyle)
|
|
|
|
|
{
|
|
|
|
|
return BaseFlagMapper::ToJson(bellStyle);
|
|
|
|
|
}
|
2020-10-16 00:27:27 +02:00
|
|
|
|
};
|
|
|
|
|
|
2020-12-03 00:14:11 +01:00
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::ConvergedAlignment)
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
|
|
|
|
// reduce repetition
|
|
|
|
|
static constexpr std::array<pair_type, 9> mappings = {
|
2020-12-03 00:14:11 +01:00
|
|
|
|
pair_type{ "center", ValueType::Horizontal_Center | ValueType::Vertical_Center },
|
|
|
|
|
pair_type{ "topLeft", ValueType::Horizontal_Left | ValueType::Vertical_Top },
|
|
|
|
|
pair_type{ "bottomLeft", ValueType::Horizontal_Left | ValueType::Vertical_Bottom },
|
|
|
|
|
pair_type{ "left", ValueType::Horizontal_Left | ValueType::Vertical_Center },
|
|
|
|
|
pair_type{ "topRight", ValueType::Horizontal_Right | ValueType::Vertical_Top },
|
|
|
|
|
pair_type{ "bottomRight", ValueType::Horizontal_Right | ValueType::Vertical_Bottom },
|
|
|
|
|
pair_type{ "right", ValueType::Horizontal_Right | ValueType::Vertical_Center },
|
|
|
|
|
pair_type{ "top", ValueType::Horizontal_Center | ValueType::Vertical_Top },
|
|
|
|
|
pair_type{ "bottom", ValueType::Horizontal_Center | ValueType::Vertical_Bottom }
|
2020-07-17 03:31:09 +02:00
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2021-03-17 21:47:24 +01:00
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Control::TextAntialiasingMode)
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
|
|
|
|
static constexpr std::array<pair_type, 3> mappings = {
|
|
|
|
|
pair_type{ "grayscale", ValueType::Grayscale },
|
|
|
|
|
pair_type{ "cleartype", ValueType::Cleartype },
|
|
|
|
|
pair_type{ "aliased", ValueType::Aliased }
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Type Description:
|
|
|
|
|
// - Helper for converting a user-specified closeOnExit value to its corresponding enum
|
2020-10-06 18:56:59 +02:00
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::CloseOnExitMode)
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(3) = {
|
|
|
|
|
pair_type{ "always", ValueType::Always },
|
|
|
|
|
pair_type{ "graceful", ValueType::Graceful },
|
|
|
|
|
pair_type{ "never", ValueType::Never },
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Override mapping parser to add boolean parsing
|
2020-10-06 18:56:59 +02:00
|
|
|
|
::winrt::Microsoft::Terminal::Settings::Model::CloseOnExitMode FromJson(const Json::Value& json)
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
|
|
|
|
if (json.isBool())
|
|
|
|
|
{
|
|
|
|
|
return json.asBool() ? ValueType::Graceful : ValueType::Never;
|
|
|
|
|
}
|
|
|
|
|
return EnumMapper::FromJson(json);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CanConvert(const Json::Value& json)
|
|
|
|
|
{
|
|
|
|
|
return EnumMapper::CanConvert(json) || json.isBool();
|
|
|
|
|
}
|
2020-08-11 21:50:13 +02:00
|
|
|
|
|
|
|
|
|
using EnumMapper::TypeDescription;
|
2020-07-17 03:31:09 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// This specialization isn't using JSON_ENUM_MAPPER because we need to have a different
|
|
|
|
|
// value type (unsinged int) and return type (FontWeight struct). JSON_ENUM_MAPPER
|
|
|
|
|
// expects that the value type _is_ the return type.
|
|
|
|
|
template<>
|
2020-10-06 18:56:59 +02:00
|
|
|
|
struct ::Microsoft::Terminal::Settings::Model::JsonUtils::ConversionTrait<::winrt::Windows::UI::Text::FontWeight> :
|
|
|
|
|
public ::Microsoft::Terminal::Settings::Model::JsonUtils::EnumMapper<
|
2020-11-06 19:34:14 +01:00
|
|
|
|
uint16_t,
|
2020-10-06 18:56:59 +02:00
|
|
|
|
::Microsoft::Terminal::Settings::Model::JsonUtils::ConversionTrait<::winrt::Windows::UI::Text::FontWeight>>
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
|
|
|
|
// The original parser used the font weight getters Bold(), Normal(), etc.
|
|
|
|
|
// They were both cumbersome and *not constant expressions*
|
|
|
|
|
JSON_MAPPINGS(11) = {
|
2020-11-06 19:34:14 +01:00
|
|
|
|
pair_type{ "thin", static_cast<uint16_t>(100u) },
|
|
|
|
|
pair_type{ "extra-light", static_cast<uint16_t>(200u) },
|
|
|
|
|
pair_type{ "light", static_cast<uint16_t>(300u) },
|
|
|
|
|
pair_type{ "semi-light", static_cast<uint16_t>(350u) },
|
|
|
|
|
pair_type{ "normal", static_cast<uint16_t>(400u) },
|
|
|
|
|
pair_type{ "medium", static_cast<uint16_t>(500u) },
|
|
|
|
|
pair_type{ "semi-bold", static_cast<uint16_t>(600u) },
|
|
|
|
|
pair_type{ "bold", static_cast<uint16_t>(700u) },
|
|
|
|
|
pair_type{ "extra-bold", static_cast<uint16_t>(800u) },
|
|
|
|
|
pair_type{ "black", static_cast<uint16_t>(900u) },
|
|
|
|
|
pair_type{ "extra-black", static_cast<uint16_t>(950u) },
|
2020-07-17 03:31:09 +02:00
|
|
|
|
};
|
|
|
|
|
|
2020-12-15 20:33:52 +01:00
|
|
|
|
// Override mapping parser to add unsigned int parsing
|
2020-07-17 03:31:09 +02:00
|
|
|
|
auto FromJson(const Json::Value& json)
|
|
|
|
|
{
|
|
|
|
|
unsigned int value{ 400 };
|
|
|
|
|
if (json.isUInt())
|
|
|
|
|
{
|
|
|
|
|
value = json.asUInt();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
value = BaseEnumMapper::FromJson(json);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::winrt::Windows::UI::Text::FontWeight weight{
|
|
|
|
|
static_cast<uint16_t>(std::clamp(value, 100u, 990u))
|
|
|
|
|
};
|
|
|
|
|
return weight;
|
|
|
|
|
}
|
|
|
|
|
|
2020-11-17 01:37:19 +01:00
|
|
|
|
Json::Value ToJson(const ::winrt::Windows::UI::Text::FontWeight& val)
|
|
|
|
|
{
|
|
|
|
|
const auto weight{ val.Weight };
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
return BaseEnumMapper::ToJson(weight);
|
|
|
|
|
}
|
|
|
|
|
catch (SerializationError&)
|
|
|
|
|
{
|
|
|
|
|
return weight;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-17 03:31:09 +02:00
|
|
|
|
bool CanConvert(const Json::Value& json)
|
|
|
|
|
{
|
|
|
|
|
return BaseEnumMapper::CanConvert(json) || json.isUInt();
|
|
|
|
|
}
|
2020-08-11 21:50:13 +02:00
|
|
|
|
|
2020-12-15 20:33:52 +01:00
|
|
|
|
std::string TypeDescription() const
|
|
|
|
|
{
|
|
|
|
|
return EnumMapper::TypeDescription() + " or number";
|
|
|
|
|
}
|
2020-07-17 03:31:09 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Windows::UI::Xaml::ElementTheme)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(3) = {
|
|
|
|
|
pair_type{ "system", ValueType::Default },
|
|
|
|
|
pair_type{ "light", ValueType::Light },
|
|
|
|
|
pair_type{ "dark", ValueType::Dark },
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
Persist window layout on window close (#10972)
This commit adds initial support for saving window layout on application
close.
Done:
- Add user setting for if tabs should be maintained.
- Added events to track the number of open windows for the monarch, and
then save if you are the last window closing.
- Saves layout when the user explicitly hits the "Close Window" button.
- If the user manually closed all of their tabs (through the tab x
button or through closing all panes on the tab) then remove any saved
state.
- Saves in the ApplicationState file a list of actions the terminal can
perform to restore its layout and the window size/position
information.
- This saves an action to focus the correct pane, but this won't
actually work without #10978. Note that if you have a pane zoomed, it
does still zoom the correct pane, but when you unzoom it will have a
different pane selected.
Todo:
- multiple windows? Right now it can only handle loading/saving one
window.
- PR #11083 will save multiple windows.
- This also sometimes runs into the existing bug where multiple tabs
appear to be focused on opening.
Next Steps:
- The business logic of when the save is triggered can be adjusted as
necessary.
- Right now I am taking the pragmatic approach and just saving the state
as an array of objects, but only ever populate it with 1, that way
saving multiple windows in the future could be added without breaking
schema compatibility. Selfishly I'm hoping that handling multiple
windows could be spun off into another pr/feature for now.
- One possible thing that can maybe be done is that the commandline can
be augmented with a "--saved ##" attribute that would load from the
nth saved state if it exists. e.g. if there are 3 saved windows, on
first load it can spawn three wt --saved {0,1,2} that would reopen the
windows? This way there also exists a way to load a copy of a previous
window (if it is in the saved state).
- Is the application state something that is planned to be public/user
editable? In theory the user could since it is just json, but I don't
know what it buys them over just modifying their settings and
startupActions.
Validation Steps Performed:
- The happy path: open terminal -> set setting to true -> close terminal
-> reopen and see tabs. Tested with powershell/cmd/wsl windows.
- That closing all panes/tabs on their own will remove the saved
session.
- Open multiple windows, close windows and confirm that the last window
closed saves its state.
The generated file stores a sequence of actions that will be executed to
restore the terminal to its saved form.
References #8324
This is also one of the items on microsoft/terminal#5000
Closes #766
2021-09-09 00:44:53 +02:00
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::FirstWindowPreference)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(2) = {
|
|
|
|
|
pair_type{ "defaultProfile", ValueType::DefaultProfile },
|
|
|
|
|
pair_type{ "persistedWindowLayout", ValueType::PersistedWindowLayout },
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2020-10-06 18:56:59 +02:00
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::LaunchMode)
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
2020-10-15 00:19:51 +02:00
|
|
|
|
JSON_MAPPINGS(5) = {
|
2020-07-17 03:31:09 +02:00
|
|
|
|
pair_type{ "default", ValueType::DefaultMode },
|
|
|
|
|
pair_type{ "maximized", ValueType::MaximizedMode },
|
|
|
|
|
pair_type{ "fullscreen", ValueType::FullscreenMode },
|
2020-10-15 00:19:51 +02:00
|
|
|
|
pair_type{ "focus", ValueType::FocusMode },
|
|
|
|
|
pair_type{ "maximizedFocus", ValueType::MaximizedFocusMode },
|
2020-07-17 03:31:09 +02:00
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::UI::Xaml::Controls::TabViewWidthMode)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(3) = {
|
|
|
|
|
pair_type{ "equal", ValueType::Equal },
|
|
|
|
|
pair_type{ "titleLength", ValueType::SizeToContent },
|
|
|
|
|
pair_type{ "compact", ValueType::Compact },
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2020-10-06 18:56:59 +02:00
|
|
|
|
JSON_ENUM_MAPPER(winrt::Microsoft::Terminal::Settings::Model::ExpandCommandType)
|
2020-08-19 19:33:19 +02:00
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(2) = {
|
|
|
|
|
pair_type{ "profiles", ValueType::Profiles },
|
|
|
|
|
pair_type{ "schemes", ValueType::ColorSchemes },
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2021-03-17 21:47:24 +01:00
|
|
|
|
JSON_FLAG_MAPPER(::winrt::Microsoft::Terminal::Control::CopyFormat)
|
Add copyFormatting keybinding arg and array support (#6004)
Adds array support for the existing `copyFormatting` global setting.
This allows users to define which formats they would specifically like
to be copied.
A boolean value is still accepted and is translated to the following:
- `false` --> `"none"` or `[]`
- `true` --> `"all"` or `["html", "rtf"]`
This also adds `copyFormatting` as a keybinding arg for `copy`. As with
the global setting, a boolean value and array value is accepted.
CopyFormat is a WinRT enum where each accepted format is a flag.
Currently accepted formats include `html`, and `rtf`. A boolean value is
accepted and converted. `true` is a conjunction of all the formats.
`false` only includes plain text.
For the global setting, `null` is not accepted. We already have a
default value from before so no worries there.
For the keybinding arg, `null` (the default value) means that we just do
what the global arg says to do. Overall, the `copyFormatting` keybinding
arg is an override of the global setting **when using that keybinding**.
References #5212 - Spec for formatted copying
References #2690 - disable html copy
Validated behavior with every combination of values below:
- `copyFormatting` global: { `true`, `false`, `[]`, `["html"]` }
- `copyFormatting` copy arg:
{ `null`, `true`, `false`, `[]`, `[, "html"]`}
Closes #4191
Closes #5262
2020-08-15 03:02:24 +02:00
|
|
|
|
{
|
2021-01-15 00:57:59 +01:00
|
|
|
|
JSON_MAPPINGS(4) = {
|
Add copyFormatting keybinding arg and array support (#6004)
Adds array support for the existing `copyFormatting` global setting.
This allows users to define which formats they would specifically like
to be copied.
A boolean value is still accepted and is translated to the following:
- `false` --> `"none"` or `[]`
- `true` --> `"all"` or `["html", "rtf"]`
This also adds `copyFormatting` as a keybinding arg for `copy`. As with
the global setting, a boolean value and array value is accepted.
CopyFormat is a WinRT enum where each accepted format is a flag.
Currently accepted formats include `html`, and `rtf`. A boolean value is
accepted and converted. `true` is a conjunction of all the formats.
`false` only includes plain text.
For the global setting, `null` is not accepted. We already have a
default value from before so no worries there.
For the keybinding arg, `null` (the default value) means that we just do
what the global arg says to do. Overall, the `copyFormatting` keybinding
arg is an override of the global setting **when using that keybinding**.
References #5212 - Spec for formatted copying
References #2690 - disable html copy
Validated behavior with every combination of values below:
- `copyFormatting` global: { `true`, `false`, `[]`, `["html"]` }
- `copyFormatting` copy arg:
{ `null`, `true`, `false`, `[]`, `[, "html"]`}
Closes #4191
Closes #5262
2020-08-15 03:02:24 +02:00
|
|
|
|
pair_type{ "none", AllClear },
|
|
|
|
|
pair_type{ "html", ValueType::HTML },
|
|
|
|
|
pair_type{ "rtf", ValueType::RTF },
|
|
|
|
|
pair_type{ "all", AllSet },
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
auto FromJson(const Json::Value& json)
|
|
|
|
|
{
|
|
|
|
|
if (json.isBool())
|
|
|
|
|
{
|
|
|
|
|
return json.asBool() ? AllSet : AllClear;
|
|
|
|
|
}
|
|
|
|
|
return BaseFlagMapper::FromJson(json);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CanConvert(const Json::Value& json)
|
|
|
|
|
{
|
|
|
|
|
return BaseFlagMapper::CanConvert(json) || json.isBool();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2020-07-17 03:31:09 +02:00
|
|
|
|
// Type Description:
|
|
|
|
|
// - Helper for converting the initial position string into
|
|
|
|
|
// 2 coordinate values. We allow users to only provide one coordinate,
|
|
|
|
|
// thus, we use comma as the separator:
|
|
|
|
|
// (100, 100): standard input string
|
|
|
|
|
// (, 100), (100, ): if a value is missing, we set this value as a default
|
|
|
|
|
// (,): both x and y are set to default
|
|
|
|
|
// (abc, 100): if a value is not valid, we treat it as default
|
|
|
|
|
// (100, 100, 100): we only read the first two values, this is equivalent to (100, 100)
|
|
|
|
|
template<>
|
2020-10-06 18:56:59 +02:00
|
|
|
|
struct ::Microsoft::Terminal::Settings::Model::JsonUtils::ConversionTrait<::winrt::Microsoft::Terminal::Settings::Model::LaunchPosition>
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
2020-10-06 18:56:59 +02:00
|
|
|
|
::winrt::Microsoft::Terminal::Settings::Model::LaunchPosition FromJson(const Json::Value& json)
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
2020-10-06 18:56:59 +02:00
|
|
|
|
::winrt::Microsoft::Terminal::Settings::Model::LaunchPosition ret;
|
2020-07-17 03:31:09 +02:00
|
|
|
|
std::string initialPosition{ json.asString() };
|
|
|
|
|
static constexpr char singleCharDelim = ',';
|
|
|
|
|
std::stringstream tokenStream(initialPosition);
|
|
|
|
|
std::string token;
|
|
|
|
|
uint8_t initialPosIndex = 0;
|
|
|
|
|
|
|
|
|
|
// Get initial position values till we run out of delimiter separated values in the stream
|
|
|
|
|
// or we hit max number of allowable values (= 2)
|
|
|
|
|
// Non-numeral values or empty string will be caught as exception and we do not assign them
|
|
|
|
|
for (; std::getline(tokenStream, token, singleCharDelim) && (initialPosIndex < 2); initialPosIndex++)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
2020-08-28 05:49:16 +02:00
|
|
|
|
int64_t position = std::stol(token);
|
2020-07-17 03:31:09 +02:00
|
|
|
|
if (initialPosIndex == 0)
|
|
|
|
|
{
|
2020-08-28 05:49:16 +02:00
|
|
|
|
ret.X = position;
|
2020-07-17 03:31:09 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (initialPosIndex == 1)
|
|
|
|
|
{
|
2020-08-28 05:49:16 +02:00
|
|
|
|
ret.Y = position;
|
2020-07-17 03:31:09 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (...)
|
|
|
|
|
{
|
|
|
|
|
// Do nothing
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CanConvert(const Json::Value& json)
|
|
|
|
|
{
|
|
|
|
|
return json.isString();
|
|
|
|
|
}
|
2020-08-11 21:50:13 +02:00
|
|
|
|
|
2020-10-06 18:56:59 +02:00
|
|
|
|
Json::Value ToJson(const ::winrt::Microsoft::Terminal::Settings::Model::LaunchPosition& val)
|
2020-09-17 20:27:46 +02:00
|
|
|
|
{
|
|
|
|
|
std::stringstream ss;
|
|
|
|
|
if (val.X)
|
|
|
|
|
{
|
|
|
|
|
ss << val.X.Value();
|
|
|
|
|
}
|
|
|
|
|
ss << ",";
|
|
|
|
|
if (val.Y)
|
|
|
|
|
{
|
|
|
|
|
ss << val.Y.Value();
|
|
|
|
|
}
|
|
|
|
|
return ss.str();
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-11 21:50:13 +02:00
|
|
|
|
std::string TypeDescription() const
|
|
|
|
|
{
|
|
|
|
|
return "x, y";
|
|
|
|
|
}
|
2020-07-17 03:31:09 +02:00
|
|
|
|
};
|
|
|
|
|
|
2021-09-20 19:08:13 +02:00
|
|
|
|
struct IntAsFloatPercentConversionTrait : ::Microsoft::Terminal::Settings::Model::JsonUtils::ConversionTrait<double>
|
|
|
|
|
{
|
|
|
|
|
double FromJson(const Json::Value& json)
|
|
|
|
|
{
|
|
|
|
|
return ::base::saturated_cast<double>(json.asUInt()) / 100.0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CanConvert(const Json::Value& json)
|
|
|
|
|
{
|
|
|
|
|
if (!json.isUInt())
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
const auto value = json.asUInt();
|
|
|
|
|
return value >= 0 && value <= 100;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Json::Value ToJson(const double& val)
|
|
|
|
|
{
|
|
|
|
|
return std::clamp(::base::saturated_cast<uint32_t>(std::round(val * 100.0)), 0u, 100u);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string TypeDescription() const
|
|
|
|
|
{
|
|
|
|
|
return "number (>= 0, <=100)";
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
Support for navigating panes by MRU (#8183)
Adds a "move to previous pane" and "move to next pane" keybinding, which
navigates to the last/first focused pane
We assign pane IDs on creation and maintain a vector of active pane IDs
in MRU order. Navigating panes by MRU then requires specifying which
pane ID we want to focus.
From our offline discussion (thanks @zadjii-msft for the concise
description):
> For the record, the full spec I'm imagining is:
>
> { command": { "action": "focus(Next|Prev)Pane", "order": "inOrder"|"mru", "useSwitcher": true|false } },
>
> and order defaults to mru, and useSwitcher will default to true, when
> there is a switcher. So
>
> { command": { "action": "focusNextPane" } },
> { command": { "action": "focusNextPane", "order": "mru" } },
>
> these are the same action. (but right now we don't support the order
> param)
>
> Then there'll be another PR for "focusPane(target=id)"
>
> Then a third PR for "focus(Next|Prev)Pane(order=inOrder)"
> for the record, I prefer this approach over the "one action to rule
> them all" version with both target and order/direction as params,
> because I don't like the confusion of what happens if there's both
> target and order/direction provided.
References #1000
Closes #2871
2020-12-11 19:36:05 +01:00
|
|
|
|
// Possible FocusDirection values
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::FocusDirection)
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
2021-08-26 19:58:56 +02:00
|
|
|
|
JSON_MAPPINGS(8) = {
|
2020-07-17 03:31:09 +02:00
|
|
|
|
pair_type{ "left", ValueType::Left },
|
|
|
|
|
pair_type{ "right", ValueType::Right },
|
|
|
|
|
pair_type{ "up", ValueType::Up },
|
|
|
|
|
pair_type{ "down", ValueType::Down },
|
Support for navigating panes by MRU (#8183)
Adds a "move to previous pane" and "move to next pane" keybinding, which
navigates to the last/first focused pane
We assign pane IDs on creation and maintain a vector of active pane IDs
in MRU order. Navigating panes by MRU then requires specifying which
pane ID we want to focus.
From our offline discussion (thanks @zadjii-msft for the concise
description):
> For the record, the full spec I'm imagining is:
>
> { command": { "action": "focus(Next|Prev)Pane", "order": "inOrder"|"mru", "useSwitcher": true|false } },
>
> and order defaults to mru, and useSwitcher will default to true, when
> there is a switcher. So
>
> { command": { "action": "focusNextPane" } },
> { command": { "action": "focusNextPane", "order": "mru" } },
>
> these are the same action. (but right now we don't support the order
> param)
>
> Then there'll be another PR for "focusPane(target=id)"
>
> Then a third PR for "focus(Next|Prev)Pane(order=inOrder)"
> for the record, I prefer this approach over the "one action to rule
> them all" version with both target and order/direction as params,
> because I don't like the confusion of what happens if there's both
> target and order/direction provided.
References #1000
Closes #2871
2020-12-11 19:36:05 +01:00
|
|
|
|
pair_type{ "previous", ValueType::Previous },
|
2021-08-17 00:33:23 +02:00
|
|
|
|
pair_type{ "previousInOrder", ValueType::PreviousInOrder },
|
|
|
|
|
pair_type{ "nextInOrder", ValueType::NextInOrder },
|
2021-08-26 19:58:56 +02:00
|
|
|
|
pair_type{ "first", ValueType::First },
|
Support for navigating panes by MRU (#8183)
Adds a "move to previous pane" and "move to next pane" keybinding, which
navigates to the last/first focused pane
We assign pane IDs on creation and maintain a vector of active pane IDs
in MRU order. Navigating panes by MRU then requires specifying which
pane ID we want to focus.
From our offline discussion (thanks @zadjii-msft for the concise
description):
> For the record, the full spec I'm imagining is:
>
> { command": { "action": "focus(Next|Prev)Pane", "order": "inOrder"|"mru", "useSwitcher": true|false } },
>
> and order defaults to mru, and useSwitcher will default to true, when
> there is a switcher. So
>
> { command": { "action": "focusNextPane" } },
> { command": { "action": "focusNextPane", "order": "mru" } },
>
> these are the same action. (but right now we don't support the order
> param)
>
> Then there'll be another PR for "focusPane(target=id)"
>
> Then a third PR for "focus(Next|Prev)Pane(order=inOrder)"
> for the record, I prefer this approach over the "one action to rule
> them all" version with both target and order/direction as params,
> because I don't like the confusion of what happens if there's both
> target and order/direction provided.
References #1000
Closes #2871
2020-12-11 19:36:05 +01:00
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Possible ResizeDirection values
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::ResizeDirection)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(4) = {
|
|
|
|
|
pair_type{ "left", ValueType::Left },
|
|
|
|
|
pair_type{ "right", ValueType::Right },
|
|
|
|
|
pair_type{ "up", ValueType::Up },
|
|
|
|
|
pair_type{ "down", ValueType::Down }
|
2020-07-17 03:31:09 +02:00
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Possible SplitState values
|
2021-09-15 22:14:57 +02:00
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::SplitDirection)
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
2021-09-15 22:14:57 +02:00
|
|
|
|
JSON_MAPPINGS(7) = {
|
2020-07-17 03:31:09 +02:00
|
|
|
|
pair_type{ "auto", ValueType::Automatic },
|
2021-09-15 22:14:57 +02:00
|
|
|
|
pair_type{ "up", ValueType::Up },
|
|
|
|
|
pair_type{ "right", ValueType::Right },
|
|
|
|
|
pair_type{ "down", ValueType::Down },
|
|
|
|
|
pair_type{ "left", ValueType::Left },
|
|
|
|
|
pair_type{ "vertical", ValueType::Right },
|
|
|
|
|
pair_type{ "horizontal", ValueType::Down },
|
2020-07-17 03:31:09 +02:00
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Possible SplitType values
|
2020-10-06 18:56:59 +02:00
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::SplitType)
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
Persist window layout on window close (#10972)
This commit adds initial support for saving window layout on application
close.
Done:
- Add user setting for if tabs should be maintained.
- Added events to track the number of open windows for the monarch, and
then save if you are the last window closing.
- Saves layout when the user explicitly hits the "Close Window" button.
- If the user manually closed all of their tabs (through the tab x
button or through closing all panes on the tab) then remove any saved
state.
- Saves in the ApplicationState file a list of actions the terminal can
perform to restore its layout and the window size/position
information.
- This saves an action to focus the correct pane, but this won't
actually work without #10978. Note that if you have a pane zoomed, it
does still zoom the correct pane, but when you unzoom it will have a
different pane selected.
Todo:
- multiple windows? Right now it can only handle loading/saving one
window.
- PR #11083 will save multiple windows.
- This also sometimes runs into the existing bug where multiple tabs
appear to be focused on opening.
Next Steps:
- The business logic of when the save is triggered can be adjusted as
necessary.
- Right now I am taking the pragmatic approach and just saving the state
as an array of objects, but only ever populate it with 1, that way
saving multiple windows in the future could be added without breaking
schema compatibility. Selfishly I'm hoping that handling multiple
windows could be spun off into another pr/feature for now.
- One possible thing that can maybe be done is that the commandline can
be augmented with a "--saved ##" attribute that would load from the
nth saved state if it exists. e.g. if there are 3 saved windows, on
first load it can spawn three wt --saved {0,1,2} that would reopen the
windows? This way there also exists a way to load a copy of a previous
window (if it is in the saved state).
- Is the application state something that is planned to be public/user
editable? In theory the user could since it is just json, but I don't
know what it buys them over just modifying their settings and
startupActions.
Validation Steps Performed:
- The happy path: open terminal -> set setting to true -> close terminal
-> reopen and see tabs. Tested with powershell/cmd/wsl windows.
- That closing all panes/tabs on their own will remove the saved
session.
- Open multiple windows, close windows and confirm that the last window
closed saves its state.
The generated file stores a sequence of actions that will be executed to
restore the terminal to its saved form.
References #8324
This is also one of the items on microsoft/terminal#5000
Closes #766
2021-09-09 00:44:53 +02:00
|
|
|
|
JSON_MAPPINGS(2) = {
|
|
|
|
|
pair_type{ "manual", ValueType::Manual },
|
2020-07-17 03:31:09 +02:00
|
|
|
|
pair_type{ "duplicate", ValueType::Duplicate },
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2020-10-06 18:56:59 +02:00
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::SettingsTarget)
|
2020-07-17 03:31:09 +02:00
|
|
|
|
{
|
2020-12-11 22:34:57 +01:00
|
|
|
|
JSON_MAPPINGS(4) = {
|
2020-07-17 03:31:09 +02:00
|
|
|
|
pair_type{ "settingsFile", ValueType::SettingsFile },
|
|
|
|
|
pair_type{ "defaultsFile", ValueType::DefaultsFile },
|
|
|
|
|
pair_type{ "allFiles", ValueType::AllFiles },
|
2020-12-11 22:34:57 +01:00
|
|
|
|
pair_type{ "settingsUI", ValueType::SettingsUI },
|
2020-07-17 03:31:09 +02:00
|
|
|
|
};
|
|
|
|
|
};
|
2020-08-11 16:03:12 +02:00
|
|
|
|
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Windows::System::VirtualKey)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(3) = {
|
|
|
|
|
pair_type{ "ctrl", ValueType::Control },
|
|
|
|
|
pair_type{ "alt", ValueType::Menu },
|
|
|
|
|
pair_type{ "shift", ValueType::Shift },
|
|
|
|
|
};
|
|
|
|
|
};
|
2020-11-05 15:28:16 +01:00
|
|
|
|
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::TabSwitcherMode)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(3) = {
|
|
|
|
|
pair_type{ "mru", ValueType::MostRecentlyUsed },
|
|
|
|
|
pair_type{ "inOrder", ValueType::InOrder },
|
|
|
|
|
pair_type{ "disabled", ValueType::Disabled },
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
auto FromJson(const Json::Value& json)
|
|
|
|
|
{
|
|
|
|
|
if (json.isBool())
|
|
|
|
|
{
|
|
|
|
|
return json.asBool() ? ValueType::MostRecentlyUsed : ValueType::Disabled;
|
|
|
|
|
}
|
|
|
|
|
return BaseEnumMapper::FromJson(json);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool CanConvert(const Json::Value& json)
|
|
|
|
|
{
|
|
|
|
|
return BaseEnumMapper::CanConvert(json) || json.isBool();
|
|
|
|
|
}
|
|
|
|
|
};
|
2020-11-25 23:09:27 +01:00
|
|
|
|
|
|
|
|
|
// Possible Direction values
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::MoveTabDirection)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(2) = {
|
|
|
|
|
pair_type{ "forward", ValueType::Forward },
|
|
|
|
|
pair_type{ "backward", ValueType::Backward },
|
|
|
|
|
};
|
|
|
|
|
};
|
2020-12-03 17:15:31 +01:00
|
|
|
|
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::CommandPaletteLaunchMode)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(2) = {
|
|
|
|
|
pair_type{ "action", ValueType::Action },
|
|
|
|
|
pair_type{ "commandLine", ValueType::CommandLine },
|
|
|
|
|
};
|
|
|
|
|
};
|
Add `findNext`, `findPrev` actions (#8917)
This PR is a resurrection of #8522. @Hegunumo has apparently deleted
their account, but the contribution was still valuable. I'm just here to
get it across the finish line.
This PR adds new action for navigating to the next & previous search
results. These actions are unbound by default. These actions can be used
from directly within the search dialog also, to immediately navigate the
results.
Furthermore, if you have a search started, and close the search box,
then press this keybinding, _it will still perform the search_. So you
can just hit <kbd>F3</kbd> repeatedly with the dialog closed to keep
searching new results. Neat!
If you dispatch the action on the key down, then dismiss a selection on
a key up, we'll end up immediately destroying the selection when you
release the bound key. That's annoying. It also bothers @carlos-zamora
in #3758. However, I _think_ we can just only dismiss the selection on a
key up. I _think_ that's fine. It _seems_ fine so far. We've got an
entire release cycle to futz with it.
## Validation Steps Performed
I've played with it all day and it seems _crisp_.
Closes #7695
Co-authored-by: Kiminori Kaburagi <yukawa_hidenori@icloud.com>
2021-02-18 20:21:35 +01:00
|
|
|
|
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::FindMatchDirection)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(2) = {
|
|
|
|
|
pair_type{ "next", ValueType::Next },
|
|
|
|
|
pair_type{ "prev", ValueType::Previous },
|
|
|
|
|
};
|
|
|
|
|
};
|
2021-02-19 22:09:17 +01:00
|
|
|
|
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::WindowingMode)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(3) = {
|
|
|
|
|
pair_type{ "useNew", ValueType::UseNew },
|
|
|
|
|
pair_type{ "useAnyExisting", ValueType::UseAnyExisting },
|
|
|
|
|
pair_type{ "useExisting", ValueType::UseExisting },
|
|
|
|
|
};
|
|
|
|
|
};
|
2021-04-29 00:25:48 +02:00
|
|
|
|
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::DesktopBehavior)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(3) = {
|
|
|
|
|
pair_type{ "any", ValueType::Any },
|
|
|
|
|
pair_type{ "toCurrent", ValueType::ToCurrent },
|
|
|
|
|
pair_type{ "onCurrent", ValueType::OnCurrent },
|
|
|
|
|
};
|
|
|
|
|
};
|
Add `"monitor": "any"|"toCurrent"|"toMouse"` setting to globalSummon (#10092)
#### ⚠️ this pr targets #9977
## Summary of the Pull Request
This adds support for part of the `monitor` property for `globalSummon`. It also goes a little off-spec:
```json
"monitor": "any"|"toCurrent"|"toMouse"
```
* `monitor`: This controls the monitor that the window will be summoned from/to
- `"any"`: Summon the MRU window, regardless of which monitor it's currently on.
- `"toCurrent"`/omitted: (_default_): Summon the MRU window **TO** the monitor with the current **foreground** window.
- [**NEW**] `"toMouse"`: Summon the MRU window **TO** the monitor where the **mouse** cursor is.
When I was playing with this, It felt like `toMouse` was always what I wanted, not `toCurrent`. We can always just comment that out if we think that's contentious - I'm aware I didn't originally spec that.
## References
* Original thread: #653
* Spec: #9274
* megathread: #8888
## PR Checklist
* [x] Closes https://github.com/microsoft/terminal/projects/5#card-60325291
* [x] I work here
* [ ] Tests added/passed
* [ ] Requires documentation to be updated 😢
## Detailed Description of the Pull Request / Additional comments
I made `toMouse` the default because it felt better. fite-me.jpg
## Validation Steps Performed
my ever evolving blob:
```jsonc
{ "keys": "ctrl+`", "command": { "action": "quakeMode" } },
{ "keys": "ctrl+1", "command": { "action": "globalSummon" } },
// { "keys": "ctrl+2", "command": { "action": "globalSummon", "desktop": "toCurrent" } },
// { "keys": "ctrl+2", "command": { "action": "globalSummon", "toggleVisibility": false } },
// { "keys": "ctrl+2", "command": { "action": "globalSummon", "dropdownDuration": 2000 } },
{ "keys": "ctrl+2", "command": { "action": "globalSummon", "monitor": "any" } },
// { "keys": "ctrl+3", "command": { "action": "globalSummon", "desktop": "onCurrent" } },
{ "keys": "ctrl+3", "command": { "action": "globalSummon", "monitor": "toMouse" } },
// { "keys": "ctrl+4", "command": { "action": "globalSummon", "desktop": "any" } },
{ "keys": "ctrl+4", "command": { "action": "globalSummon", "monitor": "toMouse", "dropdownDuration": 500 } },
{ "keys": "ctrl+5", "command": { "action": "globalSummon", "dropdownDuration": 500 } },
```
2021-05-17 14:57:08 +02:00
|
|
|
|
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::MonitorBehavior)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(3) = {
|
|
|
|
|
pair_type{ "any", ValueType::Any },
|
|
|
|
|
pair_type{ "toCurrent", ValueType::ToCurrent },
|
|
|
|
|
pair_type{ "toMouse", ValueType::ToMouse },
|
|
|
|
|
};
|
|
|
|
|
};
|
Add an ENUM setting for disabling rendering "intense" text as bold (#10759)
## Summary of the Pull Request
This adds a new setting `intenseTextStyle`. It's a per-appearance, control setting, defaulting to `"all"`.
* When set to `"all"` or `["bold", "bright"]`, then we'll render text as both **bold** and bright (1.10 behavior)
* When set to `"bold"`, `["bold"]`, we'll render text formatted with `^[[1m` as **bold**, but not bright
* When set to `"bright"`, `["bright"]`, we'll render text formatted with `^[[1m` as bright, but not bold. This is the pre 1.10 behavior
* When set to `"none"`, we won't do anything special for it at all.
## references
* I last did this in #10648. This time it's an enum, so we can add bright in the future. It's got positive wording this time.
* ~We will want to add `"bright"` as a value in the future, to disable the auto intense->bright conversion.~ I just did that now.
* #5682 is related
## PR Checklist
* [x] Closes #10576
* [x] I seriously don't think we have an issue for "disable intense is bright", but I'm not crazy, people wanted that, right? https://github.com/microsoft/terminal/issues/2916#issuecomment-544880423 was the closest
* [x] I work here
* [x] Tests added/passed
* [x] https://github.com/MicrosoftDocs/terminal/pull/381
## Validation Steps Performed
<!-- ![image](https://user-images.githubusercontent.com/18356694/125480327-07f6b711-6bca-4c1b-9a76-75fc978c702d.png) -->
![image](https://user-images.githubusercontent.com/18356694/128929228-504933ee-cf50-43a2-9982-55110ba39191.png)
Yea that works. Printed some bold text, toggled it on, the text was no longer bold. hooray.
### EDIT, 10 Aug
```json
"intenseTextStyle": "none",
"intenseTextStyle": "bold",
"intenseTextStyle": "bright",
"intenseTextStyle": "all",
"intenseTextStyle": ["bold", "bright"],
```
all work now. Repro script:
```sh
printf "\e[1m[bold]\e[m[normal]\e[34m[blue]\e[1m[bold blue]\e[m\n"
```
2021-08-16 15:45:56 +02:00
|
|
|
|
|
2021-09-02 16:59:42 +02:00
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Control::ClearBufferType)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(3) = {
|
|
|
|
|
pair_type{ "all", ValueType::All },
|
|
|
|
|
pair_type{ "screen", ValueType::Screen },
|
|
|
|
|
pair_type{ "scrollback", ValueType::Scrollback },
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
Add an ENUM setting for disabling rendering "intense" text as bold (#10759)
## Summary of the Pull Request
This adds a new setting `intenseTextStyle`. It's a per-appearance, control setting, defaulting to `"all"`.
* When set to `"all"` or `["bold", "bright"]`, then we'll render text as both **bold** and bright (1.10 behavior)
* When set to `"bold"`, `["bold"]`, we'll render text formatted with `^[[1m` as **bold**, but not bright
* When set to `"bright"`, `["bright"]`, we'll render text formatted with `^[[1m` as bright, but not bold. This is the pre 1.10 behavior
* When set to `"none"`, we won't do anything special for it at all.
## references
* I last did this in #10648. This time it's an enum, so we can add bright in the future. It's got positive wording this time.
* ~We will want to add `"bright"` as a value in the future, to disable the auto intense->bright conversion.~ I just did that now.
* #5682 is related
## PR Checklist
* [x] Closes #10576
* [x] I seriously don't think we have an issue for "disable intense is bright", but I'm not crazy, people wanted that, right? https://github.com/microsoft/terminal/issues/2916#issuecomment-544880423 was the closest
* [x] I work here
* [x] Tests added/passed
* [x] https://github.com/MicrosoftDocs/terminal/pull/381
## Validation Steps Performed
<!-- ![image](https://user-images.githubusercontent.com/18356694/125480327-07f6b711-6bca-4c1b-9a76-75fc978c702d.png) -->
![image](https://user-images.githubusercontent.com/18356694/128929228-504933ee-cf50-43a2-9982-55110ba39191.png)
Yea that works. Printed some bold text, toggled it on, the text was no longer bold. hooray.
### EDIT, 10 Aug
```json
"intenseTextStyle": "none",
"intenseTextStyle": "bold",
"intenseTextStyle": "bright",
"intenseTextStyle": "all",
"intenseTextStyle": ["bold", "bright"],
```
all work now. Repro script:
```sh
printf "\e[1m[bold]\e[m[normal]\e[34m[blue]\e[1m[bold blue]\e[m\n"
```
2021-08-16 15:45:56 +02:00
|
|
|
|
JSON_FLAG_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::IntenseStyle)
|
|
|
|
|
{
|
|
|
|
|
static constexpr std::array<pair_type, 4> mappings = {
|
|
|
|
|
pair_type{ "none", AllClear },
|
|
|
|
|
pair_type{ "bold", ValueType::Bold },
|
|
|
|
|
pair_type{ "bright", ValueType::Bright },
|
|
|
|
|
pair_type{ "all", AllSet },
|
2021-09-02 16:59:42 +02:00
|
|
|
|
|
Add an ENUM setting for disabling rendering "intense" text as bold (#10759)
## Summary of the Pull Request
This adds a new setting `intenseTextStyle`. It's a per-appearance, control setting, defaulting to `"all"`.
* When set to `"all"` or `["bold", "bright"]`, then we'll render text as both **bold** and bright (1.10 behavior)
* When set to `"bold"`, `["bold"]`, we'll render text formatted with `^[[1m` as **bold**, but not bright
* When set to `"bright"`, `["bright"]`, we'll render text formatted with `^[[1m` as bright, but not bold. This is the pre 1.10 behavior
* When set to `"none"`, we won't do anything special for it at all.
## references
* I last did this in #10648. This time it's an enum, so we can add bright in the future. It's got positive wording this time.
* ~We will want to add `"bright"` as a value in the future, to disable the auto intense->bright conversion.~ I just did that now.
* #5682 is related
## PR Checklist
* [x] Closes #10576
* [x] I seriously don't think we have an issue for "disable intense is bright", but I'm not crazy, people wanted that, right? https://github.com/microsoft/terminal/issues/2916#issuecomment-544880423 was the closest
* [x] I work here
* [x] Tests added/passed
* [x] https://github.com/MicrosoftDocs/terminal/pull/381
## Validation Steps Performed
<!-- ![image](https://user-images.githubusercontent.com/18356694/125480327-07f6b711-6bca-4c1b-9a76-75fc978c702d.png) -->
![image](https://user-images.githubusercontent.com/18356694/128929228-504933ee-cf50-43a2-9982-55110ba39191.png)
Yea that works. Printed some bold text, toggled it on, the text was no longer bold. hooray.
### EDIT, 10 Aug
```json
"intenseTextStyle": "none",
"intenseTextStyle": "bold",
"intenseTextStyle": "bright",
"intenseTextStyle": "all",
"intenseTextStyle": ["bold", "bright"],
```
all work now. Repro script:
```sh
printf "\e[1m[bold]\e[m[normal]\e[34m[blue]\e[1m[bold blue]\e[m\n"
```
2021-08-16 15:45:56 +02:00
|
|
|
|
};
|
|
|
|
|
};
|
2021-09-10 19:16:41 +02:00
|
|
|
|
|
|
|
|
|
JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::InfoBarMessage)
|
|
|
|
|
{
|
|
|
|
|
JSON_MAPPINGS(2) = {
|
|
|
|
|
pair_type{ "closeOnExitInfo", ValueType::CloseOnExitInfo },
|
|
|
|
|
pair_type{ "keyboardServiceWarning", ValueType::KeyboardServiceWarning },
|
|
|
|
|
};
|
|
|
|
|
};
|