2019-05-03 00:29:04 +02:00
|
|
|
/*++
|
|
|
|
Copyright (c) Microsoft Corporation
|
|
|
|
Licensed under the MIT license.
|
|
|
|
|
|
|
|
Module Name:
|
|
|
|
- settings.hpp
|
|
|
|
|
|
|
|
Abstract:
|
|
|
|
- This module is used for all configurable settings in the console
|
|
|
|
|
|
|
|
Author(s):
|
|
|
|
- Michael Niksa (MiNiksa) 23-Jul-2014
|
|
|
|
- Paul Campbell (PaulCam) 23-Jul-2014
|
|
|
|
|
|
|
|
Revision History:
|
|
|
|
- From components of consrv.h
|
|
|
|
- This is a reduced/de-duplicated version of settings that were stored in the registry, link files, and in the console information state.
|
|
|
|
--*/
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "../buffer/out/TextAttribute.hpp"
|
|
|
|
|
|
|
|
// To prevent invisible windows, set a lower threshold on window alpha channel.
|
2019-11-01 18:33:09 +01:00
|
|
|
constexpr unsigned short MIN_WINDOW_OPACITY = 0x4D; // 0x4D is approximately 30% visible/opaque (70% transparent). Valid range is 0x00-0xff.
|
2019-05-03 00:29:04 +02:00
|
|
|
|
|
|
|
#include "ConsoleArguments.hpp"
|
|
|
|
#include "../inc/conattrs.hpp"
|
|
|
|
|
|
|
|
class Settings
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
Settings();
|
|
|
|
|
|
|
|
void ApplyDesktopSpecificDefaults();
|
|
|
|
|
|
|
|
void ApplyStartupInfo(const Settings* const pStartupSettings);
|
|
|
|
void ApplyCommandlineArguments(const ConsoleArguments& consoleArgs);
|
|
|
|
void InitFromStateInfo(_In_ PCONSOLE_STATE_INFO pStateInfo);
|
|
|
|
void Validate();
|
|
|
|
|
|
|
|
CONSOLE_STATE_INFO CreateConsoleStateInfo() const;
|
|
|
|
|
|
|
|
DWORD GetVirtTermLevel() const;
|
|
|
|
void SetVirtTermLevel(const DWORD dwVirtTermLevel);
|
|
|
|
|
|
|
|
bool IsAltF4CloseAllowed() const;
|
|
|
|
void SetAltF4CloseAllowed(const bool fAllowAltF4Close);
|
|
|
|
|
|
|
|
bool IsReturnOnNewlineAutomatic() const;
|
|
|
|
void SetAutomaticReturnOnNewline(const bool fAutoReturnOnNewline);
|
|
|
|
|
|
|
|
bool IsGridRenderingAllowedWorldwide() const;
|
|
|
|
void SetGridRenderingAllowedWorldwide(const bool fGridRenderingAllowed);
|
|
|
|
|
Add support for the DECSCNM screen mode (#3817)
## Summary of the Pull Request
This adds support for the [`DECSCNM`](https://vt100.net/docs/vt510-rm/DECSCNM.html) private mode escape sequence, which toggles the display between normal and reverse screen modes. When reversed, the background and foreground colors are switched. Tested manually, with [Vttest](https://invisible-island.net/vttest/), and with some new unit tests.
## References
This also fixes issue #72 for the most part, although if you toggle the mode too fast, there is no discernible flash.
## PR Checklist
* [x] Closes #3773
* [x] CLA signed. If not, go over [here](https://cla.opensource.microsoft.com/microsoft/Terminal) and sign the CLA
* [x] Tests added/passed
* [ ] Requires documentation to be updated
* [ ] I've discussed this with core contributors already. If not checked, I'm ready to accept this work might be rejected in favor of a different grand plan. Issue number where discussion took place: #xxx
## Detailed Description of the Pull Request / Additional comments
I've implemented this as a new flag in the `Settings` class, along with updates to the `LookupForegroundColor` and `LookupBackgroundColor` methods, to switch the returned foreground and background colors when that flag is set.
It also required a new private API in the `ConGetSet` interface to toggle the setting. And that API is then called from the `AdaptDispatch` class when the screen mode escape sequence is received.
The last thing needed was to add a step to the `HardReset` method, to reset the mode back to normal, which is one of the `RIS` requirements.
Note that this does currently work in the Windows Terminal, but once #2661 is implemented that may no longer be the case. It might become necessary to let the mode change sequences pass through conpty, and handle the color reversing on the client side.
## Validation Steps Performed
I've added a state machine test to make sure the escape sequence is dispatched correctly, and a screen buffer test to confirm that the mode change does alter the interpretation of colors as expected.
I've also confirmed that the various "light background" tests in Vttest now display correctly, and that the `tput flash` command (in a bash shell) does actually cause the screen to flash.
2020-01-22 23:29:50 +01:00
|
|
|
bool IsScreenReversed() const;
|
|
|
|
void SetScreenReversed(const bool fScreenReversed);
|
|
|
|
|
2019-05-03 00:29:04 +02:00
|
|
|
bool GetFilterOnPaste() const;
|
|
|
|
void SetFilterOnPaste(const bool fFilterOnPaste);
|
|
|
|
|
Allow FontInfo{,Base,Desired} to store a font name > 32 wch (#3107)
We now truncate the font name as it goes out to GDI APIs, in console API
servicing, and in the propsheet.
I attempted to defer truncating the font to as far up the stack as
possible, so as to make FontInfo usable for the broadest set of cases.
There were a couple questions that came up: I know that `Settings` gets
memset (memsat?) by the registry deserializer, and perhaps that's
another place for us to tackle. Right now, this pull request enables
fonts whose names are >= 32 characters _in Windows Terminal only_, but
the underpinnings are there for conhost as well. We'd need to explicitly
break at the API, or perhaps return a failure or log something to
telemetry.
* Should we log truncation at the API boundary to telemetry?
-> Later; followup filed (#3123)
* Should we fix Settings here, or later?
-> Later; followup filed (#3123)
* `TrueTypeFontList` is built out of things in winconp, the private
console header. Concern about interop structures.
-> Not used for interop, followup filed to clean it up (#3123)
* Is `unsigned int` right for codepage? For width?
-> Yes: codepage became UINT (from WORD) when we moved from Win16 to
Win32
This commit also includes a workaround for #3170. Growing
CONSOLE_INFORMATION made us lose the struct layout lottery during
release builds, and this was an expedient fix.
Closes #602.
Related to #3123.
2019-10-15 06:23:45 +02:00
|
|
|
const std::wstring_view GetLaunchFaceName() const;
|
|
|
|
void SetLaunchFaceName(const std::wstring_view launchFaceName);
|
2019-05-03 00:29:04 +02:00
|
|
|
|
|
|
|
UINT GetCodePage() const;
|
|
|
|
void SetCodePage(const UINT uCodePage);
|
|
|
|
|
|
|
|
UINT GetScrollScale() const;
|
|
|
|
void SetScrollScale(const UINT uScrollScale);
|
|
|
|
|
|
|
|
bool GetTrimLeadingZeros() const;
|
|
|
|
void SetTrimLeadingZeros(const bool fTrimLeadingZeros);
|
|
|
|
|
|
|
|
bool GetEnableColorSelection() const;
|
|
|
|
void SetEnableColorSelection(const bool fEnableColorSelection);
|
|
|
|
|
|
|
|
bool GetLineSelection() const;
|
|
|
|
void SetLineSelection(const bool bLineSelection);
|
|
|
|
|
2019-06-11 22:27:09 +02:00
|
|
|
bool GetWrapText() const;
|
|
|
|
void SetWrapText(const bool bWrapText);
|
2019-05-03 00:29:04 +02:00
|
|
|
|
2019-06-11 22:27:09 +02:00
|
|
|
bool GetCtrlKeyShortcutsDisabled() const;
|
|
|
|
void SetCtrlKeyShortcutsDisabled(const bool fCtrlKeyShortcutsDisabled);
|
2019-05-03 00:29:04 +02:00
|
|
|
|
|
|
|
BYTE GetWindowAlpha() const;
|
|
|
|
void SetWindowAlpha(const BYTE bWindowAlpha);
|
|
|
|
|
|
|
|
DWORD GetHotKey() const;
|
|
|
|
void SetHotKey(const DWORD dwHotKey);
|
|
|
|
|
|
|
|
bool IsStartupTitleIsLinkNameSet() const;
|
|
|
|
|
|
|
|
DWORD GetStartupFlags() const;
|
|
|
|
void SetStartupFlags(const DWORD dwStartupFlags);
|
|
|
|
void UnsetStartupFlag(const DWORD dwFlagToUnset);
|
|
|
|
|
|
|
|
WORD GetFillAttribute() const;
|
|
|
|
void SetFillAttribute(const WORD wFillAttribute);
|
|
|
|
|
|
|
|
WORD GetPopupFillAttribute() const;
|
|
|
|
void SetPopupFillAttribute(const WORD wPopupFillAttribute);
|
|
|
|
|
|
|
|
WORD GetShowWindow() const;
|
|
|
|
void SetShowWindow(const WORD wShowWindow);
|
|
|
|
|
|
|
|
WORD GetReserved() const;
|
|
|
|
void SetReserved(const WORD wReserved);
|
|
|
|
|
|
|
|
COORD GetScreenBufferSize() const;
|
|
|
|
void SetScreenBufferSize(const COORD dwScreenBufferSize);
|
|
|
|
|
|
|
|
COORD GetWindowSize() const;
|
|
|
|
void SetWindowSize(const COORD dwWindowSize);
|
|
|
|
|
|
|
|
bool IsWindowSizePixelsValid() const;
|
|
|
|
COORD GetWindowSizePixels() const;
|
|
|
|
void SetWindowSizePixels(const COORD dwWindowSizePixels);
|
|
|
|
|
|
|
|
COORD GetWindowOrigin() const;
|
|
|
|
void SetWindowOrigin(const COORD dwWindowOrigin);
|
|
|
|
|
|
|
|
DWORD GetFont() const;
|
|
|
|
void SetFont(const DWORD dwFont);
|
|
|
|
|
|
|
|
COORD GetFontSize() const;
|
|
|
|
void SetFontSize(const COORD dwFontSize);
|
|
|
|
|
|
|
|
UINT GetFontFamily() const;
|
|
|
|
void SetFontFamily(const UINT uFontFamily);
|
|
|
|
|
|
|
|
UINT GetFontWeight() const;
|
|
|
|
void SetFontWeight(const UINT uFontWeight);
|
|
|
|
|
|
|
|
const WCHAR* const GetFaceName() const;
|
|
|
|
bool IsFaceNameSet() const;
|
Allow FontInfo{,Base,Desired} to store a font name > 32 wch (#3107)
We now truncate the font name as it goes out to GDI APIs, in console API
servicing, and in the propsheet.
I attempted to defer truncating the font to as far up the stack as
possible, so as to make FontInfo usable for the broadest set of cases.
There were a couple questions that came up: I know that `Settings` gets
memset (memsat?) by the registry deserializer, and perhaps that's
another place for us to tackle. Right now, this pull request enables
fonts whose names are >= 32 characters _in Windows Terminal only_, but
the underpinnings are there for conhost as well. We'd need to explicitly
break at the API, or perhaps return a failure or log something to
telemetry.
* Should we log truncation at the API boundary to telemetry?
-> Later; followup filed (#3123)
* Should we fix Settings here, or later?
-> Later; followup filed (#3123)
* `TrueTypeFontList` is built out of things in winconp, the private
console header. Concern about interop structures.
-> Not used for interop, followup filed to clean it up (#3123)
* Is `unsigned int` right for codepage? For width?
-> Yes: codepage became UINT (from WORD) when we moved from Win16 to
Win32
This commit also includes a workaround for #3170. Growing
CONSOLE_INFORMATION made us lose the struct layout lottery during
release builds, and this was an expedient fix.
Closes #602.
Related to #3123.
2019-10-15 06:23:45 +02:00
|
|
|
void SetFaceName(const std::wstring_view faceName);
|
2019-05-03 00:29:04 +02:00
|
|
|
|
|
|
|
UINT GetCursorSize() const;
|
|
|
|
void SetCursorSize(const UINT uCursorSize);
|
|
|
|
|
|
|
|
bool GetFullScreen() const;
|
|
|
|
void SetFullScreen(const bool fFullScreen);
|
|
|
|
|
|
|
|
bool GetQuickEdit() const;
|
|
|
|
void SetQuickEdit(const bool fQuickEdit);
|
|
|
|
|
|
|
|
bool GetInsertMode() const;
|
|
|
|
void SetInsertMode(const bool fInsertMode);
|
|
|
|
|
|
|
|
bool GetAutoPosition() const;
|
|
|
|
void SetAutoPosition(const bool fAutoPosition);
|
|
|
|
|
|
|
|
UINT GetHistoryBufferSize() const;
|
|
|
|
void SetHistoryBufferSize(const UINT uHistoryBufferSize);
|
|
|
|
|
|
|
|
UINT GetNumberOfHistoryBuffers() const;
|
|
|
|
void SetNumberOfHistoryBuffers(const UINT uNumberOfHistoryBuffers);
|
|
|
|
|
|
|
|
bool GetHistoryNoDup() const;
|
|
|
|
void SetHistoryNoDup(const bool fHistoryNoDup);
|
|
|
|
|
2020-07-15 18:40:42 +02:00
|
|
|
gsl::span<const COLORREF> Get16ColorTable() const;
|
|
|
|
gsl::span<const COLORREF> Get256ColorTable() const;
|
2019-05-03 00:29:04 +02:00
|
|
|
void SetColorTableEntry(const size_t index, const COLORREF ColorValue);
|
|
|
|
COLORREF GetColorTableEntry(const size_t index) const;
|
|
|
|
|
|
|
|
COLORREF GetCursorColor() const noexcept;
|
|
|
|
CursorType GetCursorType() const noexcept;
|
|
|
|
|
|
|
|
void SetCursorColor(const COLORREF CursorColor) noexcept;
|
|
|
|
void SetCursorType(const CursorType cursorType) noexcept;
|
|
|
|
|
|
|
|
bool GetInterceptCopyPaste() const noexcept;
|
|
|
|
void SetInterceptCopyPaste(const bool interceptCopyPaste) noexcept;
|
|
|
|
|
|
|
|
COLORREF GetDefaultForegroundColor() const noexcept;
|
|
|
|
void SetDefaultForegroundColor(const COLORREF defaultForeground) noexcept;
|
|
|
|
|
|
|
|
COLORREF GetDefaultBackgroundColor() const noexcept;
|
|
|
|
void SetDefaultBackgroundColor(const COLORREF defaultBackground) noexcept;
|
|
|
|
|
|
|
|
bool IsTerminalScrolling() const noexcept;
|
|
|
|
void SetTerminalScrolling(const bool terminalScrollingEnabled) noexcept;
|
|
|
|
|
|
|
|
bool GetUseDx() const noexcept;
|
|
|
|
bool GetCopyColor() const noexcept;
|
|
|
|
|
|
|
|
private:
|
|
|
|
DWORD _dwHotKey;
|
|
|
|
DWORD _dwStartupFlags;
|
|
|
|
WORD _wFillAttribute;
|
|
|
|
WORD _wPopupFillAttribute;
|
|
|
|
WORD _wShowWindow; // used when window is created
|
|
|
|
WORD _wReserved;
|
|
|
|
// START - This section filled via memcpy from shortcut properties. Do not rearrange/change.
|
|
|
|
COORD _dwScreenBufferSize;
|
|
|
|
COORD _dwWindowSize; // this is in characters.
|
|
|
|
COORD _dwWindowOrigin; // used when window is created
|
|
|
|
DWORD _nFont;
|
|
|
|
COORD _dwFontSize;
|
|
|
|
UINT _uFontFamily;
|
|
|
|
UINT _uFontWeight;
|
|
|
|
WCHAR _FaceName[LF_FACESIZE];
|
|
|
|
UINT _uCursorSize;
|
|
|
|
BOOL _bFullScreen; // deprecated
|
|
|
|
BOOL _bQuickEdit;
|
|
|
|
BOOL _bInsertMode; // used by command line editing
|
|
|
|
BOOL _bAutoPosition;
|
|
|
|
UINT _uHistoryBufferSize;
|
|
|
|
UINT _uNumberOfHistoryBuffers;
|
|
|
|
BOOL _bHistoryNoDup;
|
|
|
|
// END - memcpy
|
|
|
|
UINT _uCodePage;
|
|
|
|
UINT _uScrollScale;
|
|
|
|
bool _fTrimLeadingZeros;
|
|
|
|
bool _fEnableColorSelection;
|
|
|
|
bool _bLineSelection;
|
|
|
|
bool _bWrapText; // whether to use text wrapping when resizing the window
|
|
|
|
bool _fCtrlKeyShortcutsDisabled; // disables Ctrl+<something> key intercepts
|
|
|
|
BYTE _bWindowAlpha; // describes the opacity of the window
|
|
|
|
|
|
|
|
bool _fFilterOnPaste; // should we filter text when the user pastes? (e.g. remove <tab>)
|
Allow FontInfo{,Base,Desired} to store a font name > 32 wch (#3107)
We now truncate the font name as it goes out to GDI APIs, in console API
servicing, and in the propsheet.
I attempted to defer truncating the font to as far up the stack as
possible, so as to make FontInfo usable for the broadest set of cases.
There were a couple questions that came up: I know that `Settings` gets
memset (memsat?) by the registry deserializer, and perhaps that's
another place for us to tackle. Right now, this pull request enables
fonts whose names are >= 32 characters _in Windows Terminal only_, but
the underpinnings are there for conhost as well. We'd need to explicitly
break at the API, or perhaps return a failure or log something to
telemetry.
* Should we log truncation at the API boundary to telemetry?
-> Later; followup filed (#3123)
* Should we fix Settings here, or later?
-> Later; followup filed (#3123)
* `TrueTypeFontList` is built out of things in winconp, the private
console header. Concern about interop structures.
-> Not used for interop, followup filed to clean it up (#3123)
* Is `unsigned int` right for codepage? For width?
-> Yes: codepage became UINT (from WORD) when we moved from Win16 to
Win32
This commit also includes a workaround for #3170. Growing
CONSOLE_INFORMATION made us lose the struct layout lottery during
release builds, and this was an expedient fix.
Closes #602.
Related to #3123.
2019-10-15 06:23:45 +02:00
|
|
|
std::wstring _LaunchFaceName;
|
2019-05-03 00:29:04 +02:00
|
|
|
bool _fAllowAltF4Close;
|
|
|
|
DWORD _dwVirtTermLevel;
|
|
|
|
bool _fAutoReturnOnNewline;
|
|
|
|
bool _fRenderGridWorldwide;
|
Add support for the DECSCNM screen mode (#3817)
## Summary of the Pull Request
This adds support for the [`DECSCNM`](https://vt100.net/docs/vt510-rm/DECSCNM.html) private mode escape sequence, which toggles the display between normal and reverse screen modes. When reversed, the background and foreground colors are switched. Tested manually, with [Vttest](https://invisible-island.net/vttest/), and with some new unit tests.
## References
This also fixes issue #72 for the most part, although if you toggle the mode too fast, there is no discernible flash.
## PR Checklist
* [x] Closes #3773
* [x] CLA signed. If not, go over [here](https://cla.opensource.microsoft.com/microsoft/Terminal) and sign the CLA
* [x] Tests added/passed
* [ ] Requires documentation to be updated
* [ ] I've discussed this with core contributors already. If not checked, I'm ready to accept this work might be rejected in favor of a different grand plan. Issue number where discussion took place: #xxx
## Detailed Description of the Pull Request / Additional comments
I've implemented this as a new flag in the `Settings` class, along with updates to the `LookupForegroundColor` and `LookupBackgroundColor` methods, to switch the returned foreground and background colors when that flag is set.
It also required a new private API in the `ConGetSet` interface to toggle the setting. And that API is then called from the `AdaptDispatch` class when the screen mode escape sequence is received.
The last thing needed was to add a step to the `HardReset` method, to reset the mode back to normal, which is one of the `RIS` requirements.
Note that this does currently work in the Windows Terminal, but once #2661 is implemented that may no longer be the case. It might become necessary to let the mode change sequences pass through conpty, and handle the color reversing on the client side.
## Validation Steps Performed
I've added a state machine test to make sure the escape sequence is dispatched correctly, and a screen buffer test to confirm that the mode change does alter the interpretation of colors as expected.
I've also confirmed that the various "light background" tests in Vttest now display correctly, and that the `tput flash` command (in a bash shell) does actually cause the screen to flash.
2020-01-22 23:29:50 +01:00
|
|
|
bool _fScreenReversed;
|
2019-05-03 00:29:04 +02:00
|
|
|
bool _fUseDx;
|
|
|
|
bool _fCopyColor;
|
|
|
|
|
Fix SGR indexed colors to distinguish Indexed256 color (and more) (#5834)
This PR introduces a new `ColorType` to allow us to distinguish between
`SGR` indexed colors from the 16 color table, the lower half of which
can be brightened, and the ISO/ITU indexed colors from the 256 color
table, which have a fixed brightness. Retaining the distinction between
these two types will enable us to forward the correct `SGR` sequences to
conpty when addressing issue #2661.
The other benefit of retaining the color index (which we didn't
previously do for ISO/ITU colors) is that it ensures that the colors are
updated correctly when the color scheme is changed.
## References
* This is another step towards fixing the conpty narrowing bugs in issue
#2661.
* This is technically a fix for issue #5384, but that won't be apparent
until #2661 is complete.
## PR Checklist
* [x] Closes #1223
* [x] CLA signed.
* [x] Tests added/passed
* [ ] Requires documentation to be updated
* [x] I've discussed this with core contributors already.
## Detailed Description of the Pull Request / Additional comments
The first part of this PR was the introduction of a new `ColorType` in
the `TextColor` class. Instead of just the one `IsIndex` type, there is
now an `IsIndex16` and an `IsIndex256`. `IsIndex16` covers the eight
original ANSI colors set with `SGR 3x` and `SGR 4x`, as well as the
brighter aixterm variants set with `SGR 9x` and `SGR 10x`. `IsIndex256`
covers the 256 ISO/ITU indexed colors set with `SGR 38;5` and `SGR
48;5`.
There are two reasons for this distinction. The first is that the ANSI
colors have the potential to be brightened by the `SGR 1` bold
attribute, while the ISO/ITO color do not. The second reason is that
when forwarding an attributes through conpty, we want to try and
preserve the original SGR sequence that generated each color (to the
extent that that is possible). By having the two separate types, we can
map the `IsIndex16` colors back to ANSI/aixterm values, and `IsIndex256`
to the ISO/ITU sequences.
In addition to the VT colors, we also have to deal with the legacy
colors set by the Windows console APIs, but we don't really need a
separate type for those. It seemed most appropriate to me to store them
as `IsIndex256` colors, since it doesn't make sense to have them
brightened by the `SGR 1` attribute (which is what would happen if they
were stored as `IsIndex16`). If a console app wanted a bright color it
would have selected one, so we shouldn't be messing with that choice.
The second part of the PR was the unification of the two color tables.
Originally we had a 16 color table for the legacy colors, and a separate
table for the 256 ISO/ITU colors. These have now been merged into one,
so color table lookups no longer need to decide which of the two tables
they should be referencing. I've also updated all the methods that took
a color table as a parameter to use a `basic_string_view` instead of
separate pointer and length variables, which I think makes them a lot
easier and safer to work with.
With this new architecture in place, I could now update the
`AdaptDispatch` SGR implementation to store the ISO/ITU indexed colors
as `IsIndex256` values, where before they were mapped to RGB values
(which prevented them reflecting any color scheme changes). I could also
update the `TerminalDispatch` implementation to differentiate between
the two index types, so that the `SGR 1` brightening would only be
applied to the ANSI colors.
I've also done a bit of code refactoring to try and minimise any direct
access to the color tables, getting rid of a lot of places that were
copying tables with `memmove` operations. I'm hoping this will make it
easier for us to update the code in the future if we want to reorder the
table entries (which is likely a requirement for unifying the
`AdaptDispatch` and `TerminalDispatch` implementations).
## Validation Steps Performed
For testing, I've just updated the existing unit tests to account for
the API changes. The `TextColorTests` required an extra parameter
specifying the index type when setting an index. And the `AdapterTest`
and `ScreenBufferTests` required the use of the new `SetIndexedXXX`
methods in order to be explicit about the index type, instead of relying
on the `TextAttribute` constructor and the old `SetForeground` and
`SetBackground` methods which didn't have a way to differentiate index
types.
I've manually tested the various console APIs
(`SetConsoleTextAttribute`, `ReadConsoleOutputAttribute`, and
`ReadConsoleOutput`), to make sure they are still setting and reading
the attributes as well as they used to. And I've tested the
`SetConsoleScreenBufferInfoEx` and `GetConsoleScreenBufferInfoEx` APIs
to make sure they can read and write the color table correctly. I've
also tested the color table in the properties dialog, made sure it was
saved and restored from the registry correctly, and similarly saved and
restored from a shortcut link.
Note that there are still a bunch of issues with the color table APIs,
but no new problems have been introduced by the changes in this PR, as
far as I could tell.
I've also done a bunch of manual tests of `OSC 4` to make sure it's
updating all the colors correctly (at least in conhost), and confirmed
that the test case in issue #1223 now works as expected.
2020-05-28 00:34:45 +02:00
|
|
|
std::array<COLORREF, XTERM_COLOR_TABLE_SIZE> _colorTable;
|
2019-05-03 00:29:04 +02:00
|
|
|
|
|
|
|
// this is used for the special STARTF_USESIZE mode.
|
|
|
|
bool _fUseWindowSizePixels;
|
|
|
|
COORD _dwWindowSizePixels;
|
|
|
|
|
|
|
|
// Technically a COLORREF, but using INVALID_COLOR as "Invert Colors"
|
|
|
|
unsigned int _CursorColor;
|
|
|
|
CursorType _CursorType;
|
|
|
|
|
|
|
|
bool _fInterceptCopyPaste;
|
|
|
|
|
|
|
|
COLORREF _DefaultForeground;
|
|
|
|
COLORREF _DefaultBackground;
|
|
|
|
bool _TerminalScrolling;
|
|
|
|
friend class RegistrySerialization;
|
|
|
|
};
|