mirror of
https://github.com/microsoft/terminal.git
synced 2026-04-16 03:01:05 +00:00
Compare commits
16 Commits
dev/lhecke
...
dev/duhowe
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb005d076d | ||
|
|
11125ec24d | ||
|
|
94b295ab72 | ||
|
|
dd8a2cbd9c | ||
|
|
e026f325df | ||
|
|
49b98b38fb | ||
|
|
298636bf5a | ||
|
|
9685108034 | ||
|
|
d74f236411 | ||
|
|
2866b4e559 | ||
|
|
d1ddab5e51 | ||
|
|
cb59ec1976 | ||
|
|
ae97064bc7 | ||
|
|
374ad80745 | ||
|
|
570afa27e7 | ||
|
|
62b2a90aef |
25
.github/actions/spell-check/advice.txt
vendored
25
.github/actions/spell-check/advice.txt
vendored
@@ -1,25 +0,0 @@
|
||||
<details>
|
||||
<summary>
|
||||
:pencil2: Contributor please read this
|
||||
</summary>
|
||||
|
||||
By default the command suggestion will generate a file named based on your commit. That's generally ok as long as you add the file to your commit. Someone can reorganize it later.
|
||||
|
||||
:warning: The command is written for posix shells. You can copy the contents of each `perl` command excluding the outer `'` marks and dropping any `'"`/`"'` quotation mark pairs into a file and then run `perl file.pl` from the root of the repository to run the code. Alternatively, you can manually insert the items...
|
||||
|
||||
If the listed items are:
|
||||
* ... **misspelled**, then please *correct* them instead of using the command.
|
||||
* ... *names*, please add them to `.github/actions/spell-check/dictionary/names.txt`.
|
||||
* ... APIs, you can add them to a file in `.github/actions/spell-check/dictionary/`.
|
||||
* ... just things you're using, please add them to an appropriate file in `.github/actions/spell-check/expect/`.
|
||||
* ... tokens you only need in one place and shouldn't *generally be used*, you can add an item in an appropriate file in `.github/actions/spell-check/patterns/`.
|
||||
|
||||
See the `README.md` in each directory for more information.
|
||||
|
||||
:microscope: You can test your commits **without** *appending* to a PR by creating a new branch with that extra change and pushing it to your fork. The [:check-spelling](https://github.com/marketplace/actions/check-spelling) action will run in response to your **push** -- it doesn't require an open pull request. By using such a branch, you can limit the number of typos your peers see you make. :wink:
|
||||
|
||||
</details>
|
||||
|
||||
#### :warning: Reviewers
|
||||
At present, the action that triggered this message will not show its :x: in this PR unless the branch is within this repository.
|
||||
Thus, you **should** make sure that this comment has been addressed before encouraging the merge bot to merge this PR.
|
||||
60
.github/actions/spell-check/dictionary/apis.txt
vendored
60
.github/actions/spell-check/dictionary/apis.txt
vendored
@@ -1,60 +0,0 @@
|
||||
ACCEPTFILES
|
||||
ACCESSDENIED
|
||||
alignof
|
||||
bitfield
|
||||
bitfields
|
||||
COLORPROPERTY
|
||||
CLASSNOTAVAILABLE
|
||||
environstrings
|
||||
EXPCMDFLAGS
|
||||
EXPCMDSTATE
|
||||
fullkbd
|
||||
futex
|
||||
Hashtable
|
||||
href
|
||||
IAsync
|
||||
IBind
|
||||
IBox
|
||||
IClass
|
||||
IComparable
|
||||
ICustom
|
||||
IDialog
|
||||
IDirect
|
||||
IExplorer
|
||||
IMap
|
||||
IObject
|
||||
IStorage
|
||||
llabs
|
||||
LCID
|
||||
lround
|
||||
LSHIFT
|
||||
NCHITTEST
|
||||
NCLBUTTONDBLCLK
|
||||
NCRBUTTONDBLCLK
|
||||
NOAGGREGATION
|
||||
NOREDIRECTIONBITMAP
|
||||
oaidl
|
||||
ocidl
|
||||
otms
|
||||
OUTLINETEXTMETRICW
|
||||
PAGESCROLL
|
||||
RETURNCMD
|
||||
rfind
|
||||
roundf
|
||||
RSHIFT
|
||||
rx
|
||||
serializer
|
||||
SIZENS
|
||||
GETDESKWALLPAPER
|
||||
UPDATEINIFILE
|
||||
spsc
|
||||
STDCPP
|
||||
strchr
|
||||
syscall
|
||||
tmp
|
||||
tx
|
||||
userenv
|
||||
wcstoui
|
||||
XDocument
|
||||
XElement
|
||||
XParse
|
||||
782
.github/actions/spell-check/dictionary/colors.txt
vendored
782
.github/actions/spell-check/dictionary/colors.txt
vendored
@@ -1,782 +0,0 @@
|
||||
snow
|
||||
ghost-white
|
||||
ghostwhite
|
||||
white-smoke
|
||||
whitesmoke
|
||||
gainsboro
|
||||
floral-white
|
||||
floralwhite
|
||||
old-lace
|
||||
oldlace
|
||||
linen
|
||||
antique-white
|
||||
antiquewhite
|
||||
papaya-whip
|
||||
papayawhip
|
||||
blanched-almond
|
||||
blanchedalmond
|
||||
bisque
|
||||
peach-puff
|
||||
peachpuff
|
||||
navajo-white
|
||||
navajowhite
|
||||
moccasin
|
||||
cornsilk
|
||||
ivory
|
||||
lemon-chiffon
|
||||
lemonchiffon
|
||||
seashell
|
||||
honeydew
|
||||
mint-cream
|
||||
mintcream
|
||||
azure
|
||||
alice-blue
|
||||
aliceblue
|
||||
lavender
|
||||
lavender-blush
|
||||
lavenderblush
|
||||
misty-rose
|
||||
mistyrose
|
||||
white
|
||||
black
|
||||
dark-slate-gray
|
||||
darkslategray
|
||||
dark-slate-grey
|
||||
darkslategrey
|
||||
dim-gray
|
||||
dimgray
|
||||
dim-grey
|
||||
dimgrey
|
||||
slate-gray
|
||||
slategray
|
||||
slate-grey
|
||||
slategrey
|
||||
light-slate-gray
|
||||
lightslategray
|
||||
light-slate-grey
|
||||
lightslategrey
|
||||
gray
|
||||
grey
|
||||
xray
|
||||
x11gray
|
||||
xrey
|
||||
x11grey
|
||||
web-gray
|
||||
webgray
|
||||
web-grey
|
||||
webgrey
|
||||
light-grey
|
||||
lightgrey
|
||||
light-gray
|
||||
lightgray
|
||||
midnight-blue
|
||||
midnightblue
|
||||
navy
|
||||
navy-blue
|
||||
navyblue
|
||||
cornflower-blue
|
||||
cornflowerblue
|
||||
dark-slate-blue
|
||||
darkslateblue
|
||||
slate-blue
|
||||
slateblue
|
||||
medium-slate-blue
|
||||
mediumslateblue
|
||||
light-slate-blue
|
||||
lightslateblue
|
||||
medium-blue
|
||||
mediumblue
|
||||
royal-blue
|
||||
royalblue
|
||||
blue
|
||||
dodger-blue
|
||||
dodgerblue
|
||||
deep-sky-blue
|
||||
deepskyblue
|
||||
sky-blue
|
||||
skyblue
|
||||
light-sky-blue
|
||||
lightskyblue
|
||||
steel-blue
|
||||
steelblue
|
||||
light-steel-blue
|
||||
lightsteelblue
|
||||
light-blue
|
||||
lightblue
|
||||
powder-blue
|
||||
powderblue
|
||||
pale-turquoise
|
||||
paleturquoise
|
||||
dark-turquoise
|
||||
darkturquoise
|
||||
medium-turquoise
|
||||
mediumturquoise
|
||||
turquoise
|
||||
cyan
|
||||
aqua
|
||||
light-cyan
|
||||
lightcyan
|
||||
cadet-blue
|
||||
cadetblue
|
||||
medium-aquamarine
|
||||
mediumaquamarine
|
||||
aquamarine
|
||||
dark-green
|
||||
darkgreen
|
||||
dark-olive-green
|
||||
darkolivegreen
|
||||
dark-sea-green
|
||||
darkseagreen
|
||||
sea-green
|
||||
seagreen
|
||||
medium-sea-green
|
||||
mediumseagreen
|
||||
light-sea-green
|
||||
lightseagreen
|
||||
pale-green
|
||||
palegreen
|
||||
spring-green
|
||||
springgreen
|
||||
lawn-green
|
||||
lawngreen
|
||||
green
|
||||
lime
|
||||
xreen
|
||||
x11green
|
||||
web-green
|
||||
webgreen
|
||||
chartreuse
|
||||
medium-spring-green
|
||||
mediumspringgreen
|
||||
green-yellow
|
||||
greenyellow
|
||||
lime-green
|
||||
limegreen
|
||||
yellow-green
|
||||
yellowgreen
|
||||
forest-green
|
||||
forestgreen
|
||||
olive-drab
|
||||
olivedrab
|
||||
dark-khaki
|
||||
darkkhaki
|
||||
khaki
|
||||
pale-goldenrod
|
||||
palegoldenrod
|
||||
light-goldenrod-yellow
|
||||
lightgoldenrodyellow
|
||||
light-yellow
|
||||
lightyellow
|
||||
yellow
|
||||
gold
|
||||
light-goldenrod
|
||||
lightgoldenrod
|
||||
goldenrod
|
||||
dark-goldenrod
|
||||
darkgoldenrod
|
||||
rosy-brown
|
||||
rosybrown
|
||||
indian-red
|
||||
indianred
|
||||
saddle-brown
|
||||
saddlebrown
|
||||
sienna
|
||||
peru
|
||||
burlywood
|
||||
beige
|
||||
wheat
|
||||
sandy-brown
|
||||
sandybrown
|
||||
tan
|
||||
chocolate
|
||||
firebrick
|
||||
brown
|
||||
dark-salmon
|
||||
darksalmon
|
||||
salmon
|
||||
light-salmon
|
||||
lightsalmon
|
||||
orange
|
||||
dark-orange
|
||||
darkorange
|
||||
coral
|
||||
light-coral
|
||||
lightcoral
|
||||
tomato
|
||||
orange-red
|
||||
orangered
|
||||
red
|
||||
hot-pink
|
||||
hotpink
|
||||
deep-pink
|
||||
deeppink
|
||||
pink
|
||||
light-pink
|
||||
lightpink
|
||||
pale-violet-red
|
||||
palevioletred
|
||||
maroon
|
||||
xaroon
|
||||
x11maroon
|
||||
web-maroon
|
||||
webmaroon
|
||||
medium-violet-red
|
||||
mediumvioletred
|
||||
violet-red
|
||||
violetred
|
||||
magenta
|
||||
fuchsia
|
||||
violet
|
||||
plum
|
||||
orchid
|
||||
medium-orchid
|
||||
mediumorchid
|
||||
dark-orchid
|
||||
darkorchid
|
||||
dark-violet
|
||||
darkviolet
|
||||
blue-violet
|
||||
blueviolet
|
||||
purple
|
||||
xurple
|
||||
x11purple
|
||||
web-purple
|
||||
webpurple
|
||||
medium-purple
|
||||
mediumpurple
|
||||
thistle
|
||||
snow1
|
||||
snow2
|
||||
snow3
|
||||
snow4
|
||||
seashell1
|
||||
seashell2
|
||||
seashell3
|
||||
seashell4
|
||||
antiquewhite1
|
||||
antiquewhite2
|
||||
antiquewhite3
|
||||
antiquewhite4
|
||||
bisque1
|
||||
bisque2
|
||||
bisque3
|
||||
bisque4
|
||||
peachpuff1
|
||||
peachpuff2
|
||||
peachpuff3
|
||||
peachpuff4
|
||||
navajowhite1
|
||||
navajowhite2
|
||||
navajowhite3
|
||||
navajowhite4
|
||||
lemonchiffon1
|
||||
lemonchiffon2
|
||||
lemonchiffon3
|
||||
lemonchiffon4
|
||||
cornsilk1
|
||||
cornsilk2
|
||||
cornsilk3
|
||||
cornsilk4
|
||||
ivory1
|
||||
ivory2
|
||||
ivory3
|
||||
ivory4
|
||||
honeydew1
|
||||
honeydew2
|
||||
honeydew3
|
||||
honeydew4
|
||||
lavenderblush1
|
||||
lavenderblush2
|
||||
lavenderblush3
|
||||
lavenderblush4
|
||||
mistyrose1
|
||||
mistyrose2
|
||||
mistyrose3
|
||||
mistyrose4
|
||||
azure1
|
||||
azure2
|
||||
azure3
|
||||
azure4
|
||||
slateblue1
|
||||
slateblue2
|
||||
slateblue3
|
||||
slateblue4
|
||||
royalblue1
|
||||
royalblue2
|
||||
royalblue3
|
||||
royalblue4
|
||||
blue1
|
||||
blue2
|
||||
blue3
|
||||
blue4
|
||||
dodgerblue1
|
||||
dodgerblue2
|
||||
dodgerblue3
|
||||
dodgerblue4
|
||||
steelblue1
|
||||
steelblue2
|
||||
steelblue3
|
||||
steelblue4
|
||||
deepskyblue1
|
||||
deepskyblue2
|
||||
deepskyblue3
|
||||
deepskyblue4
|
||||
skyblue1
|
||||
skyblue2
|
||||
skyblue3
|
||||
skyblue4
|
||||
lightskyblue1
|
||||
lightskyblue2
|
||||
lightskyblue3
|
||||
lightskyblue4
|
||||
slategray1
|
||||
slategray2
|
||||
slategray3
|
||||
slategray4
|
||||
lightsteelblue1
|
||||
lightsteelblue2
|
||||
lightsteelblue3
|
||||
lightsteelblue4
|
||||
lightblue1
|
||||
lightblue2
|
||||
lightblue3
|
||||
lightblue4
|
||||
lightcyan1
|
||||
lightcyan2
|
||||
lightcyan3
|
||||
lightcyan4
|
||||
paleturquoise1
|
||||
paleturquoise2
|
||||
paleturquoise3
|
||||
paleturquoise4
|
||||
cadetblue1
|
||||
cadetblue2
|
||||
cadetblue3
|
||||
cadetblue4
|
||||
turquoise1
|
||||
turquoise2
|
||||
turquoise3
|
||||
turquoise4
|
||||
cyan1
|
||||
cyan2
|
||||
cyan3
|
||||
cyan4
|
||||
darkslategray1
|
||||
darkslategray2
|
||||
darkslategray3
|
||||
darkslategray4
|
||||
aquamarine1
|
||||
aquamarine2
|
||||
aquamarine3
|
||||
aquamarine4
|
||||
darkseagreen1
|
||||
darkseagreen2
|
||||
darkseagreen3
|
||||
darkseagreen4
|
||||
seagreen1
|
||||
seagreen2
|
||||
seagreen3
|
||||
seagreen4
|
||||
palegreen1
|
||||
palegreen2
|
||||
palegreen3
|
||||
palegreen4
|
||||
springgreen1
|
||||
springgreen2
|
||||
springgreen3
|
||||
springgreen4
|
||||
green1
|
||||
green2
|
||||
green3
|
||||
green4
|
||||
chartreuse1
|
||||
chartreuse2
|
||||
chartreuse3
|
||||
chartreuse4
|
||||
olivedrab1
|
||||
olivedrab2
|
||||
olivedrab3
|
||||
olivedrab4
|
||||
darkolivegreen1
|
||||
darkolivegreen2
|
||||
darkolivegreen3
|
||||
darkolivegreen4
|
||||
khaki1
|
||||
khaki2
|
||||
khaki3
|
||||
khaki4
|
||||
lightgoldenrod1
|
||||
lightgoldenrod2
|
||||
lightgoldenrod3
|
||||
lightgoldenrod4
|
||||
lightyellow1
|
||||
lightyellow2
|
||||
lightyellow3
|
||||
lightyellow4
|
||||
yellow1
|
||||
yellow2
|
||||
yellow3
|
||||
yellow4
|
||||
gold1
|
||||
gold2
|
||||
gold3
|
||||
gold4
|
||||
goldenrod1
|
||||
goldenrod2
|
||||
goldenrod3
|
||||
goldenrod4
|
||||
darkgoldenrod1
|
||||
darkgoldenrod2
|
||||
darkgoldenrod3
|
||||
darkgoldenrod4
|
||||
rosybrown1
|
||||
rosybrown2
|
||||
rosybrown3
|
||||
rosybrown4
|
||||
indianred1
|
||||
indianred2
|
||||
indianred3
|
||||
indianred4
|
||||
sienna1
|
||||
sienna2
|
||||
sienna3
|
||||
sienna4
|
||||
burlywood1
|
||||
burlywood2
|
||||
burlywood3
|
||||
burlywood4
|
||||
wheat1
|
||||
wheat2
|
||||
wheat3
|
||||
wheat4
|
||||
tan1
|
||||
tan2
|
||||
tan3
|
||||
tan4
|
||||
chocolate1
|
||||
chocolate2
|
||||
chocolate3
|
||||
chocolate4
|
||||
firebrick1
|
||||
firebrick2
|
||||
firebrick3
|
||||
firebrick4
|
||||
brown1
|
||||
brown2
|
||||
brown3
|
||||
brown4
|
||||
salmon1
|
||||
salmon2
|
||||
salmon3
|
||||
salmon4
|
||||
lightsalmon1
|
||||
lightsalmon2
|
||||
lightsalmon3
|
||||
lightsalmon4
|
||||
orange1
|
||||
orange2
|
||||
orange3
|
||||
orange4
|
||||
darkorange1
|
||||
darkorange2
|
||||
darkorange3
|
||||
darkorange4
|
||||
coral1
|
||||
coral2
|
||||
coral3
|
||||
coral4
|
||||
tomato1
|
||||
tomato2
|
||||
tomato3
|
||||
tomato4
|
||||
orangered1
|
||||
orangered2
|
||||
orangered3
|
||||
orangered4
|
||||
red1
|
||||
red2
|
||||
red3
|
||||
red4
|
||||
deeppink1
|
||||
deeppink2
|
||||
deeppink3
|
||||
deeppink4
|
||||
hotpink1
|
||||
hotpink2
|
||||
hotpink3
|
||||
hotpink4
|
||||
pink1
|
||||
pink2
|
||||
pink3
|
||||
pink4
|
||||
lightpink1
|
||||
lightpink2
|
||||
lightpink3
|
||||
lightpink4
|
||||
palevioletred1
|
||||
palevioletred2
|
||||
palevioletred3
|
||||
palevioletred4
|
||||
maroon1
|
||||
maroon2
|
||||
maroon3
|
||||
maroon4
|
||||
violetred1
|
||||
violetred2
|
||||
violetred3
|
||||
violetred4
|
||||
magenta1
|
||||
magenta2
|
||||
magenta3
|
||||
magenta4
|
||||
orchid1
|
||||
orchid2
|
||||
orchid3
|
||||
orchid4
|
||||
plum1
|
||||
plum2
|
||||
plum3
|
||||
plum4
|
||||
mediumorchid1
|
||||
mediumorchid2
|
||||
mediumorchid3
|
||||
mediumorchid4
|
||||
darkorchid1
|
||||
darkorchid2
|
||||
darkorchid3
|
||||
darkorchid4
|
||||
purple1
|
||||
purple2
|
||||
purple3
|
||||
purple4
|
||||
mediumpurple1
|
||||
mediumpurple2
|
||||
mediumpurple3
|
||||
mediumpurple4
|
||||
thistle1
|
||||
thistle2
|
||||
thistle3
|
||||
thistle4
|
||||
gray0
|
||||
grey0
|
||||
gray1
|
||||
grey1
|
||||
gray2
|
||||
grey2
|
||||
gray3
|
||||
grey3
|
||||
gray4
|
||||
grey4
|
||||
gray5
|
||||
grey5
|
||||
gray6
|
||||
grey6
|
||||
gray7
|
||||
grey7
|
||||
gray8
|
||||
grey8
|
||||
gray9
|
||||
grey9
|
||||
gray10
|
||||
grey10
|
||||
gray11
|
||||
grey11
|
||||
gray12
|
||||
grey12
|
||||
gray13
|
||||
grey13
|
||||
gray14
|
||||
grey14
|
||||
gray15
|
||||
grey15
|
||||
gray16
|
||||
grey16
|
||||
gray17
|
||||
grey17
|
||||
gray18
|
||||
grey18
|
||||
gray19
|
||||
grey19
|
||||
gray20
|
||||
grey20
|
||||
gray21
|
||||
grey21
|
||||
gray22
|
||||
grey22
|
||||
gray23
|
||||
grey23
|
||||
gray24
|
||||
grey24
|
||||
gray25
|
||||
grey25
|
||||
gray26
|
||||
grey26
|
||||
gray27
|
||||
grey27
|
||||
gray28
|
||||
grey28
|
||||
gray29
|
||||
grey29
|
||||
gray30
|
||||
grey30
|
||||
gray31
|
||||
grey31
|
||||
gray32
|
||||
grey32
|
||||
gray33
|
||||
grey33
|
||||
gray34
|
||||
grey34
|
||||
gray35
|
||||
grey35
|
||||
gray36
|
||||
grey36
|
||||
gray37
|
||||
grey37
|
||||
gray38
|
||||
grey38
|
||||
gray39
|
||||
grey39
|
||||
gray40
|
||||
grey40
|
||||
gray41
|
||||
grey41
|
||||
gray42
|
||||
grey42
|
||||
gray43
|
||||
grey43
|
||||
gray44
|
||||
grey44
|
||||
gray45
|
||||
grey45
|
||||
gray46
|
||||
grey46
|
||||
gray47
|
||||
grey47
|
||||
gray48
|
||||
grey48
|
||||
gray49
|
||||
grey49
|
||||
gray50
|
||||
grey50
|
||||
gray51
|
||||
grey51
|
||||
gray52
|
||||
grey52
|
||||
gray53
|
||||
grey53
|
||||
gray54
|
||||
grey54
|
||||
gray55
|
||||
grey55
|
||||
gray56
|
||||
grey56
|
||||
gray57
|
||||
grey57
|
||||
gray58
|
||||
grey58
|
||||
gray59
|
||||
grey59
|
||||
gray60
|
||||
grey60
|
||||
gray61
|
||||
grey61
|
||||
gray62
|
||||
grey62
|
||||
gray63
|
||||
grey63
|
||||
gray64
|
||||
grey64
|
||||
gray65
|
||||
grey65
|
||||
gray66
|
||||
grey66
|
||||
gray67
|
||||
grey67
|
||||
gray68
|
||||
grey68
|
||||
gray69
|
||||
grey69
|
||||
gray70
|
||||
grey70
|
||||
gray71
|
||||
grey71
|
||||
gray72
|
||||
grey72
|
||||
gray73
|
||||
grey73
|
||||
gray74
|
||||
grey74
|
||||
gray75
|
||||
grey75
|
||||
gray76
|
||||
grey76
|
||||
gray77
|
||||
grey77
|
||||
gray78
|
||||
grey78
|
||||
gray79
|
||||
grey79
|
||||
gray80
|
||||
grey80
|
||||
gray81
|
||||
grey81
|
||||
gray82
|
||||
grey82
|
||||
gray83
|
||||
grey83
|
||||
gray84
|
||||
grey84
|
||||
gray85
|
||||
grey85
|
||||
gray86
|
||||
grey86
|
||||
gray87
|
||||
grey87
|
||||
gray88
|
||||
grey88
|
||||
gray89
|
||||
grey89
|
||||
gray90
|
||||
grey90
|
||||
gray91
|
||||
grey91
|
||||
gray92
|
||||
grey92
|
||||
gray93
|
||||
grey93
|
||||
gray94
|
||||
grey94
|
||||
gray95
|
||||
grey95
|
||||
gray96
|
||||
grey96
|
||||
gray97
|
||||
grey97
|
||||
gray98
|
||||
grey98
|
||||
gray99
|
||||
grey99
|
||||
gray100
|
||||
grey100
|
||||
dark-grey
|
||||
darkgrey
|
||||
dark-gray
|
||||
darkgray
|
||||
dark-blue
|
||||
darkblue
|
||||
dark-cyan
|
||||
darkcyan
|
||||
dark-magenta
|
||||
darkmagenta
|
||||
dark-red
|
||||
darkred
|
||||
light-green
|
||||
lightgreen
|
||||
crimson
|
||||
indigo
|
||||
olive
|
||||
rebecca-purple
|
||||
rebeccapurple
|
||||
silver
|
||||
teal
|
||||
479836
.github/actions/spell-check/dictionary/dictionary.txt
vendored
479836
.github/actions/spell-check/dictionary/dictionary.txt
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,3 +0,0 @@
|
||||
powf
|
||||
sqrtf
|
||||
isnan
|
||||
@@ -1,40 +0,0 @@
|
||||
ACLs
|
||||
altform
|
||||
appendwttlogging
|
||||
backplating
|
||||
CPRs
|
||||
DACL
|
||||
DACLs
|
||||
dotnetfeed
|
||||
DWINRT
|
||||
enablewttlogging
|
||||
LKG
|
||||
mfcribbon
|
||||
microsoft
|
||||
microsoftonline
|
||||
netcore
|
||||
osgvsowi
|
||||
pgc
|
||||
pgo
|
||||
pgosweep
|
||||
powerrename
|
||||
powershell
|
||||
propkey
|
||||
pscustomobject
|
||||
robocopy
|
||||
SACLs
|
||||
Shobjidl
|
||||
Skype
|
||||
sysnative
|
||||
systemroot
|
||||
taskkill
|
||||
tasklist
|
||||
tdbuildteamid
|
||||
vcruntime
|
||||
visualstudio
|
||||
VSTHRD
|
||||
wlk
|
||||
wslpath
|
||||
wtl
|
||||
wtt
|
||||
wttlog
|
||||
63
.github/actions/spell-check/excludes.txt
vendored
63
.github/actions/spell-check/excludes.txt
vendored
@@ -1,63 +0,0 @@
|
||||
(?:^|/)dirs$
|
||||
(?:^|/)go\.mod$
|
||||
(?:^|/)go\.sum$
|
||||
(?:^|/)package-lock\.json$
|
||||
(?:^|/)sources(?:|\.dep)$
|
||||
SUMS$
|
||||
\.ai$
|
||||
\.bmp$
|
||||
\.cer$
|
||||
\.class$
|
||||
\.crl$
|
||||
\.crt$
|
||||
\.csr$
|
||||
\.dll$
|
||||
\.DS_Store$
|
||||
\.eot$
|
||||
\.eps$
|
||||
\.exe$
|
||||
\.gif$
|
||||
\.graffle$
|
||||
\.gz$
|
||||
\.icns$
|
||||
\.ico$
|
||||
\.jar$
|
||||
\.jpeg$
|
||||
\.jpg$
|
||||
\.key$
|
||||
\.lib$
|
||||
\.lock$
|
||||
\.map$
|
||||
\.min\..
|
||||
\.mp3$
|
||||
\.mp4$
|
||||
\.otf$
|
||||
\.pbxproj$
|
||||
\.pdf$
|
||||
\.pem$
|
||||
\.png$
|
||||
\.psd$
|
||||
\.runsettings$
|
||||
\.sig$
|
||||
\.so$
|
||||
\.svg$
|
||||
\.svgz$
|
||||
\.tar$
|
||||
\.tgz$
|
||||
\.ttf$
|
||||
\.woff
|
||||
\.xcf$
|
||||
\.xls
|
||||
\.xpm$
|
||||
\.yml$
|
||||
\.zip$
|
||||
^consolegit2gitfilters\.json$
|
||||
^dep/
|
||||
^oss/
|
||||
^doc/reference/UTF8-torture-test\.txt$
|
||||
^src/interactivity/onecore/BgfxEngine\.
|
||||
^src/renderer/wddmcon/WddmConRenderer\.
|
||||
^src/terminal/parser/ft_fuzzer/VTCommandFuzzer\.cpp$
|
||||
^src/tools/U8U16Test/(?:fr|ru|zh)\.txt$
|
||||
^\.github/actions/spell-check/
|
||||
^\.gitignore$
|
||||
15
.github/actions/spell-check/expect/web.txt
vendored
15
.github/actions/spell-check/expect/web.txt
vendored
@@ -1,15 +0,0 @@
|
||||
http
|
||||
td
|
||||
www
|
||||
ecma
|
||||
rapidtables
|
||||
WCAG
|
||||
freedesktop
|
||||
ycombinator
|
||||
robertelder
|
||||
kovidgoyal
|
||||
leonerd
|
||||
fixterms
|
||||
uk
|
||||
winui
|
||||
appshellintegration
|
||||
@@ -1,23 +0,0 @@
|
||||
https://(?:(?:[-a-zA-Z0-9?&=]*\.|)microsoft\.com)/[-a-zA-Z0-9?&=_#\/.]*
|
||||
https://aka\.ms/[-a-zA-Z0-9?&=\/_]*
|
||||
https://www\.itscj\.ipsj\.or\.jp/iso-ir/[-0-9]+\.pdf
|
||||
https://www\.vt100\.net/docs/[-a-zA-Z0-9#_\/.]*
|
||||
https://www.w3.org/[-a-zA-Z0-9?&=\/_#]*
|
||||
https://(?:(?:www\.|)youtube\.com|youtu.be)/[-a-zA-Z0-9?&=]*
|
||||
https://[a-z-]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]*
|
||||
[Pp]ublicKeyToken="?[0-9a-fA-F]{16}"?
|
||||
(?:[{"]|UniqueIdentifier>)[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}(?:[}"]|</UniqueIdentifier)
|
||||
(?:0[Xx]|\\x|U\+|#)[a-f0-9A-FGgRr]{2,}[Uu]?[Ll]{0,2}\b
|
||||
microsoft/cascadia-code\@[0-9a-fA-F]{40}
|
||||
\d+x\d+Logo
|
||||
Scro\&ll
|
||||
# selectionInput.cpp
|
||||
:\\windows\\syste\b
|
||||
TestUtils::VerifyExpectedString\(tb, L"[^"]+"
|
||||
(?:hostSm|mach)\.ProcessString\(L"[^"]+"
|
||||
\b([A-Za-z])\1{3,}\b
|
||||
0x[0-9A-Za-z]+
|
||||
Base64::s_(?:En|De)code\(L"[^"]+"
|
||||
VERIFY_ARE_EQUAL\(L"[^"]+"
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+/"
|
||||
std::memory_order_[\w]+
|
||||
15
.github/actions/spelling/README.md
vendored
Normal file
15
.github/actions/spelling/README.md
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
# check-spelling/check-spelling configuration
|
||||
|
||||
File | Purpose | Format | Info
|
||||
-|-|-|-
|
||||
[allow/*.txt](allow/) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow)
|
||||
[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject)
|
||||
[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes)
|
||||
[patterns/*.txt](patterns/) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
|
||||
[candidate.patterns](candidate.patterns) | Patterns that might be worth adding to [patterns.txt](patterns.txt) | perl regular expression with optional comment block introductions (all matches will be suggested) | [candidates](https://github.com/check-spelling/check-spelling/wiki/Feature:-Suggest-patterns)
|
||||
[line_forbidden.patterns](line_forbidden.patterns) | Patterns to flag in checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
|
||||
[expect/*.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect)
|
||||
[advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice)
|
||||
|
||||
Note: you can replace any of these files with a directory by the same name (minus the suffix)
|
||||
and then include multiple files inside that directory (with that suffix) to merge multiple files together.
|
||||
48
.github/actions/spelling/advice.md
vendored
Normal file
48
.github/actions/spelling/advice.md
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
<!-- See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice --> <!-- markdownlint-disable MD033 MD041 -->
|
||||
<details>
|
||||
<summary>
|
||||
:pencil2: Contributor please read this
|
||||
</summary>
|
||||
|
||||
By default the command suggestion will generate a file named based on your commit. That's generally ok as long as you add the file to your commit. Someone can reorganize it later.
|
||||
|
||||
:warning: The command is written for posix shells. If it doesn't work for you, you can manually _add_ (one word per line) / _remove_ items to `expect.txt` and the `excludes.txt` files.
|
||||
|
||||
If the listed items are:
|
||||
|
||||
* ... **misspelled**, then please *correct* them instead of using the command.
|
||||
* ... *names*, please add them to `.github/actions/spelling/allow/names.txt`.
|
||||
* ... APIs, you can add them to a file in `.github/actions/spelling/allow/`.
|
||||
* ... just things you're using, please add them to an appropriate file in `.github/actions/spelling/expect/`.
|
||||
* ... tokens you only need in one place and shouldn't *generally be used*, you can add an item in an appropriate file in `.github/actions/spelling/patterns/`.
|
||||
|
||||
See the `README.md` in each directory for more information.
|
||||
|
||||
:microscope: You can test your commits **without** *appending* to a PR by creating a new branch with that extra change and pushing it to your fork. The [check-spelling](https://github.com/marketplace/actions/check-spelling) action will run in response to your **push** -- it doesn't require an open pull request. By using such a branch, you can limit the number of typos your peers see you make. :wink:
|
||||
|
||||
|
||||
<details><summary>If the flagged items are :exploding_head: false positives</summary>
|
||||
|
||||
If items relate to a ...
|
||||
* binary file (or some other file you wouldn't want to check at all).
|
||||
|
||||
Please add a file path to the `excludes.txt` file matching the containing file.
|
||||
|
||||
File paths are Perl 5 Regular Expressions - you can [test](
|
||||
https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
|
||||
|
||||
`^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](
|
||||
../tree/HEAD/README.md) (on whichever branch you're using).
|
||||
|
||||
* well-formed pattern.
|
||||
|
||||
If you can write a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it,
|
||||
try adding it to the `patterns.txt` file.
|
||||
|
||||
Patterns are Perl 5 Regular Expressions - you can [test](
|
||||
https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
|
||||
|
||||
Note that patterns can't match multiline strings.
|
||||
</details>
|
||||
|
||||
</details>
|
||||
@@ -1,6 +1,6 @@
|
||||
# Dictionaries are lists of words to accept unconditionally
|
||||
# Allow files are lists of words to accept unconditionally
|
||||
|
||||
While check spelling will complain about a whitelisted word
|
||||
While check spelling will complain about an expected word
|
||||
which is no longer present, you can include things here even if
|
||||
they are not otherwise present in the repository.
|
||||
|
||||
@@ -8,11 +8,11 @@ E.g., you could include a list of system APIs here, or potential
|
||||
contributors (so that if a future commit includes their name,
|
||||
it'll be accepted).
|
||||
|
||||
### Files
|
||||
## Files
|
||||
|
||||
| File | Description |
|
||||
| ---- | ----------- |
|
||||
| [Dictionary](dictionary.txt) | Primary US English dictionary |
|
||||
| [Allow](allow.txt) | Supplements to the dictionary |
|
||||
| [Chinese](chinese.txt) | Chinese words |
|
||||
| [Japanese](japanese.txt) | Japanese words |
|
||||
| [Microsoft](microsoft.txt) | Microsoft brand items |
|
||||
108
.github/actions/spelling/allow/allow.txt
vendored
Normal file
108
.github/actions/spelling/allow/allow.txt
vendored
Normal file
@@ -0,0 +1,108 @@
|
||||
admins
|
||||
allcolors
|
||||
Apc
|
||||
apc
|
||||
breadcrumb
|
||||
breadcrumbs
|
||||
bsd
|
||||
calt
|
||||
ccmp
|
||||
changelog
|
||||
clickable
|
||||
clig
|
||||
CMMI
|
||||
copyable
|
||||
cybersecurity
|
||||
dalet
|
||||
Dcs
|
||||
dcs
|
||||
dialytika
|
||||
dje
|
||||
downside
|
||||
downsides
|
||||
dze
|
||||
dzhe
|
||||
EDDB
|
||||
EDDC
|
||||
Enum'd
|
||||
Fitt
|
||||
formattings
|
||||
FTCS
|
||||
ftp
|
||||
fvar
|
||||
gantt
|
||||
gcc
|
||||
geeksforgeeks
|
||||
ghe
|
||||
github
|
||||
gje
|
||||
godbolt
|
||||
hostname
|
||||
hostnames
|
||||
https
|
||||
hyperlink
|
||||
hyperlinking
|
||||
hyperlinks
|
||||
iconify
|
||||
img
|
||||
inlined
|
||||
It'd
|
||||
kje
|
||||
libfuzzer
|
||||
libuv
|
||||
liga
|
||||
lje
|
||||
Llast
|
||||
llvm
|
||||
Lmid
|
||||
locl
|
||||
lol
|
||||
lorem
|
||||
Lorigin
|
||||
maxed
|
||||
minimalistic
|
||||
mkmk
|
||||
mnt
|
||||
mru
|
||||
nje
|
||||
noreply
|
||||
ogonek
|
||||
ok'd
|
||||
overlined
|
||||
pipeline
|
||||
postmodern
|
||||
ptys
|
||||
qof
|
||||
qps
|
||||
rclt
|
||||
reimplementation
|
||||
reserialization
|
||||
reserialize
|
||||
reserializes
|
||||
rlig
|
||||
runtimes
|
||||
shcha
|
||||
slnt
|
||||
Sos
|
||||
ssh
|
||||
timeline
|
||||
timelines
|
||||
timestamped
|
||||
TLDR
|
||||
tokenizes
|
||||
tonos
|
||||
toolset
|
||||
tshe
|
||||
ubuntu
|
||||
uiatextrange
|
||||
UIs
|
||||
und
|
||||
unregister
|
||||
versioned
|
||||
vsdevcmd
|
||||
We'd
|
||||
wildcards
|
||||
XBox
|
||||
YBox
|
||||
yeru
|
||||
zhe
|
||||
248
.github/actions/spelling/allow/apis.txt
vendored
Normal file
248
.github/actions/spelling/allow/apis.txt
vendored
Normal file
@@ -0,0 +1,248 @@
|
||||
ACCEPTFILES
|
||||
ACCESSDENIED
|
||||
acl
|
||||
aclapi
|
||||
alignas
|
||||
alignof
|
||||
APPLYTOSUBMENUS
|
||||
appxrecipe
|
||||
bitfield
|
||||
bitfields
|
||||
BUILDBRANCH
|
||||
BUILDMSG
|
||||
BUILDNUMBER
|
||||
BYCOMMAND
|
||||
BYPOSITION
|
||||
charconv
|
||||
CLASSNOTAVAILABLE
|
||||
CLOSEAPP
|
||||
cmdletbinding
|
||||
COLORPROPERTY
|
||||
colspan
|
||||
COMDLG
|
||||
commandlinetoargv
|
||||
comparand
|
||||
cstdint
|
||||
CXICON
|
||||
CYICON
|
||||
Dacl
|
||||
dataobject
|
||||
dcomp
|
||||
DERR
|
||||
dlldata
|
||||
DNE
|
||||
DONTADDTORECENT
|
||||
DWMSBT
|
||||
DWMWA
|
||||
DWMWA
|
||||
DWORDLONG
|
||||
endfor
|
||||
ENDSESSION
|
||||
enumset
|
||||
environstrings
|
||||
EXPCMDFLAGS
|
||||
EXPCMDSTATE
|
||||
filetime
|
||||
FILTERSPEC
|
||||
FORCEFILESYSTEM
|
||||
FORCEMINIMIZE
|
||||
frac
|
||||
fullkbd
|
||||
futex
|
||||
GETDESKWALLPAPER
|
||||
GETHIGHCONTRAST
|
||||
GETMOUSEHOVERTIME
|
||||
Hashtable
|
||||
HIGHCONTRASTON
|
||||
HIGHCONTRASTW
|
||||
hotkeys
|
||||
href
|
||||
hrgn
|
||||
HTCLOSE
|
||||
hwinsta
|
||||
HWINSTA
|
||||
IActivation
|
||||
IApp
|
||||
IAppearance
|
||||
IAsync
|
||||
IBind
|
||||
IBox
|
||||
IClass
|
||||
IComparable
|
||||
IComparer
|
||||
IConnection
|
||||
ICustom
|
||||
IDialog
|
||||
IDirect
|
||||
IExplorer
|
||||
IFACEMETHOD
|
||||
IFile
|
||||
IGraphics
|
||||
IInheritable
|
||||
IMap
|
||||
IMonarch
|
||||
IObject
|
||||
iosfwd
|
||||
IPackage
|
||||
IPeasant
|
||||
ISetup
|
||||
isspace
|
||||
IStorage
|
||||
istream
|
||||
IStringable
|
||||
ITab
|
||||
ITaskbar
|
||||
itow
|
||||
IUri
|
||||
IVirtual
|
||||
KEYSELECT
|
||||
LCID
|
||||
llabs
|
||||
llu
|
||||
localtime
|
||||
lround
|
||||
Lsa
|
||||
lsass
|
||||
LSHIFT
|
||||
LTGRAY
|
||||
MAINWINDOW
|
||||
memchr
|
||||
memicmp
|
||||
MENUCOMMAND
|
||||
MENUDATA
|
||||
MENUINFO
|
||||
MENUITEMINFOW
|
||||
mmeapi
|
||||
MOUSELEAVE
|
||||
mov
|
||||
mptt
|
||||
msappx
|
||||
MULTIPLEUSE
|
||||
NCHITTEST
|
||||
NCLBUTTONDBLCLK
|
||||
NCMOUSELEAVE
|
||||
NCMOUSEMOVE
|
||||
NCRBUTTONDBLCLK
|
||||
NIF
|
||||
NIN
|
||||
NOAGGREGATION
|
||||
NOASYNC
|
||||
NOCHANGEDIR
|
||||
NOPROGRESS
|
||||
NOREDIRECTIONBITMAP
|
||||
NOREPEAT
|
||||
NOTIFYBYPOS
|
||||
NOTIFYICON
|
||||
NOTIFYICONDATA
|
||||
ntprivapi
|
||||
oaidl
|
||||
ocidl
|
||||
ODR
|
||||
offsetof
|
||||
ofstream
|
||||
onefuzz
|
||||
osver
|
||||
OSVERSIONINFOEXW
|
||||
otms
|
||||
OUTLINETEXTMETRICW
|
||||
overridable
|
||||
PACL
|
||||
PAGESCROLL
|
||||
PATINVERT
|
||||
PEXPLICIT
|
||||
PICKFOLDERS
|
||||
pmr
|
||||
ptstr
|
||||
QUERYENDSESSION
|
||||
rcx
|
||||
REGCLS
|
||||
RETURNCMD
|
||||
rfind
|
||||
ROOTOWNER
|
||||
roundf
|
||||
RSHIFT
|
||||
SACL
|
||||
schandle
|
||||
semver
|
||||
serializer
|
||||
SETVERSION
|
||||
SHELLEXECUTEINFOW
|
||||
shobjidl
|
||||
SHOWHIDE
|
||||
SHOWMINIMIZED
|
||||
SHOWTIP
|
||||
SINGLEUSE
|
||||
SIZENS
|
||||
smoothstep
|
||||
snprintf
|
||||
spsc
|
||||
sregex
|
||||
SRWLOC
|
||||
SRWLOCK
|
||||
STDCPP
|
||||
STDMETHOD
|
||||
strchr
|
||||
strcpy
|
||||
streambuf
|
||||
strtoul
|
||||
Stubless
|
||||
Subheader
|
||||
Subpage
|
||||
syscall
|
||||
SYSTEMBACKDROP
|
||||
TABROW
|
||||
TASKBARCREATED
|
||||
TBPF
|
||||
THEMECHANGED
|
||||
tlg
|
||||
TME
|
||||
tmp
|
||||
tmpdir
|
||||
tolower
|
||||
toupper
|
||||
TRACKMOUSEEVENT
|
||||
TTask
|
||||
TVal
|
||||
UChar
|
||||
UFIELD
|
||||
ULARGE
|
||||
UOI
|
||||
UPDATEINIFILE
|
||||
userenv
|
||||
USEROBJECTFLAGS
|
||||
Viewbox
|
||||
virtualalloc
|
||||
wcsstr
|
||||
wcstoui
|
||||
winmain
|
||||
winsta
|
||||
winstamin
|
||||
wmemcmp
|
||||
wpc
|
||||
WSF
|
||||
wsregex
|
||||
wwinmain
|
||||
xchg
|
||||
XDocument
|
||||
XElement
|
||||
xfacet
|
||||
xhash
|
||||
XIcon
|
||||
xiosbase
|
||||
xlocale
|
||||
xlocbuf
|
||||
xlocinfo
|
||||
xlocmes
|
||||
xlocmon
|
||||
xlocnum
|
||||
xloctime
|
||||
XMax
|
||||
xmemory
|
||||
XParse
|
||||
xpath
|
||||
xstddef
|
||||
xstring
|
||||
xtree
|
||||
xutility
|
||||
YIcon
|
||||
YMax
|
||||
117
.github/actions/spelling/allow/colors.txt
vendored
Normal file
117
.github/actions/spelling/allow/colors.txt
vendored
Normal file
@@ -0,0 +1,117 @@
|
||||
alice
|
||||
aliceblue
|
||||
antiquewhite
|
||||
blanchedalmond
|
||||
blueviolet
|
||||
burlywood
|
||||
cadetblue
|
||||
cornflowerblue
|
||||
cornsilk
|
||||
cyan
|
||||
darkblue
|
||||
darkcyan
|
||||
darkgoldenrod
|
||||
darkgray
|
||||
darkgreen
|
||||
darkgrey
|
||||
darkkhaki
|
||||
darkmagenta
|
||||
darkolivegreen
|
||||
darkorange
|
||||
darkorchid
|
||||
darkred
|
||||
darksalmon
|
||||
darkseagreen
|
||||
darkslateblue
|
||||
darkslategray
|
||||
darkslategrey
|
||||
darkturquoise
|
||||
darkviolet
|
||||
deeppink
|
||||
deepskyblue
|
||||
dimgray
|
||||
dimgrey
|
||||
dodgerblue
|
||||
firebrick
|
||||
floralwhite
|
||||
forestgreen
|
||||
gainsboro
|
||||
ghostwhite
|
||||
greenyellow
|
||||
hotpink
|
||||
indian
|
||||
indianred
|
||||
lavenderblush
|
||||
lawngreen
|
||||
lemonchiffon
|
||||
lightblue
|
||||
lightcoral
|
||||
lightcyan
|
||||
lightgoldenrod
|
||||
lightgoldenrodyellow
|
||||
lightgray
|
||||
lightgreen
|
||||
lightgrey
|
||||
lightpink
|
||||
lightsalmon
|
||||
lightseagreen
|
||||
lightskyblue
|
||||
lightslateblue
|
||||
lightslategray
|
||||
lightslategrey
|
||||
lightsteelblue
|
||||
lightyellow
|
||||
limegreen
|
||||
mediumaquamarine
|
||||
mediumblue
|
||||
mediumorchid
|
||||
mediumpurple
|
||||
mediumseagreen
|
||||
mediumslateblue
|
||||
mediumspringgreen
|
||||
mediumturquoise
|
||||
mediumvioletred
|
||||
midnightblue
|
||||
mintcream
|
||||
mistyrose
|
||||
navajo
|
||||
navajowhite
|
||||
navyblue
|
||||
oldlace
|
||||
olivedrab
|
||||
orangered
|
||||
palegoldenrod
|
||||
palegreen
|
||||
paleturquoise
|
||||
palevioletred
|
||||
papayawhip
|
||||
peachpuff
|
||||
peru
|
||||
powderblue
|
||||
rebecca
|
||||
rebeccapurple
|
||||
rosybrown
|
||||
royalblue
|
||||
saddlebrown
|
||||
sandybrown
|
||||
seagreen
|
||||
sienna
|
||||
skyblue
|
||||
slateblue
|
||||
slategray
|
||||
slategrey
|
||||
springgreen
|
||||
steelblue
|
||||
violetred
|
||||
webgray
|
||||
webgreen
|
||||
webgrey
|
||||
webmaroon
|
||||
webpurple
|
||||
whitesmoke
|
||||
xaroon
|
||||
xray
|
||||
xreen
|
||||
xrey
|
||||
xurple
|
||||
yellowgreen
|
||||
@@ -1,8 +1,10 @@
|
||||
Consolas
|
||||
emoji
|
||||
emojis
|
||||
Extralight
|
||||
Gabriola
|
||||
Iosevka
|
||||
MDL
|
||||
Monofur
|
||||
Segoe
|
||||
wght
|
||||
11
.github/actions/spelling/allow/math.txt
vendored
Normal file
11
.github/actions/spelling/allow/math.txt
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
atan
|
||||
CPrime
|
||||
HBar
|
||||
HPrime
|
||||
isnan
|
||||
LPrime
|
||||
LStep
|
||||
powf
|
||||
RSub
|
||||
sqrtf
|
||||
ULP
|
||||
85
.github/actions/spelling/allow/microsoft.txt
vendored
Normal file
85
.github/actions/spelling/allow/microsoft.txt
vendored
Normal file
@@ -0,0 +1,85 @@
|
||||
ACLs
|
||||
ADMINS
|
||||
advapi
|
||||
altform
|
||||
altforms
|
||||
appendwttlogging
|
||||
appx
|
||||
appxbundle
|
||||
appxerror
|
||||
appxmanifest
|
||||
ATL
|
||||
backplating
|
||||
bitmaps
|
||||
BOMs
|
||||
CPLs
|
||||
cpptools
|
||||
cppvsdbg
|
||||
CPRs
|
||||
cryptbase
|
||||
DACL
|
||||
DACLs
|
||||
defaultlib
|
||||
diffs
|
||||
disposables
|
||||
dotnetfeed
|
||||
DTDs
|
||||
DWINRT
|
||||
enablewttlogging
|
||||
Intelli
|
||||
IVisual
|
||||
libucrt
|
||||
libucrtd
|
||||
LKG
|
||||
LOCKFILE
|
||||
Lxss
|
||||
mfcribbon
|
||||
microsoft
|
||||
microsoftonline
|
||||
MSAA
|
||||
msixbundle
|
||||
MSVC
|
||||
MSVCP
|
||||
muxc
|
||||
netcore
|
||||
Onefuzz
|
||||
osgvsowi
|
||||
PFILETIME
|
||||
pgc
|
||||
pgo
|
||||
pgosweep
|
||||
powerrename
|
||||
powershell
|
||||
propkey
|
||||
pscustomobject
|
||||
QWORD
|
||||
regedit
|
||||
robocopy
|
||||
SACLs
|
||||
sdkddkver
|
||||
Shobjidl
|
||||
Skype
|
||||
SRW
|
||||
sxs
|
||||
Sysinternals
|
||||
sysnative
|
||||
systemroot
|
||||
taskkill
|
||||
tasklist
|
||||
tdbuildteamid
|
||||
ucrt
|
||||
ucrtd
|
||||
unvirtualized
|
||||
VCRT
|
||||
vcruntime
|
||||
Virtualization
|
||||
visualstudio
|
||||
vscode
|
||||
VSTHRD
|
||||
winsdkver
|
||||
wlk
|
||||
wslpath
|
||||
wtl
|
||||
wtt
|
||||
wttlog
|
||||
Xamarin
|
||||
@@ -1,44 +1,66 @@
|
||||
Anup
|
||||
austdi
|
||||
arkthur
|
||||
Ballmer
|
||||
bhoj
|
||||
Bhojwani
|
||||
Bluloco
|
||||
carlos
|
||||
dhowett
|
||||
Diviness
|
||||
dsafa
|
||||
duhowett
|
||||
DXP
|
||||
ekg
|
||||
eryksun
|
||||
ethanschoonover
|
||||
Firefox
|
||||
Gatta
|
||||
glsl
|
||||
Gravell
|
||||
Grie
|
||||
Griese
|
||||
Hernan
|
||||
Howett
|
||||
Illhardt
|
||||
iquilezles
|
||||
italo
|
||||
jantari
|
||||
jerrysh
|
||||
Kaiyu
|
||||
kimwalisch
|
||||
KMehrain
|
||||
KODELIFE
|
||||
Kodelife
|
||||
Kourosh
|
||||
kowalczyk
|
||||
leonmsft
|
||||
Lepilleur
|
||||
lhecker
|
||||
lukesampson
|
||||
Macbook
|
||||
Manandhar
|
||||
masserano
|
||||
mbadolato
|
||||
Mehrain
|
||||
menger
|
||||
mgravell
|
||||
michaelniksa
|
||||
michkap
|
||||
migrie
|
||||
mikegr
|
||||
mikemaccana
|
||||
miloush
|
||||
miniksa
|
||||
niksa
|
||||
nvaccess
|
||||
nvda
|
||||
oising
|
||||
oldnewthing
|
||||
opengl
|
||||
osgwiki
|
||||
pabhojwa
|
||||
panos
|
||||
paulcam
|
||||
pauldotknopf
|
||||
PGP
|
||||
@@ -46,11 +68,18 @@ Pham
|
||||
Rincewind
|
||||
rprichard
|
||||
Schoonover
|
||||
shadertoy
|
||||
Shomnipotence
|
||||
simioni
|
||||
Somuah
|
||||
sonph
|
||||
sonpham
|
||||
stakx
|
||||
talo
|
||||
thereses
|
||||
Walisch
|
||||
WDX
|
||||
Wellons
|
||||
Wirt
|
||||
Wojciech
|
||||
zadjii
|
||||
523
.github/actions/spelling/candidate.patterns
vendored
Normal file
523
.github/actions/spelling/candidate.patterns
vendored
Normal file
@@ -0,0 +1,523 @@
|
||||
# marker to ignore all code on line
|
||||
^.*/\* #no-spell-check-line \*/.*$
|
||||
# marker for ignoring a comment to the end of the line
|
||||
// #no-spell-check.*$
|
||||
|
||||
# patch hunk comments
|
||||
^\@\@ -\d+(?:,\d+|) \+\d+(?:,\d+|) \@\@ .*
|
||||
# git index header
|
||||
index [0-9a-z]{7,40}\.\.[0-9a-z]{7,40}
|
||||
|
||||
# cid urls
|
||||
(['"])cid:.*?\g{-1}
|
||||
|
||||
# data url in parens
|
||||
\(data:[^)]*?(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})[^)]*\)
|
||||
# data url in quotes
|
||||
([`'"])data:.*?(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}).*\g{-1}
|
||||
# data url
|
||||
data:[-a-zA-Z=;:/0-9+]*,\S*
|
||||
|
||||
# mailto urls
|
||||
mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,}
|
||||
|
||||
# magnet urls
|
||||
magnet:[?=:\w]+
|
||||
|
||||
# magnet urls
|
||||
"magnet:[^"]+"
|
||||
|
||||
# obs:
|
||||
"obs:[^"]*"
|
||||
|
||||
# The `\b` here means a break, it's the fancy way to handle urls, but it makes things harder to read
|
||||
# In this examples content, I'm using a number of different ways to match things to show various approaches
|
||||
# asciinema
|
||||
\basciinema\.org/a/[0-9a-zA-Z]+
|
||||
|
||||
# apple
|
||||
\bdeveloper\.apple\.com/[-\w?=/]+
|
||||
# Apple music
|
||||
\bembed\.music\.apple\.com/fr/playlist/usr-share/[-\w.]+
|
||||
|
||||
# appveyor api
|
||||
\bci\.appveyor\.com/api/projects/status/[0-9a-z]+
|
||||
# appveyor project
|
||||
\bci\.appveyor\.com/project/(?:[^/\s"]*/){2}builds?/\d+/job/[0-9a-z]+
|
||||
|
||||
# Amazon
|
||||
|
||||
# Amazon
|
||||
\bamazon\.com/[-\w]+/(?:dp/[0-9A-Z]+|)
|
||||
# AWS S3
|
||||
\b\w*\.s3[^.]*\.amazonaws\.com/[-\w/&#%_?:=]*
|
||||
# AWS execute-api
|
||||
\b[0-9a-z]{10}\.execute-api\.[-0-9a-z]+\.amazonaws\.com\b
|
||||
# AWS ELB
|
||||
\b\w+\.[-0-9a-z]+\.elb\.amazonaws\.com\b
|
||||
# AWS SNS
|
||||
\bsns\.[-0-9a-z]+.amazonaws\.com/[-\w/&#%_?:=]*
|
||||
# AWS VPC
|
||||
vpc-\w+
|
||||
|
||||
# While you could try to match `http://` and `https://` by using `s?` in `https?://`, sometimes there
|
||||
# YouTube url
|
||||
\b(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|user/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_%]*
|
||||
# YouTube music
|
||||
\bmusic\.youtube\.com/youtubei/v1/browse(?:[?&]\w+=[-a-zA-Z0-9?&=_]*)
|
||||
# YouTube tag
|
||||
<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"]
|
||||
# YouTube image
|
||||
\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]*
|
||||
# Google Accounts
|
||||
\baccounts.google.com/[-_/?=.:;+%&0-9a-zA-Z]*
|
||||
# Google Analytics
|
||||
\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]*
|
||||
# Google APIs
|
||||
\bgoogleapis\.(?:com|dev)/[a-z]+/(?:v\d+/|)[a-z]+/[-@:./?=\w+|&]+
|
||||
# Google Storage
|
||||
\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|)
|
||||
# Google Calendar
|
||||
\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+
|
||||
\w+\@group\.calendar\.google\.com\b
|
||||
# Google DataStudio
|
||||
\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|)
|
||||
# The leading `/` here is as opposed to the `\b` above
|
||||
# ... a short way to match `https://` or `http://` since most urls have one of those prefixes
|
||||
# Google Docs
|
||||
/docs\.google\.com/[a-z]+/(?:ccc\?key=\w+|(?:u/\d+|d/(?:e/|)[0-9a-zA-Z_-]+/)?(?:edit\?[-\w=#.]*|/\?[\w=&]*|))
|
||||
# Google Drive
|
||||
\bdrive\.google\.com/(?:file/d/|open)[-0-9a-zA-Z_?=]*
|
||||
# Google Groups
|
||||
\bgroups\.google\.com/(?:(?:forum/#!|d/)(?:msg|topics?|searchin)|a)/[^/\s"]+/[-a-zA-Z0-9$]+(?:/[-a-zA-Z0-9]+)*
|
||||
# Google Maps
|
||||
\bmaps\.google\.com/maps\?[\w&;=]*
|
||||
# Google themes
|
||||
themes\.googleusercontent\.com/static/fonts/[^/\s"]+/v\d+/[^.]+.
|
||||
# Google CDN
|
||||
\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]*
|
||||
# Goo.gl
|
||||
/goo\.gl/[a-zA-Z0-9]+
|
||||
# Google Chrome Store
|
||||
\bchrome\.google\.com/webstore/detail/[-\w]*(?:/\w*|)
|
||||
# Google Books
|
||||
\bgoogle\.(?:\w{2,4})/books(?:/\w+)*\?[-\w\d=&#.]*
|
||||
# Google Fonts
|
||||
\bfonts\.(?:googleapis|gstatic)\.com/[-/?=:;+&0-9a-zA-Z]*
|
||||
# Google Forms
|
||||
\bforms\.gle/\w+
|
||||
# Google Scholar
|
||||
\bscholar\.google\.com/citations\?user=[A-Za-z0-9_]+
|
||||
# Google Colab Research Drive
|
||||
\bcolab\.research\.google\.com/drive/[-0-9a-zA-Z_?=]*
|
||||
|
||||
# GitHub SHAs (api)
|
||||
\bapi.github\.com/repos(?:/[^/\s"]+){3}/[0-9a-f]+\b
|
||||
# GitHub SHAs (markdown)
|
||||
(?:\[`?[0-9a-f]+`?\]\(https:/|)/(?:www\.|)github\.com(?:/[^/\s"]+){2,}(?:/[^/\s")]+)(?:[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|)
|
||||
# GitHub SHAs
|
||||
\bgithub\.com(?:/[^/\s"]+){2}[@#][0-9a-f]+\b
|
||||
# GitHub wiki
|
||||
\bgithub\.com/(?:[^/]+/){2}wiki/(?:(?:[^/]+/|)_history|[^/]+(?:/_compare|)/[0-9a-f.]{40,})\b
|
||||
# githubusercontent
|
||||
/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]*
|
||||
# githubassets
|
||||
\bgithubassets.com/[0-9a-f]+(?:[-/\w.]+)
|
||||
# gist github
|
||||
\bgist\.github\.com/[^/\s"]+/[0-9a-f]+
|
||||
# git.io
|
||||
\bgit\.io/[0-9a-zA-Z]+
|
||||
# GitHub JSON
|
||||
"node_id": "[-a-zA-Z=;:/0-9+]*"
|
||||
# Contributor
|
||||
\[[^\]]+\]\(https://github\.com/[^/\s"]+\)
|
||||
# GHSA
|
||||
GHSA(?:-[0-9a-z]{4}){3}
|
||||
|
||||
# GitLab commit
|
||||
\bgitlab\.[^/\s"]*/\S+/\S+/commit/[0-9a-f]{7,16}#[0-9a-f]{40}\b
|
||||
# GitLab merge requests
|
||||
\bgitlab\.[^/\s"]*/\S+/\S+/-/merge_requests/\d+/diffs#[0-9a-f]{40}\b
|
||||
# GitLab uploads
|
||||
\bgitlab\.[^/\s"]*/uploads/[-a-zA-Z=;:/0-9+]*
|
||||
# GitLab commits
|
||||
\bgitlab\.[^/\s"]*/(?:[^/\s"]+/){2}commits?/[0-9a-f]+\b
|
||||
|
||||
# binanace
|
||||
accounts.binance.com/[a-z/]*oauth/authorize\?[-0-9a-zA-Z&%]*
|
||||
|
||||
# bitbucket diff
|
||||
\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}diff(?:stat|)(?:/[^/\s"]+){2}:[0-9a-f]+
|
||||
# bitbucket repositories commits
|
||||
\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}commits?/[0-9a-f]+
|
||||
# bitbucket commits
|
||||
\bbitbucket\.org/(?:[^/\s"]+/){2}commits?/[0-9a-f]+
|
||||
|
||||
# bit.ly
|
||||
\bbit\.ly/\w+
|
||||
|
||||
# bitrise
|
||||
\bapp\.bitrise\.io/app/[0-9a-f]*/[\w.?=&]*
|
||||
|
||||
# bootstrapcdn.com
|
||||
\bbootstrapcdn\.com/[-./\w]+
|
||||
|
||||
# cdn.cloudflare.com
|
||||
\bcdnjs\.cloudflare\.com/[./\w]+
|
||||
|
||||
# circleci
|
||||
\bcircleci\.com/gh(?:/[^/\s"]+){1,5}.[a-z]+\?[-0-9a-zA-Z=&]+
|
||||
|
||||
# gitter
|
||||
\bgitter\.im(?:/[^/\s"]+){2}\?at=[0-9a-f]+
|
||||
|
||||
# gravatar
|
||||
\bgravatar\.com/avatar/[0-9a-f]+
|
||||
|
||||
# ibm
|
||||
[a-z.]*ibm\.com/[-_#=:%!?~.\\/\d\w]*
|
||||
|
||||
# imgur
|
||||
\bimgur\.com/[^.]+
|
||||
|
||||
# Internet Archive
|
||||
\barchive\.org/web/\d+/(?:[-\w.?,'/\\+&%$#_:]*)
|
||||
|
||||
# discord
|
||||
/discord(?:app\.com|\.gg)/(?:invite/)?[a-zA-Z0-9]{7,}
|
||||
|
||||
# Disqus
|
||||
\bdisqus\.com/[-\w/%.()!?&=_]*
|
||||
|
||||
# medium link
|
||||
\blink\.medium\.com/[a-zA-Z0-9]+
|
||||
# medium
|
||||
\bmedium\.com/\@?[^/\s"]+/[-\w]+
|
||||
|
||||
# microsoft
|
||||
\b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]*
|
||||
# powerbi
|
||||
\bapp\.powerbi\.com/reportEmbed/[^"' ]*
|
||||
# vs devops
|
||||
\bvisualstudio.com(?::443|)/[-\w/?=%&.]*
|
||||
# microsoft store
|
||||
\bmicrosoft\.com/store/apps/\w+
|
||||
|
||||
# mvnrepository.com
|
||||
\bmvnrepository\.com/[-0-9a-z./]+
|
||||
|
||||
# now.sh
|
||||
/[0-9a-z-.]+\.now\.sh\b
|
||||
|
||||
# oracle
|
||||
\bdocs\.oracle\.com/[-0-9a-zA-Z./_?#&=]*
|
||||
|
||||
# chromatic.com
|
||||
/\S+.chromatic.com\S*[")]
|
||||
|
||||
# codacy
|
||||
\bapi\.codacy\.com/project/badge/Grade/[0-9a-f]+
|
||||
|
||||
# compai
|
||||
\bcompai\.pub/v1/png/[0-9a-f]+
|
||||
|
||||
# mailgun api
|
||||
\.api\.mailgun\.net/v3/domains/[0-9a-z]+\.mailgun.org/messages/[0-9a-zA-Z=@]*
|
||||
# mailgun
|
||||
\b[0-9a-z]+.mailgun.org
|
||||
|
||||
# /message-id/
|
||||
/message-id/[-\w@./%]+
|
||||
|
||||
# Reddit
|
||||
\breddit\.com/r/[/\w_]*
|
||||
|
||||
# requestb.in
|
||||
\brequestb\.in/[0-9a-z]+
|
||||
|
||||
# sched
|
||||
\b[a-z0-9]+\.sched\.com\b
|
||||
|
||||
# Slack url
|
||||
slack://[a-zA-Z0-9?&=]+
|
||||
# Slack
|
||||
\bslack\.com/[-0-9a-zA-Z/_~?&=.]*
|
||||
# Slack edge
|
||||
\bslack-edge\.com/[-a-zA-Z0-9?&=%./]+
|
||||
# Slack images
|
||||
\bslack-imgs\.com/[-a-zA-Z0-9?&=%.]+
|
||||
|
||||
# shields.io
|
||||
\bshields\.io/[-\w/%?=&.:+;,]*
|
||||
|
||||
# stackexchange -- https://stackexchange.com/feeds/sites
|
||||
\b(?:askubuntu|serverfault|stack(?:exchange|overflow)|superuser).com/(?:questions/\w+/[-\w]+|a/)
|
||||
|
||||
# Sentry
|
||||
[0-9a-f]{32}\@o\d+\.ingest\.sentry\.io\b
|
||||
|
||||
# Twitter markdown
|
||||
\[\@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\)
|
||||
# Twitter hashtag
|
||||
\btwitter\.com/hashtag/[\w?_=&]*
|
||||
# Twitter status
|
||||
\btwitter\.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)
|
||||
# Twitter profile images
|
||||
\btwimg\.com/profile_images/[_\w./]*
|
||||
# Twitter media
|
||||
\btwimg\.com/media/[-_\w./?=]*
|
||||
# Twitter link shortened
|
||||
\bt\.co/\w+
|
||||
|
||||
# facebook
|
||||
\bfburl\.com/[0-9a-z_]+
|
||||
# facebook CDN
|
||||
\bfbcdn\.net/[\w/.,]*
|
||||
# facebook watch
|
||||
\bfb\.watch/[0-9A-Za-z]+
|
||||
|
||||
# dropbox
|
||||
\bdropbox\.com/sh?/[^/\s"]+/[-0-9A-Za-z_.%?=&;]+
|
||||
|
||||
# ipfs protocol
|
||||
ipfs://[0-9a-z]*
|
||||
# ipfs url
|
||||
/ipfs/[0-9a-z]*
|
||||
|
||||
# w3
|
||||
\bw3\.org/[-0-9a-zA-Z/#.]+
|
||||
|
||||
# loom
|
||||
\bloom\.com/embed/[0-9a-f]+
|
||||
|
||||
# regex101
|
||||
\bregex101\.com/r/[^/\s"]+/\d+
|
||||
|
||||
# figma
|
||||
\bfigma\.com/file(?:/[0-9a-zA-Z]+/)+
|
||||
|
||||
# freecodecamp.org
|
||||
\bfreecodecamp\.org/[-\w/.]+
|
||||
|
||||
# image.tmdb.org
|
||||
\bimage\.tmdb\.org/[/\w.]+
|
||||
|
||||
# mermaid
|
||||
\bmermaid\.ink/img/[-\w]+|\bmermaid-js\.github\.io/mermaid-live-editor/#/edit/[-\w]+
|
||||
|
||||
# Wikipedia
|
||||
\ben\.wikipedia\.org/wiki/[-\w%.#]+
|
||||
|
||||
# gitweb
|
||||
[^"\s]+/gitweb/\S+;h=[0-9a-f]+
|
||||
|
||||
# HyperKitty lists
|
||||
/archives/list/[^@/]+\@[^/\s"]*/message/[^/\s"]*/
|
||||
|
||||
# lists
|
||||
/thread\.html/[^"\s]+
|
||||
|
||||
# list-management
|
||||
\blist-manage\.com/subscribe(?:[?&](?:u|id)=[0-9a-f]+)+
|
||||
|
||||
# kubectl.kubernetes.io/last-applied-configuration
|
||||
"kubectl.kubernetes.io/last-applied-configuration": ".*"
|
||||
|
||||
# pgp
|
||||
\bgnupg\.net/pks/lookup[?&=0-9a-zA-Z]*
|
||||
|
||||
# Spotify
|
||||
\bopen\.spotify\.com/embed/playlist/\w+
|
||||
|
||||
# Mastodon
|
||||
\bmastodon\.[-a-z.]*/(?:media/|\@)[?&=0-9a-zA-Z_]*
|
||||
|
||||
# scastie
|
||||
\bscastie\.scala-lang\.org/[^/]+/\w+
|
||||
|
||||
# images.unsplash.com
|
||||
\bimages\.unsplash\.com/(?:(?:flagged|reserve)/|)[-\w./%?=%&.;]+
|
||||
|
||||
# pastebin
|
||||
\bpastebin\.com/[\w/]+
|
||||
|
||||
# heroku
|
||||
\b\w+\.heroku\.com/source/archive/\w+
|
||||
|
||||
# quip
|
||||
\b\w+\.quip\.com/\w+(?:(?:#|/issues/)\w+)?
|
||||
|
||||
# badgen.net
|
||||
\bbadgen\.net/badge/[^")\]'\s]+
|
||||
|
||||
# statuspage.io
|
||||
\w+\.statuspage\.io\b
|
||||
|
||||
# media.giphy.com
|
||||
\bmedia\.giphy\.com/media/[^/]+/[\w.?&=]+
|
||||
|
||||
# tinyurl
|
||||
\btinyurl\.com/\w+
|
||||
|
||||
# getopts
|
||||
\bgetopts\s+(?:"[^"]+"|'[^']+')
|
||||
|
||||
# ANSI color codes
|
||||
(?:\\(?:u00|x)1b|\x1b)\[\d+(?:;\d+|)m
|
||||
|
||||
# URL escaped characters
|
||||
\%[0-9A-F][A-F]
|
||||
# IPv6
|
||||
\b(?:[0-9a-fA-F]{0,4}:){3,7}[0-9a-fA-F]{0,4}\b
|
||||
# c99 hex digits (not the full format, just one I've seen)
|
||||
0x[0-9a-fA-F](?:\.[0-9a-fA-F]*|)[pP]
|
||||
# Punycode
|
||||
\bxn--[-0-9a-z]+
|
||||
# sha
|
||||
sha\d+:[0-9]*[a-f]{3,}[0-9a-f]*
|
||||
# sha-... -- uses a fancy capture
|
||||
(['"]|")[0-9a-f]{40,}\g{-1}
|
||||
# hex runs
|
||||
\b[0-9a-fA-F]{16,}\b
|
||||
# hex in url queries
|
||||
=[0-9a-fA-F]*?(?:[A-F]{3,}|[a-f]{3,})[0-9a-fA-F]*?&
|
||||
# ssh
|
||||
(?:ssh-\S+|-nistp256) [-a-zA-Z=;:/0-9+]{12,}
|
||||
|
||||
# PGP
|
||||
\b(?:[0-9A-F]{4} ){9}[0-9A-F]{4}\b
|
||||
# GPG keys
|
||||
\b(?:[0-9A-F]{4} ){5}(?: [0-9A-F]{4}){5}\b
|
||||
# Well known gpg keys
|
||||
.well-known/openpgpkey/[\w./]+
|
||||
|
||||
# uuid:
|
||||
\b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b
|
||||
# hex digits including css/html color classes:
|
||||
(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|u\d+)\b
|
||||
# integrity
|
||||
integrity="sha\d+-[-a-zA-Z=;:/0-9+]{40,}"
|
||||
|
||||
# https://www.gnu.org/software/groff/manual/groff.html
|
||||
# man troff content
|
||||
\\f[BCIPR]
|
||||
# '
|
||||
\\\(aq
|
||||
|
||||
# .desktop mime types
|
||||
^MimeTypes?=.*$
|
||||
# .desktop localized entries
|
||||
^[A-Z][a-z]+\[[a-z]+\]=.*$
|
||||
# Localized .desktop content
|
||||
Name\[[^\]]+\]=.*
|
||||
|
||||
# IServiceProvider
|
||||
\bI(?=(?:[A-Z][a-z]{2,})+\b)
|
||||
|
||||
# crypt
|
||||
"\$2[ayb]\$.{56}"
|
||||
|
||||
# scrypt / argon
|
||||
\$(?:scrypt|argon\d+[di]*)\$\S+
|
||||
|
||||
# Input to GitHub JSON
|
||||
content: "[-a-zA-Z=;:/0-9+]*="
|
||||
|
||||
# Python stringprefix / binaryprefix
|
||||
# Note that there's a high false positive rate, remove the `?=` and search for the regex to see if the matches seem like reasonable strings
|
||||
(?<!')\b(?:B|BR|Br|F|FR|Fr|R|RB|RF|Rb|Rf|U|UR|Ur|b|bR|br|f|fR|fr|r|rB|rF|rb|rf|u|uR|ur)'(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})
|
||||
|
||||
# Regular expressions for (P|p)assword
|
||||
\([A-Z]\|[a-z]\)[a-z]+
|
||||
|
||||
# JavaScript regular expressions
|
||||
# javascript test regex
|
||||
/.*/[gim]*\.test\(
|
||||
# javascript match regex
|
||||
\.match\(/[^/\s"]*/[gim]*\s*
|
||||
# javascript match regex
|
||||
\.match\(/\\[b].*?/[gim]*\s*\)(?:;|$)
|
||||
# javascript regex
|
||||
^\s*/\\[b].*/[gim]*\s*(?:\)(?:;|$)|,$)
|
||||
# javascript replace regex
|
||||
\.replace\(/[^/\s"]*/[gim]*\s*,
|
||||
|
||||
# Go regular expressions
|
||||
regexp?\.MustCompile\(`[^`]*`\)
|
||||
|
||||
# sed regular expressions
|
||||
sed 's/(?:[^/]*?[a-zA-Z]{3,}[^/]*?/){2}
|
||||
|
||||
# go install
|
||||
go install(?:\s+[a-z]+\.[-@\w/.]+)+
|
||||
|
||||
# kubernetes pod status lists
|
||||
# https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase
|
||||
\w+(?:-\w+)+\s+\d+/\d+\s+(?:Running|Pending|Succeeded|Failed|Unknown)\s+
|
||||
|
||||
# kubectl - pods in CrashLoopBackOff
|
||||
\w+-[0-9a-f]+-\w+\s+\d+/\d+\s+CrashLoopBackOff\s+
|
||||
|
||||
# kubernetes object suffix
|
||||
-[0-9a-f]{10}-\w{5}\s
|
||||
|
||||
# posthog secrets
|
||||
posthog\.init\((['"])phc_[^"',]+\g{-1},
|
||||
|
||||
# xcode
|
||||
|
||||
# xcodeproject scenes
|
||||
(?:Controller|ID|id)="\w{3}-\w{2}-\w{3}"
|
||||
|
||||
# xcode api botches
|
||||
customObjectInstantitationMethod
|
||||
|
||||
# font awesome classes
|
||||
\.fa-[-a-z0-9]+
|
||||
|
||||
# Update Lorem based on your content (requires `ge` and `w` from https://github.com/jsoref/spelling; and `review` from https://github.com/check-spelling/check-spelling/wiki/Looking-for-items-locally )
|
||||
# grep '^[^#].*lorem' .github/actions/spelling/patterns.txt|perl -pne 's/.*i..\?://;s/\).*//' |tr '|' "\n"|sort -f |xargs -n1 ge|perl -pne 's/^[^:]*://'|sort -u|w|sed -e 's/ .*//'|w|review -
|
||||
# Warning, while `(?i)` is very neat and fancy, if you have some binary files that aren't proper unicode, you might run into:
|
||||
## Operation "substitution (s///)" returns its argument for non-Unicode code point 0x1C19AE (the code point will vary).
|
||||
## You could manually change `(?i)X...` to use `[Xx]...`
|
||||
## or you could add the files to your `excludes` file (a version after 0.0.19 should identify the file path)
|
||||
# Lorem
|
||||
(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus)\b(?:\w|\s|[,.])*
|
||||
|
||||
# Non-English
|
||||
[a-zA-Z]*[ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*
|
||||
|
||||
# French
|
||||
# This corpus only had capital letters, but you probably want lowercase ones as well.
|
||||
\b[LN]'+[a-z]{2,}\b
|
||||
|
||||
# latex
|
||||
\\(?:n(?:ew|ormal|osub)|r(?:enew)|t(?:able(?:of|)|he|itle))(?=[a-z]+)
|
||||
|
||||
# the negative lookahead here is to allow catching 'templatesz' as a misspelling
|
||||
# but to otherwise recognize a Windows path with \templates\foo.template or similar:
|
||||
\\(?:necessary|r(?:eport|esolve[dr]?|esult)|t(?:arget|emplates?))(?![a-z])
|
||||
# ignore long runs of a single character:
|
||||
\b([A-Za-z])\g{-1}{3,}\b
|
||||
# Note that the next example is no longer necessary if you are using
|
||||
# to match a string starting with a `#`, use a character-class:
|
||||
[#]backwards
|
||||
# version suffix <word>v#
|
||||
(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_]))
|
||||
# Compiler flags (Scala)
|
||||
(?:^|[\t ,>"'`=(])-J-[DPWXY](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
|
||||
# Compiler flags
|
||||
#(?:^|[\t ,"'`=(])-[DPWXYLlf](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
|
||||
|
||||
# Compiler flags (linker)
|
||||
,-B
|
||||
# curl arguments
|
||||
\b(?:\\n|)curl(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)*
|
||||
# set arguments
|
||||
\bset(?:\s+-[abefimouxE]{1,2})*\s+-[abefimouxE]{3,}(?:\s+-[abefimouxE]+)*
|
||||
# tar arguments
|
||||
\b(?:\\n|)g?tar(?:\.exe|)(?:(?:\s+--[-a-zA-Z]+|\s+-[a-zA-Z]+|\s[ABGJMOPRSUWZacdfh-pr-xz]+\b)(?:=[^ ]*|))+
|
||||
# tput arguments -- https://man7.org/linux/man-pages/man5/terminfo.5.html -- technically they can be more than 5 chars long...
|
||||
\btput\s+(?:(?:-[SV]|-T\s*\w+)\s+)*\w{3,5}\b
|
||||
# macOS temp folders
|
||||
/var/folders/\w\w/[+\w]+/(?:T|-Caches-)/
|
||||
117
.github/actions/spelling/excludes.txt
vendored
Normal file
117
.github/actions/spelling/excludes.txt
vendored
Normal file
@@ -0,0 +1,117 @@
|
||||
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
|
||||
(?:(?i)\.png$)
|
||||
(?:^|/)(?i)COPYRIGHT
|
||||
(?:^|/)(?i)LICEN[CS]E
|
||||
(?:^|/)3rdparty/
|
||||
(?:^|/)dirs$
|
||||
(?:^|/)go\.mod$
|
||||
(?:^|/)go\.sum$
|
||||
(?:^|/)package(?:-lock|)\.json$
|
||||
(?:^|/)sources(?:|\.dep)$
|
||||
(?:^|/)vendor/
|
||||
\.a$
|
||||
\.ai$
|
||||
\.avi$
|
||||
\.bmp$
|
||||
\.bz2$
|
||||
\.cer$
|
||||
\.class$
|
||||
\.crl$
|
||||
\.crt$
|
||||
\.csr$
|
||||
\.dll$
|
||||
\.docx?$
|
||||
\.drawio$
|
||||
\.DS_Store$
|
||||
\.eot$
|
||||
\.eps$
|
||||
\.exe$
|
||||
\.gif$
|
||||
\.gitattributes$
|
||||
\.graffle$
|
||||
\.gz$
|
||||
\.icns$
|
||||
\.ico$
|
||||
\.jar$
|
||||
\.jks$
|
||||
\.jpeg$
|
||||
\.jpg$
|
||||
\.key$
|
||||
\.lib$
|
||||
\.lock$
|
||||
\.map$
|
||||
\.min\..
|
||||
\.mod$
|
||||
\.mp3$
|
||||
\.mp4$
|
||||
\.o$
|
||||
\.ocf$
|
||||
\.otf$
|
||||
\.pbxproj$
|
||||
\.pdf$
|
||||
\.pem$
|
||||
\.png$
|
||||
\.psd$
|
||||
\.pyc$
|
||||
\.runsettings$
|
||||
\.s$
|
||||
\.sig$
|
||||
\.so$
|
||||
\.svg$
|
||||
\.svgz$
|
||||
\.svgz?$
|
||||
\.tar$
|
||||
\.tgz$
|
||||
\.tiff?$
|
||||
\.ttf$
|
||||
\.vsdx$
|
||||
\.wav$
|
||||
\.webm$
|
||||
\.webp$
|
||||
\.woff
|
||||
\.woff2?$
|
||||
\.xcf$
|
||||
\.xls
|
||||
\.xlsx?$
|
||||
\.xpm$
|
||||
\.yml$
|
||||
\.zip$
|
||||
^\.github/actions/spelling/
|
||||
^\.github/fabricbot.json$
|
||||
^\.gitignore$
|
||||
^\Q.git-blame-ignore-revs\E$
|
||||
^\Q.github/workflows/spelling.yml\E$
|
||||
^\Qdoc/reference/windows-terminal-logo.ans\E$
|
||||
^\Qsamples/ConPTY/EchoCon/EchoCon/EchoCon.vcxproj.filters\E$
|
||||
^\Qsrc/host/exe/Host.EXE.vcxproj.filters\E$
|
||||
^\Qsrc/host/ft_host/chafa.txt\E$
|
||||
^\Qsrc/tools/closetest/CloseTest.vcxproj.filters\E$
|
||||
^\XamlStyler.json$
|
||||
^build/config/
|
||||
^consolegit2gitfilters\.json$
|
||||
^dep/
|
||||
^doc/reference/master-sequence-list.csv$
|
||||
^doc/reference/UTF8-torture-test\.txt$
|
||||
^oss/
|
||||
^src/host/ft_uia/run\.bat$
|
||||
^src/host/runft\.bat$
|
||||
^src/host/runut\.bat$
|
||||
^src/interactivity/onecore/BgfxEngine\.
|
||||
^src/renderer/atlas/
|
||||
^src/renderer/wddmcon/WddmConRenderer\.
|
||||
^src/terminal/adapter/ut_adapter/run\.bat$
|
||||
^src/terminal/parser/delfuzzpayload\.bat$
|
||||
^src/terminal/parser/ft_fuzzer/run\.bat$
|
||||
^src/terminal/parser/ft_fuzzer/VTCommandFuzzer\.cpp$
|
||||
^src/terminal/parser/ft_fuzzwrapper/run\.bat$
|
||||
^src/terminal/parser/ut_parser/Base64Test.cpp$
|
||||
^src/terminal/parser/ut_parser/run\.bat$
|
||||
^src/tools/integrity/packageuwp/ConsoleUWP\.appxSources$
|
||||
^src/tools/lnkd/lnkd\.bat$
|
||||
^src/tools/pixels/pixels\.bat$
|
||||
^src/tools/texttests/fira\.txt$
|
||||
^src/tools/U8U16Test/(?:fr|ru|zh)\.txt$
|
||||
^src/types/ut_types/UtilsTests.cpp$
|
||||
^tools/ReleaseEngineering/ServicingPipeline.ps1$
|
||||
ignore$
|
||||
SUMS$
|
||||
@@ -1,16 +1,23 @@
|
||||
AAAa
|
||||
AAAAA
|
||||
AAAAAAAAAAAAA
|
||||
AAAAAABBBBBBCCC
|
||||
AAAAABBBBBBCCC
|
||||
abcd
|
||||
abcd
|
||||
abcde
|
||||
abcdef
|
||||
ABCDEFG
|
||||
ABCDEFGH
|
||||
ABCDEFGHIJ
|
||||
abcdefghijk
|
||||
ABCDEFGHIJKLMNO
|
||||
abcdefghijklmnop
|
||||
ABCDEFGHIJKLMNOPQRST
|
||||
abcdefghijklmnopqrstuvwxyz
|
||||
ABCG
|
||||
ABE
|
||||
abf
|
||||
BBBBB
|
||||
BBBBBBBB
|
||||
BBBBBCCC
|
||||
BBBBCCCCC
|
||||
BBGGRR
|
||||
BBBBBBBBBBBBBBDDDD
|
||||
EFG
|
||||
EFGh
|
||||
QQQQQQQQQQABCDEFGHIJ
|
||||
@@ -19,7 +26,6 @@ QQQQQQQQQQABCDEFGHIJKLMNOPQRSTQQQQQQQQQQ
|
||||
QQQQQQQQQQABCDEFGHIJPQRSTQQQQQQQQQQ
|
||||
qrstuvwxyz
|
||||
qwerty
|
||||
QWERTYUIOP
|
||||
qwertyuiopasdfg
|
||||
YYYYYYYDDDDDDDDDDD
|
||||
ZAAZZ
|
||||
@@ -31,3 +37,4 @@ ZYXWVUT
|
||||
ZZBBZ
|
||||
ZZZBB
|
||||
ZZZBZ
|
||||
ZZZZZ
|
||||
File diff suppressed because it is too large
Load Diff
6
.github/actions/spelling/expect/web.txt
vendored
Normal file
6
.github/actions/spelling/expect/web.txt
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
WCAG
|
||||
winui
|
||||
appshellintegration
|
||||
mdtauk
|
||||
gfycat
|
||||
Guake
|
||||
62
.github/actions/spelling/line_forbidden.patterns
vendored
Normal file
62
.github/actions/spelling/line_forbidden.patterns
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
# reject `m_data` as there's a certain OS which has evil defines that break things if it's used elsewhere
|
||||
# \bm_data\b
|
||||
|
||||
# If you have a framework that uses `it()` for testing and `fit()` for debugging a specific test,
|
||||
# you might not want to check in code where you were debugging w/ `fit()`, in which case, you might want
|
||||
# to use this:
|
||||
#\bfit\(
|
||||
|
||||
# s.b. GitHub
|
||||
\bGithub\b
|
||||
|
||||
# s.b. GitLab
|
||||
\bGitlab\b
|
||||
|
||||
# s.b. JavaScript
|
||||
\bJavascript\b
|
||||
|
||||
# s.b. Microsoft
|
||||
\bMicroSoft\b
|
||||
|
||||
# s.b. another
|
||||
\ban[- ]other\b
|
||||
|
||||
# s.b. greater than
|
||||
\bgreater then\b
|
||||
|
||||
# s.b. into
|
||||
#\sin to\s
|
||||
|
||||
# s.b. opt-in
|
||||
\sopt in\s
|
||||
|
||||
# s.b. less than
|
||||
\bless then\b
|
||||
|
||||
# s.b. otherwise
|
||||
\bother[- ]wise\b
|
||||
|
||||
# s.b. nonexistent
|
||||
\bnon existing\b
|
||||
\b[Nn]o[nt][- ]existent\b
|
||||
|
||||
# s.b. preexisting
|
||||
[Pp]re[- ]existing
|
||||
|
||||
# s.b. preempt
|
||||
[Pp]re[- ]empt\b
|
||||
|
||||
# s.b. preemptively
|
||||
[Pp]re[- ]emptively
|
||||
|
||||
# s.b. reentrancy
|
||||
[Rr]e[- ]entrancy
|
||||
|
||||
# s.b. reentrant
|
||||
[Rr]e[- ]entrant
|
||||
|
||||
# s.b. workaround(s)
|
||||
#\bwork[- ]arounds?\b
|
||||
|
||||
# Reject duplicate words
|
||||
\s([A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})\s\g{-1}\s
|
||||
96
.github/actions/spelling/patterns/patterns.txt
vendored
Normal file
96
.github/actions/spelling/patterns/patterns.txt
vendored
Normal file
@@ -0,0 +1,96 @@
|
||||
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns
|
||||
|
||||
https?://\S+
|
||||
[Pp]ublicKeyToken="?[0-9a-fA-F]{16}"?
|
||||
(?:[{"]|UniqueIdentifier>)[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}(?:[}"]|</UniqueIdentifier)
|
||||
(?:0[Xx]|\\x|U\+|#)[a-f0-9A-FGgRr]{2,}[Uu]?[Ll]{0,2}\b
|
||||
microsoft/cascadia-code\@[0-9a-fA-F]{40}
|
||||
\d+x\d+Logo
|
||||
Scro\&ll
|
||||
# selectionInput.cpp
|
||||
:\\windows\\syste\b
|
||||
TestUtils::VerifyExpectedString\(tb, L"[^"]+"
|
||||
(?:hostSm|mach)\.ProcessString\(L"[^"]+"
|
||||
\b([A-Za-z])\g{-1}{3,}\b
|
||||
0x[0-9A-Za-z]+
|
||||
Base64::s_(?:En|De)code\(L"[^"]+"
|
||||
VERIFY_ARE_EQUAL\(L"[^"]+"
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+/"
|
||||
std::memory_order_[\w]+
|
||||
D2DERR_SHADER_COMPILE_FAILED
|
||||
TIL_FEATURE_[0-9A-Z_]+
|
||||
vcvars\w*
|
||||
ROY\sG\.\sBIV
|
||||
!(?:(?i)ESC)!\[
|
||||
!(?:(?i)CSI)!(?:\d+(?:;\d+|)m|[ABCDF])
|
||||
|
||||
# Python stringprefix / binaryprefix
|
||||
\b(?:B|BR|Br|F|FR|Fr|R|RB|RF|Rb|Rf|U|UR|Ur|b|bR|br|f|fR|fr|r|rB|rF|rb|rf|u|uR|ur)'
|
||||
|
||||
# Automatically suggested patterns
|
||||
# hit-count: 3831 file-count: 582
|
||||
# IServiceProvider
|
||||
\bI(?=(?:[A-Z][a-z]{2,})+\b)
|
||||
|
||||
# hit-count: 71 file-count: 35
|
||||
# Compiler flags
|
||||
(?:^|[\t ,"'`=(])-[D](?=[A-Z]{2,}|[A-Z][a-z])
|
||||
(?:^|[\t ,"'`=(])-[X](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
|
||||
|
||||
# hit-count: 41 file-count: 28
|
||||
# version suffix <word>v#
|
||||
(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_]))
|
||||
|
||||
# hit-count: 20 file-count: 9
|
||||
# hex runs
|
||||
\b[0-9a-fA-F]{16,}\b
|
||||
|
||||
# hit-count: 10 file-count: 7
|
||||
# uuid:
|
||||
\b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b
|
||||
|
||||
# hit-count: 4 file-count: 4
|
||||
# mailto urls
|
||||
mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,}
|
||||
|
||||
# hit-count: 4 file-count: 1
|
||||
# ANSI color codes
|
||||
(?:\\(?:u00|x)1b|\x1b)\[\d+(?:;\d+|)m
|
||||
|
||||
# hit-count: 2 file-count: 1
|
||||
# latex
|
||||
\\(?:n(?:ew|ormal|osub)|r(?:enew)|t(?:able(?:of|)|he|itle))(?=[a-z]+)
|
||||
|
||||
# hit-count: 1 file-count: 1
|
||||
# hex digits including css/html color classes:
|
||||
(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|u\d+)\b
|
||||
|
||||
# hit-count: 1 file-count: 1
|
||||
# Non-English
|
||||
[a-zA-Z]*[ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*
|
||||
|
||||
# hit-count: 1 file-count: 1
|
||||
# French
|
||||
# This corpus only had capital letters, but you probably want lowercase ones as well.
|
||||
\b[LN]'+[a-z]{2,}\b
|
||||
|
||||
# acceptable duplicates
|
||||
# ls directory listings
|
||||
[-bcdlpsw](?:[-r][-w][-sx]){3}\s+\d+\s+(\S+)\s+\g{-1}\s+\d+\s+
|
||||
# C/idl types + English ...
|
||||
\s(Guid|long|LONG|that) \g{-1}\s
|
||||
|
||||
# javadoc / .net
|
||||
(?:[\\@](?:groupname|param)|(?:public|private)(?:\s+static|\s+readonly)*)\s+(\w+)\s+\g{-1}\s
|
||||
|
||||
# Commit message -- Signed-off-by and friends
|
||||
^\s*(?:(?:Based-on-patch|Co-authored|Helped|Mentored|Reported|Reviewed|Signed-off)-by|Thanks-to): (?:[^<]*<[^>]*>|[^<]*)\s*$
|
||||
|
||||
# Autogenerated revert commit message
|
||||
^This reverts commit [0-9a-f]{40}\.$
|
||||
|
||||
# vtmode
|
||||
--vtmode\s+(\w+)\s+\g{-1}\s
|
||||
|
||||
# ignore long runs of a single character:
|
||||
\b([A-Za-z])\g{-1}{3,}\b
|
||||
12
.github/actions/spelling/reject.txt
vendored
Normal file
12
.github/actions/spelling/reject.txt
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
^attache$
|
||||
^attacher$
|
||||
^attachers$
|
||||
benefitting
|
||||
occurences?
|
||||
^dependan.*
|
||||
^oer$
|
||||
Sorce
|
||||
^[Ss]pae.*
|
||||
^untill$
|
||||
^untilling$
|
||||
^wether.*
|
||||
20
.github/workflows/spelling.yml
vendored
20
.github/workflows/spelling.yml
vendored
@@ -1,20 +0,0 @@
|
||||
name: Spell checking
|
||||
on:
|
||||
push:
|
||||
schedule:
|
||||
# * is a special character in YAML so you have to quote this string
|
||||
- cron: '15 * * * *'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Spell checking
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2.0.0
|
||||
with:
|
||||
fetch-depth: 5
|
||||
- uses: check-spelling/check-spelling@0.0.16-alpha
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
bucket: .github/actions
|
||||
project: spell-check
|
||||
134
.github/workflows/spelling2.yml
vendored
Normal file
134
.github/workflows/spelling2.yml
vendored
Normal file
@@ -0,0 +1,134 @@
|
||||
# spelling.yml is blocked per https://github.com/check-spelling/check-spelling/security/advisories/GHSA-g86g-chm8-7r2p
|
||||
name: Spell checking
|
||||
|
||||
# Comment management is handled through a secondary job, for details see:
|
||||
# https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions
|
||||
#
|
||||
# `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment
|
||||
# (in odd cases, it might actually run just to collapse a commment, but that's fairly rare)
|
||||
# it needs `contents: write` in order to add a comment.
|
||||
#
|
||||
# `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment
|
||||
# or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment)
|
||||
# it needs `pull-requests: write` in order to manipulate those comments.
|
||||
|
||||
# Updating pull request branches is managed via comment handling.
|
||||
# For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list
|
||||
#
|
||||
# These elements work together to make it happen:
|
||||
#
|
||||
# `on.issue_comment`
|
||||
# This event listens to comments by users asking to update the metadata.
|
||||
#
|
||||
# `jobs.update`
|
||||
# This job runs in response to an issue_comment and will push a new commit
|
||||
# to update the spelling metadata.
|
||||
#
|
||||
# `with.experimental_apply_changes_via_bot`
|
||||
# Tells the action to support and generate messages that enable it
|
||||
# to make a commit to update the spelling metadata.
|
||||
#
|
||||
# `with.ssh_key`
|
||||
# In order to trigger workflows when the commit is made, you can provide a
|
||||
# secret (typically, a write-enabled github deploy key).
|
||||
#
|
||||
# For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "**"
|
||||
tags-ignore:
|
||||
- "**"
|
||||
pull_request_target:
|
||||
branches:
|
||||
- "**"
|
||||
tags-ignore:
|
||||
- "**"
|
||||
types:
|
||||
- 'opened'
|
||||
- 'reopened'
|
||||
- 'synchronize'
|
||||
issue_comment:
|
||||
types:
|
||||
- 'created'
|
||||
|
||||
jobs:
|
||||
spelling:
|
||||
name: Spell checking
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
actions: read
|
||||
outputs:
|
||||
followup: ${{ steps.spelling.outputs.followup }}
|
||||
runs-on: ubuntu-latest
|
||||
if: "contains(github.event_name, 'pull_request') || github.event_name == 'push'"
|
||||
concurrency:
|
||||
group: spelling-${{ github.event.pull_request.number || github.ref }}
|
||||
# note: If you use only_check_changed_files, you do not want cancel-in-progress
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: check-spelling
|
||||
id: spelling
|
||||
uses: check-spelling/check-spelling@v0.0.21
|
||||
with:
|
||||
suppress_push_for_open_pull_request: 1
|
||||
checkout: true
|
||||
check_file_names: 1
|
||||
spell_check_this: check-spelling/spell-check-this@prerelease
|
||||
post_comment: 0
|
||||
use_magic_file: 1
|
||||
extra_dictionary_limit: 10
|
||||
extra_dictionaries:
|
||||
cspell:software-terms/src/software-terms.txt
|
||||
cspell:python/src/python/python-lib.txt
|
||||
cspell:node/node.txt
|
||||
cspell:cpp/src/stdlib-c.txt
|
||||
cspell:cpp/src/stdlib-cpp.txt
|
||||
cspell:fullstack/fullstack.txt
|
||||
cspell:filetypes/filetypes.txt
|
||||
cspell:html/html.txt
|
||||
cspell:cpp/src/compiler-msvc.txt
|
||||
cspell:python/src/common/extra.txt
|
||||
cspell:powershell/powershell.txt
|
||||
cspell:aws/aws.txt
|
||||
cspell:cpp/src/lang-keywords.txt
|
||||
cspell:npm/npm.txt
|
||||
cspell:dotnet/dotnet.txt
|
||||
cspell:python/src/python/python.txt
|
||||
cspell:css/css.txt
|
||||
cspell:cpp/src/stdlib-cmath.txt
|
||||
check_extra_dictionaries: ''
|
||||
|
||||
comment-push:
|
||||
name: Report (Push)
|
||||
# If your workflow isn't running on push, you can remove this job
|
||||
runs-on: ubuntu-latest
|
||||
needs: spelling
|
||||
permissions:
|
||||
contents: write
|
||||
if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push'
|
||||
steps:
|
||||
- name: comment
|
||||
uses: check-spelling/check-spelling@v0.0.21
|
||||
with:
|
||||
checkout: true
|
||||
spell_check_this: check-spelling/spell-check-this@prerelease
|
||||
task: ${{ needs.spelling.outputs.followup }}
|
||||
|
||||
comment-pr:
|
||||
name: Report (PR)
|
||||
# If you workflow isn't running on pull_request*, you can remove this job
|
||||
runs-on: ubuntu-latest
|
||||
needs: spelling
|
||||
permissions:
|
||||
pull-requests: write
|
||||
if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request')
|
||||
steps:
|
||||
- name: comment
|
||||
uses: check-spelling/check-spelling@v0.0.21
|
||||
with:
|
||||
checkout: true
|
||||
spell_check_this: check-spelling/spell-check-this@prerelease
|
||||
task: ${{ needs.spelling.outputs.followup }}
|
||||
@@ -81,6 +81,7 @@ namespace SettingsModelLocalTests
|
||||
TEST_METHOD(TestRebindNestedCommand);
|
||||
|
||||
TEST_METHOD(TestCopy);
|
||||
TEST_METHOD(TestCloneInheritanceTree);
|
||||
|
||||
TEST_CLASS_SETUP(ClassSetup)
|
||||
{
|
||||
@@ -1355,6 +1356,7 @@ namespace SettingsModelLocalTests
|
||||
const winrt::guid guid1{ ::Microsoft::Console::Utils::GuidFromString(L"{6239a42c-6666-49a3-80bd-e8fdd045185c}") };
|
||||
const winrt::guid guid2{ ::Microsoft::Console::Utils::GuidFromString(L"{2C4DE342-38B7-51CF-B940-2309A097F518}") };
|
||||
const winrt::guid fakeGuid{ ::Microsoft::Console::Utils::GuidFromString(L"{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}") };
|
||||
const winrt::guid autogeneratedGuid{};
|
||||
const std::optional<winrt::guid> badGuid{};
|
||||
|
||||
VerifyParseSucceeded(settings0String);
|
||||
@@ -1366,7 +1368,7 @@ namespace SettingsModelLocalTests
|
||||
VERIFY_ARE_EQUAL(guid0, settings->_GetProfileGuidByName(name0));
|
||||
VERIFY_ARE_EQUAL(guid1, settings->_GetProfileGuidByName(name1));
|
||||
VERIFY_ARE_EQUAL(guid2, settings->_GetProfileGuidByName(name2));
|
||||
VERIFY_ARE_EQUAL(badGuid, settings->_GetProfileGuidByName(name3));
|
||||
VERIFY_ARE_EQUAL(autogeneratedGuid, settings->_GetProfileGuidByName(name3));
|
||||
VERIFY_ARE_EQUAL(badGuid, settings->_GetProfileGuidByName(badName));
|
||||
|
||||
auto prof0{ settings->FindProfile(guid0) };
|
||||
@@ -1521,9 +1523,9 @@ namespace SettingsModelLocalTests
|
||||
{
|
||||
auto settings = winrt::make_self<implementation::CascadiaSettings>(false);
|
||||
settings->_ParseJsonString(settings0String, false);
|
||||
VERIFY_IS_TRUE(settings->_userDefaultProfileSettings == Json::Value::null);
|
||||
VERIFY_IS_NULL(settings->_userDefaultProfileSettings);
|
||||
settings->_ApplyDefaultsFromUserSettings();
|
||||
VERIFY_IS_FALSE(settings->_userDefaultProfileSettings == Json::Value::null);
|
||||
VERIFY_IS_NOT_NULL(settings->_userDefaultProfileSettings);
|
||||
settings->LayerJson(settings->_userSettings);
|
||||
|
||||
VERIFY_ARE_EQUAL(guid1String, settings->_globals->UnparsedDefaultProfile());
|
||||
@@ -1573,9 +1575,9 @@ namespace SettingsModelLocalTests
|
||||
VERIFY_ARE_EQUAL(2u, settings->_profiles.Size());
|
||||
|
||||
settings->_ParseJsonString(settings0String, false);
|
||||
VERIFY_IS_TRUE(settings->_userDefaultProfileSettings == Json::Value::null);
|
||||
VERIFY_IS_NULL(settings->_userDefaultProfileSettings);
|
||||
settings->_ApplyDefaultsFromUserSettings();
|
||||
VERIFY_IS_FALSE(settings->_userDefaultProfileSettings == Json::Value::null);
|
||||
VERIFY_IS_NOT_NULL(settings->_userDefaultProfileSettings);
|
||||
|
||||
Log::Comment(NoThrowString().Format(
|
||||
L"Ensure that cmd and powershell don't get their GUIDs overwritten"));
|
||||
@@ -1692,10 +1694,6 @@ namespace SettingsModelLocalTests
|
||||
VERIFY_ARE_EQUAL(L"Terminal.App.UnitTest.1", settings->_profiles.GetAt(1).Source());
|
||||
VERIFY_ARE_EQUAL(L"Terminal.App.UnitTest.1", settings->_profiles.GetAt(2).Source());
|
||||
|
||||
VERIFY_IS_TRUE(settings->_profiles.GetAt(0).HasGuid());
|
||||
VERIFY_IS_TRUE(settings->_profiles.GetAt(1).HasGuid());
|
||||
VERIFY_IS_TRUE(settings->_profiles.GetAt(2).HasGuid());
|
||||
|
||||
VERIFY_ARE_EQUAL(guid1, settings->_profiles.GetAt(0).Guid());
|
||||
VERIFY_ARE_EQUAL(guid1, settings->_profiles.GetAt(1).Guid());
|
||||
VERIFY_ARE_EQUAL(guid2, settings->_profiles.GetAt(2).Guid());
|
||||
@@ -2460,4 +2458,68 @@ namespace SettingsModelLocalTests
|
||||
copyImpl->_globals->WordDelimiters(L"changed value");
|
||||
VERIFY_ARE_NOT_EQUAL(settings->_globals->WordDelimiters(), copyImpl->_globals->WordDelimiters());
|
||||
}
|
||||
|
||||
void DeserializationTests::TestCloneInheritanceTree()
|
||||
{
|
||||
const std::string settingsJson{ R"(
|
||||
{
|
||||
"defaultProfile": "{61c54bbd-1111-5271-96e7-009a87ff44bf}",
|
||||
"profiles":
|
||||
{
|
||||
"defaults": {
|
||||
"name": "PROFILE DEFAULTS",
|
||||
},
|
||||
"list": [
|
||||
{
|
||||
"guid": "{61c54bbd-1111-5271-96e7-009a87ff44bf}",
|
||||
"name": "CMD"
|
||||
},
|
||||
{
|
||||
"guid": "{61c54bbd-2222-5271-96e7-009a87ff44bf}",
|
||||
"name": "PowerShell"
|
||||
},
|
||||
{
|
||||
"guid": "{61c54bbd-3333-5271-96e7-009a87ff44bf}"
|
||||
}
|
||||
]
|
||||
}
|
||||
})" };
|
||||
|
||||
VerifyParseSucceeded(settingsJson);
|
||||
|
||||
auto settings{ winrt::make_self<implementation::CascadiaSettings>() };
|
||||
settings->_ParseJsonString(settingsJson, false);
|
||||
settings->LayerJson(settings->_userSettings);
|
||||
settings->_ValidateSettings();
|
||||
|
||||
DebugBreak();
|
||||
const auto copy{ settings->Copy() };
|
||||
const auto copyImpl{ winrt::get_self<implementation::CascadiaSettings>(copy) };
|
||||
|
||||
// test globals
|
||||
VERIFY_ARE_EQUAL(settings->_globals->DefaultProfile(), copyImpl->_globals->DefaultProfile());
|
||||
|
||||
// test profiles
|
||||
VERIFY_ARE_EQUAL(settings->_profiles.Size(), copyImpl->_profiles.Size());
|
||||
VERIFY_ARE_EQUAL(settings->_profiles.GetAt(0).Name(), copyImpl->_profiles.GetAt(0).Name());
|
||||
VERIFY_ARE_EQUAL(settings->_profiles.GetAt(1).Name(), copyImpl->_profiles.GetAt(1).Name());
|
||||
VERIFY_ARE_EQUAL(settings->_profiles.GetAt(2).Name(), copyImpl->_profiles.GetAt(2).Name());
|
||||
VERIFY_ARE_EQUAL(settings->_userDefaultProfileSettings->Name(), copyImpl->_userDefaultProfileSettings->Name());
|
||||
|
||||
// Modifying profile.defaults should...
|
||||
VERIFY_ARE_EQUAL(settings->_userDefaultProfileSettings->HasName(), copyImpl->_userDefaultProfileSettings->HasName());
|
||||
copyImpl->_userDefaultProfileSettings->Name(L"changed value");
|
||||
|
||||
// keep the same name for the first two profiles
|
||||
VERIFY_ARE_EQUAL(settings->_profiles.Size(), copyImpl->_profiles.Size());
|
||||
VERIFY_ARE_EQUAL(settings->_profiles.GetAt(0).Name(), copyImpl->_profiles.GetAt(0).Name());
|
||||
VERIFY_ARE_EQUAL(settings->_profiles.GetAt(1).Name(), copyImpl->_profiles.GetAt(1).Name());
|
||||
|
||||
// change the name for the one that inherited it from profile.defaults
|
||||
VERIFY_ARE_NOT_EQUAL(settings->_profiles.GetAt(2).Name(), copyImpl->_profiles.GetAt(2).Name());
|
||||
|
||||
// profile.defaults should be different between the two graphs
|
||||
VERIFY_ARE_NOT_EQUAL(settings->_userDefaultProfileSettings->HasName(), copyImpl->_userDefaultProfileSettings->HasName());
|
||||
VERIFY_ARE_NOT_EQUAL(settings->_userDefaultProfileSettings->Name(), copyImpl->_userDefaultProfileSettings->Name());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,39 +132,41 @@ namespace SettingsModelLocalTests
|
||||
|
||||
Log::Comment(NoThrowString().Format(
|
||||
L"Layering profile1 on top of profile0"));
|
||||
profile0->LayerJson(profile1Json);
|
||||
auto profile1{ profile0->CreateChild() };
|
||||
profile1->LayerJson(profile1Json);
|
||||
|
||||
VERIFY_IS_NOT_NULL(profile0->Foreground());
|
||||
VERIFY_ARE_EQUAL(til::color(2, 2, 2), til::color{ profile0->Foreground().Value() });
|
||||
VERIFY_IS_NOT_NULL(profile1->Foreground());
|
||||
VERIFY_ARE_EQUAL(til::color(2, 2, 2), til::color{ profile1->Foreground().Value() });
|
||||
|
||||
VERIFY_IS_NOT_NULL(profile0->Background());
|
||||
VERIFY_ARE_EQUAL(til::color(1, 1, 1), til::color{ profile0->Background().Value() });
|
||||
VERIFY_IS_NOT_NULL(profile1->Background());
|
||||
VERIFY_ARE_EQUAL(til::color(1, 1, 1), til::color{ profile1->Background().Value() });
|
||||
|
||||
VERIFY_IS_NOT_NULL(profile0->Background());
|
||||
VERIFY_ARE_EQUAL(til::color(1, 1, 1), til::color{ profile0->Background().Value() });
|
||||
VERIFY_IS_NOT_NULL(profile1->Background());
|
||||
VERIFY_ARE_EQUAL(til::color(1, 1, 1), til::color{ profile1->Background().Value() });
|
||||
|
||||
VERIFY_ARE_EQUAL(L"profile1", profile0->Name());
|
||||
VERIFY_ARE_EQUAL(L"profile1", profile1->Name());
|
||||
|
||||
VERIFY_IS_FALSE(profile0->StartingDirectory().empty());
|
||||
VERIFY_ARE_EQUAL(L"C:/", profile0->StartingDirectory());
|
||||
VERIFY_IS_FALSE(profile1->StartingDirectory().empty());
|
||||
VERIFY_ARE_EQUAL(L"C:/", profile1->StartingDirectory());
|
||||
|
||||
Log::Comment(NoThrowString().Format(
|
||||
L"Layering profile2 on top of (profile0+profile1)"));
|
||||
profile0->LayerJson(profile2Json);
|
||||
auto profile2{ profile1->CreateChild() };
|
||||
profile2->LayerJson(profile2Json);
|
||||
|
||||
VERIFY_IS_NOT_NULL(profile0->Foreground());
|
||||
VERIFY_ARE_EQUAL(til::color(3, 3, 3), til::color{ profile0->Foreground().Value() });
|
||||
VERIFY_IS_NOT_NULL(profile2->Foreground());
|
||||
VERIFY_ARE_EQUAL(til::color(3, 3, 3), til::color{ profile2->Foreground().Value() });
|
||||
|
||||
VERIFY_IS_NOT_NULL(profile0->Background());
|
||||
VERIFY_ARE_EQUAL(til::color(1, 1, 1), til::color{ profile0->Background().Value() });
|
||||
VERIFY_IS_NOT_NULL(profile2->Background());
|
||||
VERIFY_ARE_EQUAL(til::color(1, 1, 1), til::color{ profile2->Background().Value() });
|
||||
|
||||
VERIFY_IS_NOT_NULL(profile0->SelectionBackground());
|
||||
VERIFY_ARE_EQUAL(til::color(2, 2, 2), til::color{ profile0->SelectionBackground().Value() });
|
||||
VERIFY_IS_NOT_NULL(profile2->SelectionBackground());
|
||||
VERIFY_ARE_EQUAL(til::color(2, 2, 2), til::color{ profile2->SelectionBackground().Value() });
|
||||
|
||||
VERIFY_ARE_EQUAL(L"profile2", profile0->Name());
|
||||
VERIFY_ARE_EQUAL(L"profile2", profile2->Name());
|
||||
|
||||
VERIFY_IS_FALSE(profile0->StartingDirectory().empty());
|
||||
VERIFY_ARE_EQUAL(L"C:/", profile0->StartingDirectory());
|
||||
VERIFY_IS_FALSE(profile2->StartingDirectory().empty());
|
||||
VERIFY_ARE_EQUAL(L"C:/", profile2->StartingDirectory());
|
||||
}
|
||||
|
||||
void ProfileTests::LayerProfileIcon()
|
||||
|
||||
@@ -94,10 +94,7 @@ namespace winrt::TerminalApp::implementation
|
||||
|
||||
_Commandline = profile.Commandline();
|
||||
|
||||
if (!profile.StartingDirectory().empty())
|
||||
{
|
||||
_StartingDirectory = profile.EvaluatedStartingDirectory();
|
||||
}
|
||||
_StartingDirectory = profile.EvaluatedStartingDirectory();
|
||||
|
||||
// GH#2373: Use the tabTitle as the starting title if it exists, otherwise
|
||||
// use the profile name
|
||||
|
||||
@@ -244,7 +244,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
|
||||
{
|
||||
auto copy{ winrt::make_self<ActionAndArgs>() };
|
||||
copy->_Action = _Action;
|
||||
copy->_Args = _Args.Copy();
|
||||
copy->_Args = _Args ? _Args.Copy() : IActionArgs{ nullptr };
|
||||
return copy;
|
||||
}
|
||||
|
||||
|
||||
@@ -71,11 +71,6 @@ winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings CascadiaSettings::
|
||||
// dynamic profile generators added by default
|
||||
auto settings{ winrt::make_self<CascadiaSettings>() };
|
||||
settings->_globals = _globals->Copy();
|
||||
for (const auto profile : _profiles)
|
||||
{
|
||||
auto profImpl{ winrt::get_self<Profile>(profile) };
|
||||
settings->_profiles.Append(*profImpl->Copy());
|
||||
}
|
||||
for (auto warning : _warnings)
|
||||
{
|
||||
settings->_warnings.Append(warning);
|
||||
@@ -86,6 +81,26 @@ winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings CascadiaSettings::
|
||||
settings->_userSettings = _userSettings;
|
||||
settings->_defaultSettings = _defaultSettings;
|
||||
settings->_userDefaultProfileSettings = _userDefaultProfileSettings;
|
||||
|
||||
// Our profiles inheritance graph doesn't have a formal root.
|
||||
// However, if we create a dummy Profile, and set _profiles as the parent,
|
||||
// we now have a root. So we'll do just that, and
|
||||
auto dummyRootSource{ winrt::make_self<Profile>() };
|
||||
for (auto profile : _profiles)
|
||||
{
|
||||
winrt::com_ptr<Profile> profileImpl;
|
||||
profileImpl.copy_from(winrt::get_self<Profile>(profile));
|
||||
dummyRootSource->InsertParent(profileImpl);
|
||||
}
|
||||
auto dummyRootClone{ winrt::make_self<Profile>() };
|
||||
Profile::CloneInheritanceGraph(dummyRootSource, dummyRootClone);
|
||||
|
||||
auto cloneParents{ dummyRootClone->ExportParents() };
|
||||
for (auto profile : cloneParents)
|
||||
{
|
||||
settings->_profiles.Append(*profile);
|
||||
}
|
||||
|
||||
return *settings;
|
||||
}
|
||||
|
||||
|
||||
@@ -100,10 +100,11 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
|
||||
std::string _userSettingsString;
|
||||
Json::Value _userSettings;
|
||||
Json::Value _defaultSettings;
|
||||
Json::Value _userDefaultProfileSettings{ Json::Value::null };
|
||||
winrt::com_ptr<Profile> _userDefaultProfileSettings{ nullptr };
|
||||
|
||||
void _LayerOrCreateProfile(const Json::Value& profileJson);
|
||||
winrt::com_ptr<implementation::Profile> _FindMatchingProfile(const Json::Value& profileJson);
|
||||
std::optional<uint32_t> _FindMatchingProfileIndex(const Json::Value& profileJson);
|
||||
void _LayerOrCreateColorScheme(const Json::Value& schemeJson);
|
||||
winrt::com_ptr<implementation::ColorScheme> _FindMatchingColorScheme(const Json::Value& schemeJson);
|
||||
void _ParseJsonString(std::string_view fileData, const bool isDefaultSettings);
|
||||
|
||||
@@ -88,6 +88,16 @@ static void _CatchRethrowSerializationExceptionWithLocationInfo(std::string_view
|
||||
}
|
||||
}
|
||||
|
||||
static void _AddNodeAndParentLinks(std::set<winrt::Microsoft::Terminal::Settings::Model::implementation::Profile*>& s, std::wstringstream& wsGraph, winrt::Microsoft::Terminal::Settings::Model::implementation::Profile* p)
|
||||
{
|
||||
s.emplace(p);
|
||||
for (const auto& pParent : p->_parents)
|
||||
{
|
||||
wsGraph << fmt::format(L" n_{0} -> n_{1};\n", (void*)p, (void*)pParent.get());
|
||||
_AddNodeAndParentLinks(s, wsGraph, pParent.get());
|
||||
}
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Creates a CascadiaSettings from whatever's saved on disk, or instantiates
|
||||
// a new one with the default values. If we're running as a packaged app,
|
||||
@@ -242,6 +252,40 @@ winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings CascadiaSettings::
|
||||
}
|
||||
}
|
||||
|
||||
// CONVERT RESULTPTR INTO GRAPHVIZ
|
||||
std::wstringstream wsGraph;
|
||||
wsGraph << L"digraph inheritance {\n node [shape=record]; rankdir=LR;\n";
|
||||
std::set<implementation::Profile*> seenSet;
|
||||
for (const auto& p : resultPtr->_profiles)
|
||||
{
|
||||
auto raw{ winrt::get_self<implementation::Profile>(p) };
|
||||
wsGraph << fmt::format(LR"( n_{0} [color=blue];)"
|
||||
"\n",
|
||||
(void*)raw);
|
||||
_AddNodeAndParentLinks(seenSet, wsGraph, raw);
|
||||
}
|
||||
for (auto& p : seenSet)
|
||||
{
|
||||
if (p == resultPtr->_userDefaultProfileSettings.get())
|
||||
wsGraph << fmt::format(LR"( n_{0} [label="P.D."];)"
|
||||
"\n",
|
||||
(void*)p);
|
||||
else if (!p->Source().empty())
|
||||
wsGraph << fmt::format(LR"( n_{0} [label="{1}|{2}"];)"
|
||||
"\n",
|
||||
(void*)p,
|
||||
std::wstring_view{ p->Name() },
|
||||
std::wstring_view{ p->Source() });
|
||||
else
|
||||
wsGraph << fmt::format(LR"( n_{0} [label="{1}"];)"
|
||||
"\n",
|
||||
(void*)p,
|
||||
std::wstring_view{ p->Name() });
|
||||
}
|
||||
wsGraph << L"}\n";
|
||||
auto finalGraphString{ wsGraph.str() };
|
||||
OutputDebugStringW(finalGraphString.c_str());
|
||||
|
||||
return *resultPtr;
|
||||
}
|
||||
catch (const SettingsException& ex)
|
||||
@@ -511,7 +555,7 @@ bool CascadiaSettings::_AppendDynamicProfilesToUserSettings()
|
||||
|
||||
for (const auto& profile : _profiles)
|
||||
{
|
||||
if (!profile.HasGuid())
|
||||
if (profile.Guid() == winrt::guid{})
|
||||
{
|
||||
// If the profile doesn't have a guid, it's a name-only profile.
|
||||
// During validation, we'll generate a GUID for the profile, but
|
||||
@@ -590,6 +634,8 @@ winrt::com_ptr<CascadiaSettings> CascadiaSettings::FromJson(const Json::Value& j
|
||||
// <none>
|
||||
void CascadiaSettings::LayerJson(const Json::Value& json)
|
||||
{
|
||||
// add a new inheritance layer, and apply json values to child
|
||||
_globals = _globals->CreateChild();
|
||||
_globals->LayerJson(json);
|
||||
|
||||
if (auto schemes{ json[SchemesKey.data()] })
|
||||
@@ -627,10 +673,16 @@ void CascadiaSettings::LayerJson(const Json::Value& json)
|
||||
void CascadiaSettings::_LayerOrCreateProfile(const Json::Value& profileJson)
|
||||
{
|
||||
// Layer the json on top of an existing profile, if we have one:
|
||||
auto pProfile = _FindMatchingProfile(profileJson);
|
||||
if (pProfile)
|
||||
auto profileIndex{ _FindMatchingProfileIndex(profileJson) };
|
||||
if (profileIndex)
|
||||
{
|
||||
pProfile->LayerJson(profileJson);
|
||||
auto parentProj{ _profiles.GetAt(*profileIndex) };
|
||||
auto parent{ winrt::get_self<Profile>(parentProj) };
|
||||
|
||||
// We don't actually need to CreateChild() here.
|
||||
// When we loaded Profile.Defaults, we created an empty child already.
|
||||
// So this just populates the empty child
|
||||
parent->LayerJson(profileJson);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -639,13 +691,13 @@ void CascadiaSettings::_LayerOrCreateProfile(const Json::Value& profileJson)
|
||||
// `source`. Dynamic profiles _must_ be layered on an existing profile.
|
||||
if (!Profile::IsDynamicProfileObject(profileJson))
|
||||
{
|
||||
auto profile = winrt::make_self<Profile>();
|
||||
auto profile{ winrt::make_self<Profile>() };
|
||||
|
||||
// GH#2325: If we have a set of default profile settings, apply them here.
|
||||
// GH#2325: If we have a set of default profile settings, set that as my parent.
|
||||
// We _won't_ have these settings yet for defaults, dynamic profiles.
|
||||
if (_userDefaultProfileSettings)
|
||||
{
|
||||
profile->LayerJson(_userDefaultProfileSettings);
|
||||
profile->InsertParent(0, _userDefaultProfileSettings);
|
||||
}
|
||||
|
||||
profile->LayerJson(profileJson);
|
||||
@@ -667,17 +719,40 @@ void CascadiaSettings::_LayerOrCreateProfile(const Json::Value& profileJson)
|
||||
// profile exists.
|
||||
winrt::com_ptr<Profile> CascadiaSettings::_FindMatchingProfile(const Json::Value& profileJson)
|
||||
{
|
||||
for (auto profile : _profiles)
|
||||
auto index{ _FindMatchingProfileIndex(profileJson) };
|
||||
if (index)
|
||||
{
|
||||
auto profileImpl = winrt::get_self<Profile>(profile);
|
||||
if (profileImpl->ShouldBeLayered(profileJson))
|
||||
{
|
||||
return profileImpl->get_strong();
|
||||
}
|
||||
auto profile{ _profiles.GetAt(*index) };
|
||||
auto profileImpl{ winrt::get_self<Profile>(profile) };
|
||||
return profileImpl->get_strong();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Finds a profile from our list of profiles that matches the given json
|
||||
// object. Uses Profile::ShouldBeLayered to determine if the Json::Value is a
|
||||
// match or not. This method should be used to find a profile to layer the
|
||||
// given settings upon.
|
||||
// - Returns nullopt if no such match exists.
|
||||
// Arguments:
|
||||
// - json: an object which may be a partial serialization of a Profile object.
|
||||
// Return Value:
|
||||
// - The index for the matching Profile, iff it exists. Otherwise, nullopt.
|
||||
std::optional<uint32_t> CascadiaSettings::_FindMatchingProfileIndex(const Json::Value& profileJson)
|
||||
{
|
||||
for (uint32_t i = 0; i < _profiles.Size(); ++i)
|
||||
{
|
||||
const auto profile{ _profiles.GetAt(i) };
|
||||
const auto profileImpl = winrt::get_self<Profile>(profile);
|
||||
if (profileImpl->ShouldBeLayered(profileJson))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Finds the "default profile settings" if they exist in the users settings,
|
||||
// and applies them to the existing profiles. The "default profile settings"
|
||||
@@ -706,16 +781,26 @@ void CascadiaSettings::_ApplyDefaultsFromUserSettings()
|
||||
// from user settings file
|
||||
if (defaultSettings)
|
||||
{
|
||||
_userDefaultProfileSettings = defaultSettings;
|
||||
|
||||
// Remove the `guid` member from the default settings. That'll
|
||||
// hyper-explode, so just don't let them do that.
|
||||
_userDefaultProfileSettings.removeMember({ "guid" });
|
||||
defaultSettings.removeMember({ "guid" });
|
||||
|
||||
for (auto profile : _profiles)
|
||||
_userDefaultProfileSettings = winrt::make_self<Profile>();
|
||||
_userDefaultProfileSettings->LayerJson(defaultSettings);
|
||||
|
||||
const auto numOfProfiles{ _profiles.Size() };
|
||||
for (uint32_t profileIndex = 0; profileIndex < numOfProfiles; ++profileIndex)
|
||||
{
|
||||
auto profileImpl = winrt::get_self<Profile>(profile);
|
||||
profileImpl->LayerJson(_userDefaultProfileSettings);
|
||||
// create a child, so we inherit from the defaults.json layer
|
||||
auto parentProj{ _profiles.GetAt(profileIndex) };
|
||||
auto parentImpl{ winrt::get_self<Profile>(parentProj) };
|
||||
auto childImpl{ parentImpl->CreateChild() };
|
||||
|
||||
// Add profile.defaults as the _first_ parent to the child
|
||||
childImpl->InsertParent(0, _userDefaultProfileSettings);
|
||||
|
||||
// replace parent in _profiles with child
|
||||
_profiles.SetAt(profileIndex, *childImpl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ static constexpr bool debugFeaturesDefault{ false };
|
||||
GlobalAppSettings::GlobalAppSettings() :
|
||||
_keymap{ winrt::make_self<KeyMapping>() },
|
||||
_keybindingsWarnings{},
|
||||
_unparsedDefaultProfile{},
|
||||
_validDefaultProfile{ false },
|
||||
_defaultProfile{},
|
||||
_DebugFeaturesEnabled{ debugFeaturesDefault }
|
||||
{
|
||||
@@ -63,6 +63,34 @@ GlobalAppSettings::GlobalAppSettings() :
|
||||
_colorSchemes = winrt::single_threaded_map<winrt::hstring, Model::ColorScheme>();
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Copies any extraneous data from the parent before completing a CreateChild call
|
||||
// Arguments:
|
||||
// - <none>
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void GlobalAppSettings::_FinalizeInheritance()
|
||||
{
|
||||
// Globals only ever has 1 parent
|
||||
FAIL_FAST_IF(_parents.size() > 1);
|
||||
for (auto parent : _parents)
|
||||
{
|
||||
_keymap = parent->_keymap->Copy();
|
||||
std::copy(parent->_keybindingsWarnings.begin(), parent->_keybindingsWarnings.end(), std::back_inserter(_keybindingsWarnings));
|
||||
for (auto kv : parent->_colorSchemes)
|
||||
{
|
||||
const auto schemeImpl{ winrt::get_self<ColorScheme>(kv.Value()) };
|
||||
_colorSchemes.Insert(kv.Key(), *schemeImpl->Copy());
|
||||
}
|
||||
|
||||
for (auto kv : parent->_commands)
|
||||
{
|
||||
const auto commandImpl{ winrt::get_self<Command>(kv.Value()) };
|
||||
_commands.Insert(kv.Key(), *commandImpl->Copy());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
winrt::com_ptr<GlobalAppSettings> GlobalAppSettings::Copy() const
|
||||
{
|
||||
auto globals{ winrt::make_self<GlobalAppSettings>() };
|
||||
@@ -91,7 +119,8 @@ winrt::com_ptr<GlobalAppSettings> GlobalAppSettings::Copy() const
|
||||
globals->_UseTabSwitcher = _UseTabSwitcher;
|
||||
globals->_DisableAnimations = _DisableAnimations;
|
||||
|
||||
globals->_unparsedDefaultProfile = _unparsedDefaultProfile;
|
||||
globals->_UnparsedDefaultProfile = _UnparsedDefaultProfile;
|
||||
globals->_validDefaultProfile = _validDefaultProfile;
|
||||
globals->_defaultProfile = _defaultProfile;
|
||||
globals->_keymap = _keymap->Copy();
|
||||
std::copy(_keybindingsWarnings.begin(), _keybindingsWarnings.end(), std::back_inserter(globals->_keybindingsWarnings));
|
||||
@@ -107,6 +136,13 @@ winrt::com_ptr<GlobalAppSettings> GlobalAppSettings::Copy() const
|
||||
const auto commandImpl{ winrt::get_self<Command>(kv.Value()) };
|
||||
globals->_commands.Insert(kv.Key(), *commandImpl->Copy());
|
||||
}
|
||||
|
||||
// Globals only ever has 1 parent
|
||||
FAIL_FAST_IF(_parents.size() > 1);
|
||||
for (auto parent : _parents)
|
||||
{
|
||||
globals->InsertParent(parent->Copy());
|
||||
}
|
||||
return globals;
|
||||
}
|
||||
|
||||
@@ -115,24 +151,71 @@ winrt::Windows::Foundation::Collections::IMapView<winrt::hstring, winrt::Microso
|
||||
return _colorSchemes.GetView();
|
||||
}
|
||||
|
||||
#pragma region DefaultProfile
|
||||
void GlobalAppSettings::DefaultProfile(const winrt::guid& defaultProfile) noexcept
|
||||
{
|
||||
_unparsedDefaultProfile.clear();
|
||||
_validDefaultProfile = true;
|
||||
_defaultProfile = defaultProfile;
|
||||
}
|
||||
|
||||
winrt::guid GlobalAppSettings::DefaultProfile() const
|
||||
{
|
||||
// If we have an unresolved default profile, we should likely explode.
|
||||
THROW_HR_IF(E_INVALIDARG, !_unparsedDefaultProfile.empty());
|
||||
THROW_HR_IF(E_INVALIDARG, !_validDefaultProfile);
|
||||
return _defaultProfile;
|
||||
}
|
||||
|
||||
bool GlobalAppSettings::HasUnparsedDefaultProfile() const
|
||||
{
|
||||
return _UnparsedDefaultProfile.has_value();
|
||||
}
|
||||
|
||||
winrt::hstring GlobalAppSettings::UnparsedDefaultProfile() const
|
||||
{
|
||||
return _unparsedDefaultProfile;
|
||||
const auto val{ _getUnparsedDefaultProfileImpl() };
|
||||
return val ? *val : hstring{ L"" };
|
||||
}
|
||||
|
||||
void GlobalAppSettings::UnparsedDefaultProfile(const hstring& value)
|
||||
{
|
||||
if (_UnparsedDefaultProfile != value)
|
||||
{
|
||||
_UnparsedDefaultProfile = value;
|
||||
_validDefaultProfile = false;
|
||||
}
|
||||
}
|
||||
|
||||
void GlobalAppSettings::ClearUnparsedDefaultProfile()
|
||||
{
|
||||
if (HasUnparsedDefaultProfile())
|
||||
{
|
||||
_UnparsedDefaultProfile = std::nullopt;
|
||||
}
|
||||
}
|
||||
|
||||
std::optional<winrt::hstring> GlobalAppSettings::_getUnparsedDefaultProfileImpl() const
|
||||
{
|
||||
/*return user set value*/
|
||||
if (_UnparsedDefaultProfile)
|
||||
{
|
||||
return _UnparsedDefaultProfile;
|
||||
}
|
||||
|
||||
/*user set value was not set*/
|
||||
/*iterate through parents to find a value*/
|
||||
for (auto parent : _parents)
|
||||
{
|
||||
if (auto val{ parent->_getUnparsedDefaultProfileImpl() })
|
||||
{
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
||||
/*no value was found*/
|
||||
return std::nullopt;
|
||||
}
|
||||
#pragma endregion
|
||||
|
||||
winrt::Microsoft::Terminal::Settings::Model::KeyMapping GlobalAppSettings::KeyMap() const noexcept
|
||||
{
|
||||
return *_keymap;
|
||||
@@ -153,7 +236,10 @@ winrt::com_ptr<GlobalAppSettings> GlobalAppSettings::FromJson(const Json::Value&
|
||||
|
||||
void GlobalAppSettings::LayerJson(const Json::Value& json)
|
||||
{
|
||||
JsonUtils::GetValueForKey(json, DefaultProfileKey, _unparsedDefaultProfile);
|
||||
// _validDefaultProfile keeps track of whether we've verified that DefaultProfile points to something
|
||||
// CascadiaSettings::_ResolveDefaultProfile performs a validation and updates DefaultProfile() with the
|
||||
// resolved value, then making it valid.
|
||||
_validDefaultProfile = !JsonUtils::GetValueForKey(json, DefaultProfileKey, _UnparsedDefaultProfile);
|
||||
|
||||
JsonUtils::GetValueForKey(json, AlwaysShowTabsKey, _AlwaysShowTabs);
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ Copyright (c) Microsoft Corporation
|
||||
Licensed under the MIT license.
|
||||
|
||||
Module Name:
|
||||
- CascadiaSettings.hpp
|
||||
- GlobalAppSettings.h
|
||||
|
||||
Abstract:
|
||||
- This class encapsulates all of the settings that are global to the app, and
|
||||
@@ -16,6 +16,7 @@ Author(s):
|
||||
#pragma once
|
||||
|
||||
#include "GlobalAppSettings.g.h"
|
||||
#include "IInheritable.h"
|
||||
|
||||
#include "KeyMapping.h"
|
||||
#include "Command.h"
|
||||
@@ -30,10 +31,11 @@ namespace SettingsModelLocalTests
|
||||
|
||||
namespace winrt::Microsoft::Terminal::Settings::Model::implementation
|
||||
{
|
||||
struct GlobalAppSettings : GlobalAppSettingsT<GlobalAppSettings>
|
||||
struct GlobalAppSettings : GlobalAppSettingsT<GlobalAppSettings>, IInheritable<GlobalAppSettings>
|
||||
{
|
||||
public:
|
||||
GlobalAppSettings();
|
||||
void _FinalizeInheritance() override;
|
||||
com_ptr<GlobalAppSettings> Copy() const;
|
||||
|
||||
Windows::Foundation::Collections::IMapView<hstring, Model::ColorScheme> ColorSchemes() noexcept;
|
||||
@@ -52,36 +54,40 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
|
||||
// by higher layers in the app.
|
||||
void DefaultProfile(const guid& defaultProfile) noexcept;
|
||||
guid DefaultProfile() const;
|
||||
hstring UnparsedDefaultProfile() const;
|
||||
bool HasUnparsedDefaultProfile() const;
|
||||
winrt::hstring UnparsedDefaultProfile() const;
|
||||
void UnparsedDefaultProfile(const hstring& value);
|
||||
void ClearUnparsedDefaultProfile();
|
||||
|
||||
GETSET_PROPERTY(int32_t, InitialRows, DEFAULT_ROWS);
|
||||
GETSET_PROPERTY(int32_t, InitialCols, DEFAULT_COLS);
|
||||
GETSET_PROPERTY(bool, AlwaysShowTabs, true);
|
||||
GETSET_PROPERTY(bool, ShowTitleInTitlebar, true);
|
||||
GETSET_PROPERTY(bool, ConfirmCloseAllTabs, true);
|
||||
GETSET_PROPERTY(winrt::Windows::UI::Xaml::ElementTheme, Theme, winrt::Windows::UI::Xaml::ElementTheme::Default);
|
||||
GETSET_PROPERTY(winrt::Microsoft::UI::Xaml::Controls::TabViewWidthMode, TabWidthMode, winrt::Microsoft::UI::Xaml::Controls::TabViewWidthMode::Equal);
|
||||
GETSET_PROPERTY(bool, ShowTabsInTitlebar, true);
|
||||
GETSET_PROPERTY(hstring, WordDelimiters, DEFAULT_WORD_DELIMITERS);
|
||||
GETSET_PROPERTY(bool, CopyOnSelect, false);
|
||||
GETSET_PROPERTY(winrt::Microsoft::Terminal::TerminalControl::CopyFormat, CopyFormatting, 0);
|
||||
GETSET_PROPERTY(bool, WarnAboutLargePaste, true);
|
||||
GETSET_PROPERTY(bool, WarnAboutMultiLinePaste, true);
|
||||
GETSET_PROPERTY(Model::LaunchPosition, InitialPosition, nullptr, nullptr);
|
||||
GETSET_PROPERTY(Model::LaunchMode, LaunchMode, LaunchMode::DefaultMode);
|
||||
GETSET_PROPERTY(bool, SnapToGridOnResize, true);
|
||||
GETSET_PROPERTY(bool, ForceFullRepaintRendering, false);
|
||||
GETSET_PROPERTY(bool, SoftwareRendering, false);
|
||||
GETSET_PROPERTY(bool, ForceVTInput, false);
|
||||
GETSET_PROPERTY(bool, DebugFeaturesEnabled); // default value set in constructor
|
||||
GETSET_PROPERTY(bool, StartOnUserLogin, false);
|
||||
GETSET_PROPERTY(bool, AlwaysOnTop, false);
|
||||
GETSET_PROPERTY(bool, UseTabSwitcher, true);
|
||||
GETSET_PROPERTY(bool, DisableAnimations, false);
|
||||
GETSET_SETTING(int32_t, InitialRows, DEFAULT_ROWS);
|
||||
GETSET_SETTING(int32_t, InitialCols, DEFAULT_COLS);
|
||||
GETSET_SETTING(bool, AlwaysShowTabs, true);
|
||||
GETSET_SETTING(bool, ShowTitleInTitlebar, true);
|
||||
GETSET_SETTING(bool, ConfirmCloseAllTabs, true);
|
||||
GETSET_SETTING(winrt::Windows::UI::Xaml::ElementTheme, Theme, winrt::Windows::UI::Xaml::ElementTheme::Default);
|
||||
GETSET_SETTING(winrt::Microsoft::UI::Xaml::Controls::TabViewWidthMode, TabWidthMode, winrt::Microsoft::UI::Xaml::Controls::TabViewWidthMode::Equal);
|
||||
GETSET_SETTING(bool, ShowTabsInTitlebar, true);
|
||||
GETSET_SETTING(hstring, WordDelimiters, DEFAULT_WORD_DELIMITERS);
|
||||
GETSET_SETTING(bool, CopyOnSelect, false);
|
||||
GETSET_SETTING(winrt::Microsoft::Terminal::TerminalControl::CopyFormat, CopyFormatting, 0);
|
||||
GETSET_SETTING(bool, WarnAboutLargePaste, true);
|
||||
GETSET_SETTING(bool, WarnAboutMultiLinePaste, true);
|
||||
GETSET_SETTING(Model::LaunchPosition, InitialPosition, nullptr, nullptr);
|
||||
GETSET_SETTING(Model::LaunchMode, LaunchMode, LaunchMode::DefaultMode);
|
||||
GETSET_SETTING(bool, SnapToGridOnResize, true);
|
||||
GETSET_SETTING(bool, ForceFullRepaintRendering, false);
|
||||
GETSET_SETTING(bool, SoftwareRendering, false);
|
||||
GETSET_SETTING(bool, ForceVTInput, false);
|
||||
GETSET_SETTING(bool, DebugFeaturesEnabled); // default value set in constructor
|
||||
GETSET_SETTING(bool, StartOnUserLogin, false);
|
||||
GETSET_SETTING(bool, AlwaysOnTop, false);
|
||||
GETSET_SETTING(bool, UseTabSwitcher, true);
|
||||
GETSET_SETTING(bool, DisableAnimations, false);
|
||||
|
||||
private:
|
||||
hstring _unparsedDefaultProfile;
|
||||
guid _defaultProfile;
|
||||
std::optional<hstring> _UnparsedDefaultProfile{ std::nullopt };
|
||||
bool _validDefaultProfile;
|
||||
|
||||
com_ptr<KeyMapping> _keymap;
|
||||
std::vector<SettingsLoadWarnings> _keybindingsWarnings;
|
||||
@@ -89,6 +95,8 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
|
||||
Windows::Foundation::Collections::IMap<hstring, Model::ColorScheme> _colorSchemes;
|
||||
Windows::Foundation::Collections::IMap<hstring, Model::Command> _commands;
|
||||
|
||||
std::optional<hstring> _getUnparsedDefaultProfileImpl() const;
|
||||
|
||||
friend class SettingsModelLocalTests::DeserializationTests;
|
||||
friend class SettingsModelLocalTests::ColorSchemeTests;
|
||||
};
|
||||
|
||||
@@ -28,31 +28,104 @@ namespace Microsoft.Terminal.Settings.Model
|
||||
|
||||
[default_interface] runtimeclass GlobalAppSettings {
|
||||
Guid DefaultProfile;
|
||||
String UnparsedDefaultProfile();
|
||||
Boolean HasUnparsedDefaultProfile();
|
||||
void ClearUnparsedDefaultProfile();
|
||||
String UnparsedDefaultProfile;
|
||||
|
||||
Boolean HasInitialRows();
|
||||
void ClearInitialRows();
|
||||
Int32 InitialRows;
|
||||
|
||||
Boolean HasInitialCols();
|
||||
void ClearInitialCols();
|
||||
Int32 InitialCols;
|
||||
|
||||
Boolean HasAlwaysShowTabs();
|
||||
void ClearAlwaysShowTabs();
|
||||
Boolean AlwaysShowTabs;
|
||||
|
||||
Boolean HasShowTitleInTitlebar();
|
||||
void ClearShowTitleInTitlebar();
|
||||
Boolean ShowTitleInTitlebar;
|
||||
|
||||
Boolean HasConfirmCloseAllTabs();
|
||||
void ClearConfirmCloseAllTabs();
|
||||
Boolean ConfirmCloseAllTabs;
|
||||
|
||||
Boolean HasTheme();
|
||||
void ClearTheme();
|
||||
Windows.UI.Xaml.ElementTheme Theme;
|
||||
|
||||
Boolean HasTabWidthMode();
|
||||
void ClearTabWidthMode();
|
||||
Microsoft.UI.Xaml.Controls.TabViewWidthMode TabWidthMode;
|
||||
|
||||
Boolean HasShowTabsInTitlebar();
|
||||
void ClearShowTabsInTitlebar();
|
||||
Boolean ShowTabsInTitlebar;
|
||||
|
||||
Boolean HasWordDelimiters();
|
||||
void ClearWordDelimiters();
|
||||
String WordDelimiters;
|
||||
|
||||
Boolean HasCopyOnSelect();
|
||||
void ClearCopyOnSelect();
|
||||
Boolean CopyOnSelect;
|
||||
|
||||
Boolean HasCopyFormatting();
|
||||
void ClearCopyFormatting();
|
||||
Microsoft.Terminal.TerminalControl.CopyFormat CopyFormatting;
|
||||
|
||||
Boolean HasWarnAboutLargePaste();
|
||||
void ClearWarnAboutLargePaste();
|
||||
Boolean WarnAboutLargePaste;
|
||||
|
||||
Boolean HasWarnAboutMultiLinePaste();
|
||||
void ClearWarnAboutMultiLinePaste();
|
||||
Boolean WarnAboutMultiLinePaste;
|
||||
|
||||
Boolean HasInitialPosition();
|
||||
void ClearInitialPosition();
|
||||
LaunchPosition InitialPosition;
|
||||
|
||||
Boolean HasLaunchMode();
|
||||
void ClearLaunchMode();
|
||||
LaunchMode LaunchMode;
|
||||
|
||||
Boolean HasSnapToGridOnResize();
|
||||
void ClearSnapToGridOnResize();
|
||||
Boolean SnapToGridOnResize;
|
||||
|
||||
Boolean HasForceFullRepaintRendering();
|
||||
void ClearForceFullRepaintRendering();
|
||||
Boolean ForceFullRepaintRendering;
|
||||
|
||||
Boolean HasSoftwareRendering();
|
||||
void ClearSoftwareRendering();
|
||||
Boolean SoftwareRendering;
|
||||
|
||||
Boolean HasForceVTInput();
|
||||
void ClearForceVTInput();
|
||||
Boolean ForceVTInput;
|
||||
|
||||
Boolean HasDebugFeaturesEnabled();
|
||||
void ClearDebugFeaturesEnabled();
|
||||
Boolean DebugFeaturesEnabled;
|
||||
|
||||
Boolean HasStartOnUserLogin();
|
||||
void ClearStartOnUserLogin();
|
||||
Boolean StartOnUserLogin;
|
||||
|
||||
Boolean HasAlwaysOnTop();
|
||||
void ClearAlwaysOnTop();
|
||||
Boolean AlwaysOnTop;
|
||||
|
||||
Boolean HasUseTabSwitcher();
|
||||
void ClearUseTabSwitcher();
|
||||
Boolean UseTabSwitcher;
|
||||
|
||||
Boolean HasDisableAnimations();
|
||||
void ClearDisableAnimations();
|
||||
Boolean DisableAnimations;
|
||||
|
||||
Windows.Foundation.Collections.IMapView<String, ColorScheme> ColorSchemes();
|
||||
|
||||
200
src/cascadia/TerminalSettingsModel/IInheritable.h
Normal file
200
src/cascadia/TerminalSettingsModel/IInheritable.h
Normal file
@@ -0,0 +1,200 @@
|
||||
/*++
|
||||
Copyright (c) Microsoft Corporation
|
||||
Licensed under the MIT license.
|
||||
|
||||
Module Name:
|
||||
- IInheritable.h
|
||||
|
||||
Abstract:
|
||||
- An interface allowing settings objects to inherit settings from a parent
|
||||
|
||||
Author(s):
|
||||
- Carlos Zamora - October 2020
|
||||
|
||||
--*/
|
||||
#pragma once
|
||||
|
||||
namespace winrt::Microsoft::Terminal::Settings::Model::implementation
|
||||
{
|
||||
template<typename T>
|
||||
struct IInheritable
|
||||
{
|
||||
public:
|
||||
// Method Description:
|
||||
// - Create a new instance of T, but set its parent to this instance
|
||||
// Arguments:
|
||||
// - <none>
|
||||
// Return Value:
|
||||
// - a new instance of T with this instance set as its parent
|
||||
com_ptr<T> CreateChild() const
|
||||
{
|
||||
auto child{ winrt::make_self<T>() };
|
||||
|
||||
com_ptr<T> parent;
|
||||
winrt::copy_from_abi(parent, const_cast<T*>(static_cast<const T*>(this)));
|
||||
child->InsertParent(parent);
|
||||
|
||||
child->_FinalizeInheritance();
|
||||
return child;
|
||||
}
|
||||
|
||||
void InsertParent(com_ptr<T> parent)
|
||||
{
|
||||
_parents.push_back(parent);
|
||||
}
|
||||
|
||||
void InsertParent(size_t index, com_ptr<T> parent)
|
||||
{
|
||||
auto pos{ _parents.begin() + index };
|
||||
_parents.insert(pos, parent);
|
||||
}
|
||||
|
||||
std::vector<com_ptr<T>> ExportParents()
|
||||
{
|
||||
return _parents;
|
||||
}
|
||||
|
||||
std::vector<com_ptr<T>> _parents{};
|
||||
|
||||
protected:
|
||||
// Method Description:
|
||||
// - Actions to be performed after a child was created. Generally used to set
|
||||
// any extraneous data from the parent into the child.
|
||||
// Arguments:
|
||||
// - <none>
|
||||
// Return Value:
|
||||
// - <none>
|
||||
virtual void _FinalizeInheritance() {}
|
||||
};
|
||||
|
||||
// This is like std::optional, but we can use it in inheritance to determine whether the user explicitly cleared it
|
||||
template<typename T>
|
||||
struct NullableSetting
|
||||
{
|
||||
winrt::Windows::Foundation::IReference<T> setting{ nullptr };
|
||||
bool set{ false };
|
||||
};
|
||||
}
|
||||
|
||||
// Use this macro to quickly implement both getters and the setter for an
|
||||
// inheritable and observable setting property. This is similar to the GETSET_PROPERTY macro, except...
|
||||
// - Has(): checks if the user explicitly set a value for this setting
|
||||
// - Getter(): return the resolved value
|
||||
// - Setter(): set the value directly
|
||||
// - Clear(): clear the user set value
|
||||
// - the setting is saved as an optional, where nullopt means
|
||||
// that we must inherit the value from our parent
|
||||
#define GETSET_SETTING(type, name, ...) \
|
||||
public: \
|
||||
/* Returns true if the user explicitly set the value, false otherwise*/ \
|
||||
bool Has##name() const \
|
||||
{ \
|
||||
return _##name.has_value(); \
|
||||
}; \
|
||||
\
|
||||
/* Returns the resolved value for this setting */ \
|
||||
/* fallback: user set value --> inherited value --> system set value */ \
|
||||
type name() const \
|
||||
{ \
|
||||
const auto val{ _get##name##Impl() }; \
|
||||
return val ? *val : type{ __VA_ARGS__ }; \
|
||||
}; \
|
||||
\
|
||||
/* Overwrite the user set value */ \
|
||||
void name(const type& value) \
|
||||
{ \
|
||||
_##name = value; \
|
||||
}; \
|
||||
\
|
||||
/* Clear the user set value */ \
|
||||
void Clear##name() \
|
||||
{ \
|
||||
_##name = std::nullopt; \
|
||||
}; \
|
||||
\
|
||||
private: \
|
||||
std::optional<type> _##name{ std::nullopt }; \
|
||||
std::optional<type> _get##name##Impl() const \
|
||||
{ \
|
||||
/*return user set value*/ \
|
||||
if (_##name) \
|
||||
{ \
|
||||
return _##name; \
|
||||
} \
|
||||
\
|
||||
/*user set value was not set*/ \
|
||||
/*iterate through parents to find a value*/ \
|
||||
for (auto parent : _parents) \
|
||||
{ \
|
||||
if (auto val{ parent->_get##name##Impl() }) \
|
||||
{ \
|
||||
return val; \
|
||||
} \
|
||||
} \
|
||||
\
|
||||
/*no value was found*/ \
|
||||
return std::nullopt; \
|
||||
};
|
||||
|
||||
// This macro is similar to the one above, but is reserved for optional settings
|
||||
// like Profile.StartingDirectory and Profile.Foreground (where null is interpreted
|
||||
// as an acceptable value, rather than "inherit")
|
||||
// "type" is exposed as an IReference
|
||||
#define GETSET_NULLABLE_SETTING(type, name, ...) \
|
||||
public: \
|
||||
/* Returns true if the user explicitly set the value, false otherwise*/ \
|
||||
bool Has##name() const \
|
||||
{ \
|
||||
return _##name.set; \
|
||||
}; \
|
||||
\
|
||||
/* Returns the resolved value for this setting */ \
|
||||
/* fallback: user set value --> inherited value --> system set value */ \
|
||||
winrt::Windows::Foundation::IReference<type> name() const \
|
||||
{ \
|
||||
const auto val{ _get##name##Impl() }; \
|
||||
return val.set ? val.setting : winrt::Windows::Foundation::IReference<type>{ __VA_ARGS__ }; \
|
||||
}; \
|
||||
\
|
||||
/* Overwrite the user set value */ \
|
||||
/* Dispatch event if value changed */ \
|
||||
void name(const winrt::Windows::Foundation::IReference<type>& value) \
|
||||
{ \
|
||||
if (!Has##name() /*value was not set*/ \
|
||||
|| _##name.setting != value) /*set value is different*/ \
|
||||
{ \
|
||||
_##name.setting = value; \
|
||||
_##name.set = true; \
|
||||
} \
|
||||
}; \
|
||||
\
|
||||
/* Clear the user set value */ \
|
||||
/* Dispatch event if value changed */ \
|
||||
void Clear##name() \
|
||||
{ \
|
||||
_##name.set = false; \
|
||||
}; \
|
||||
\
|
||||
private: \
|
||||
NullableSetting<type> _##name{}; \
|
||||
NullableSetting<type> _get##name##Impl() const \
|
||||
{ \
|
||||
/*return user set value*/ \
|
||||
if (Has##name()) \
|
||||
{ \
|
||||
return _##name; \
|
||||
} \
|
||||
\
|
||||
/*user set value was not set*/ \
|
||||
/*iterate through parents to find a value*/ \
|
||||
for (auto parent : _parents) \
|
||||
{ \
|
||||
auto val{ parent->_get##name##Impl() }; \
|
||||
if (val.set) \
|
||||
{ \
|
||||
return val; \
|
||||
} \
|
||||
} \
|
||||
/*no value was found*/ \
|
||||
return { nullptr, false }; \
|
||||
};
|
||||
@@ -43,6 +43,7 @@
|
||||
<ClInclude Include="GlobalAppSettings.h">
|
||||
<DependentUpon>GlobalAppSettings.idl</DependentUpon>
|
||||
</ClInclude>
|
||||
<ClInclude Include="IInheritable.h" />
|
||||
<ClInclude Include="IDynamicProfileGenerator.h" />
|
||||
<ClInclude Include="JsonUtils.h" />
|
||||
<ClInclude Include="KeyChordSerialization.h">
|
||||
|
||||
@@ -70,49 +70,106 @@ Profile::Profile(guid guid) :
|
||||
{
|
||||
}
|
||||
|
||||
winrt::com_ptr<Profile> Profile::Copy() const
|
||||
winrt::com_ptr<Profile> Profile::_CopyMembers(winrt::com_ptr<Profile> source)
|
||||
{
|
||||
// copy the private members
|
||||
auto profile{ winrt::make_self<Profile>() };
|
||||
profile->_Name = _Name;
|
||||
profile->_Source = _Source;
|
||||
profile->_Hidden = _Hidden;
|
||||
profile->_Icon = _Icon;
|
||||
profile->_CloseOnExit = _CloseOnExit;
|
||||
profile->_TabTitle = _TabTitle;
|
||||
profile->_TabColor = _TabColor;
|
||||
profile->_SuppressApplicationTitle = _SuppressApplicationTitle;
|
||||
profile->_UseAcrylic = _UseAcrylic;
|
||||
profile->_AcrylicOpacity = _AcrylicOpacity;
|
||||
profile->_ScrollState = _ScrollState;
|
||||
profile->_FontFace = _FontFace;
|
||||
profile->_FontSize = _FontSize;
|
||||
profile->_FontWeight = _FontWeight;
|
||||
profile->_Padding = _Padding;
|
||||
profile->_Commandline = _Commandline;
|
||||
profile->_StartingDirectory = _StartingDirectory;
|
||||
profile->_BackgroundImagePath = _BackgroundImagePath;
|
||||
profile->_BackgroundImageOpacity = _BackgroundImageOpacity;
|
||||
profile->_BackgroundImageStretchMode = _BackgroundImageStretchMode;
|
||||
profile->_AntialiasingMode = _AntialiasingMode;
|
||||
profile->_RetroTerminalEffect = _RetroTerminalEffect;
|
||||
profile->_ForceFullRepaintRendering = _ForceFullRepaintRendering;
|
||||
profile->_SoftwareRendering = _SoftwareRendering;
|
||||
profile->_ColorSchemeName = _ColorSchemeName;
|
||||
profile->_Foreground = _Foreground;
|
||||
profile->_Background = _Background;
|
||||
profile->_SelectionBackground = _SelectionBackground;
|
||||
profile->_CursorColor = _CursorColor;
|
||||
profile->_HistorySize = _HistorySize;
|
||||
profile->_SnapOnInput = _SnapOnInput;
|
||||
profile->_AltGrAliasing = _AltGrAliasing;
|
||||
profile->_CursorShape = _CursorShape;
|
||||
profile->_CursorHeight = _CursorHeight;
|
||||
profile->_Guid = _Guid;
|
||||
profile->_ConnectionType = _ConnectionType;
|
||||
profile->_BackgroundImageAlignment = _BackgroundImageAlignment;
|
||||
profile->_Guid = source->_Guid;
|
||||
profile->_Name = source->_Name;
|
||||
profile->_Source = source->_Source;
|
||||
profile->_Hidden = source->_Hidden;
|
||||
profile->_Icon = source->_Icon;
|
||||
profile->_CloseOnExit = source->_CloseOnExit;
|
||||
profile->_TabTitle = source->_TabTitle;
|
||||
profile->_TabColor = source->_TabColor;
|
||||
profile->_SuppressApplicationTitle = source->_SuppressApplicationTitle;
|
||||
profile->_UseAcrylic = source->_UseAcrylic;
|
||||
profile->_AcrylicOpacity = source->_AcrylicOpacity;
|
||||
profile->_ScrollState = source->_ScrollState;
|
||||
profile->_FontFace = source->_FontFace;
|
||||
profile->_FontSize = source->_FontSize;
|
||||
profile->_FontWeight = source->_FontWeight;
|
||||
profile->_Padding = source->_Padding;
|
||||
profile->_Commandline = source->_Commandline;
|
||||
profile->_StartingDirectory = source->_StartingDirectory;
|
||||
profile->_BackgroundImagePath = source->_BackgroundImagePath;
|
||||
profile->_BackgroundImageOpacity = source->_BackgroundImageOpacity;
|
||||
profile->_BackgroundImageStretchMode = source->_BackgroundImageStretchMode;
|
||||
profile->_AntialiasingMode = source->_AntialiasingMode;
|
||||
profile->_RetroTerminalEffect = source->_RetroTerminalEffect;
|
||||
profile->_ForceFullRepaintRendering = source->_ForceFullRepaintRendering;
|
||||
profile->_SoftwareRendering = source->_SoftwareRendering;
|
||||
profile->_ColorSchemeName = source->_ColorSchemeName;
|
||||
profile->_Foreground = source->_Foreground;
|
||||
profile->_Background = source->_Background;
|
||||
profile->_SelectionBackground = source->_SelectionBackground;
|
||||
profile->_CursorColor = source->_CursorColor;
|
||||
profile->_HistorySize = source->_HistorySize;
|
||||
profile->_SnapOnInput = source->_SnapOnInput;
|
||||
profile->_AltGrAliasing = source->_AltGrAliasing;
|
||||
profile->_CursorShape = source->_CursorShape;
|
||||
profile->_CursorHeight = source->_CursorHeight;
|
||||
profile->_BellStyle = source->_BellStyle;
|
||||
|
||||
// copy settings that did not use the GETSET macro
|
||||
profile->_BackgroundImageAlignment = source->_BackgroundImageAlignment;
|
||||
profile->_ConnectionType = source->_ConnectionType;
|
||||
|
||||
return profile;
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Creates a copy of the inheritance graph by performing a depth-first traversal recursively.
|
||||
// Profiles are recorded as visited via the "visited" parameter.
|
||||
// Unvisited Profiles are copied into the "cloneGraph" parameter, then marked as visited.
|
||||
// Arguments:
|
||||
// - sourceGraph - the graph of Profile's we're cloning
|
||||
// - cloneGraph - the clone of sourceGraph that is being constructed
|
||||
// - visited - a map of which Profiles have been visited, and, if so, a reference to the Profile's clone
|
||||
// Return Value:
|
||||
// - a clone in both inheritance structure and Profile values of sourceGraph
|
||||
winrt::com_ptr<Profile> Profile::CloneInheritanceGraph(winrt::com_ptr<Profile> sourceGraph, winrt::com_ptr<Profile> cloneGraph, std::unordered_map<void*, winrt::com_ptr<Profile>> visited)
|
||||
{
|
||||
// If this is an unexplored Profile
|
||||
// and we have parents...
|
||||
if (visited.find(sourceGraph.get()) == visited.end() && !sourceGraph->_parents.empty())
|
||||
{
|
||||
// iterate through all of our parents to copy them
|
||||
for (auto sourceParent : sourceGraph->_parents)
|
||||
{
|
||||
// If we visited this Profile already...
|
||||
auto kv{ visited.find(sourceParent.get()) };
|
||||
if (visited.find(sourceParent.get()) != visited.end())
|
||||
{
|
||||
// add this Profile's clone as a parent
|
||||
cloneGraph->InsertParent(kv->second);
|
||||
}
|
||||
else
|
||||
{
|
||||
// We have not visited this Profile yet,
|
||||
// copy contents of sourceParent to clone
|
||||
winrt::com_ptr<Profile> clone{ _CopyMembers(sourceParent) };
|
||||
|
||||
// add the new copy to the cloneGraph
|
||||
cloneGraph->InsertParent(clone);
|
||||
|
||||
// copy the sub-graph at "clone"
|
||||
CloneInheritanceGraph(sourceParent, clone, visited);
|
||||
|
||||
// mark clone as "visited"
|
||||
// save it to the map in case somebody else references it
|
||||
visited[sourceParent.get()] = clone;
|
||||
}
|
||||
|
||||
// if clone is empty, this is the end of the inheritance line
|
||||
// otherwise, it is populated with the contents of its parent
|
||||
}
|
||||
}
|
||||
|
||||
// we have no more to explore down this path.
|
||||
return cloneGraph;
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Generates a Json::Value which is a "stub" of this profile. This stub will
|
||||
// have enough information that it could be layered with this profile.
|
||||
@@ -134,14 +191,15 @@ Json::Value Profile::GenerateStub() const
|
||||
stub[JsonKey(GuidKey)] = winrt::to_string(Utils::GuidToString(*_Guid));
|
||||
}
|
||||
|
||||
stub[JsonKey(NameKey)] = winrt::to_string(_Name);
|
||||
stub[JsonKey(NameKey)] = winrt::to_string(Name());
|
||||
|
||||
if (!_Source.empty())
|
||||
const auto source{ Source() };
|
||||
if (!source.empty())
|
||||
{
|
||||
stub[JsonKey(SourceKey)] = winrt::to_string(_Source);
|
||||
stub[JsonKey(SourceKey)] = winrt::to_string(source);
|
||||
}
|
||||
|
||||
stub[JsonKey(HiddenKey)] = _Hidden;
|
||||
stub[JsonKey(HiddenKey)] = Hidden();
|
||||
|
||||
return stub;
|
||||
}
|
||||
@@ -169,7 +227,9 @@ winrt::com_ptr<winrt::Microsoft::Terminal::Settings::Model::implementation::Prof
|
||||
// - true iff the json object has the same `GUID` as we do.
|
||||
bool Profile::ShouldBeLayered(const Json::Value& json) const
|
||||
{
|
||||
if (!_Guid.has_value())
|
||||
// guid was not set
|
||||
const auto myGuid{ Guid() };
|
||||
if (myGuid == winrt::guid{})
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -178,7 +238,7 @@ bool Profile::ShouldBeLayered(const Json::Value& json) const
|
||||
// should _definitely_ not layer.
|
||||
if (const auto otherGuid{ JsonUtils::GetValueForKey<std::optional<winrt::guid>>(json, GuidKey) })
|
||||
{
|
||||
if (otherGuid.value() != *_Guid)
|
||||
if (otherGuid.value() != myGuid)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -197,12 +257,13 @@ bool Profile::ShouldBeLayered(const Json::Value& json) const
|
||||
|
||||
// For profiles with a `source`, also check the `source` property.
|
||||
bool sourceMatches = false;
|
||||
if (!_Source.empty())
|
||||
const auto mySource{ Source() };
|
||||
if (!mySource.empty())
|
||||
{
|
||||
if (otherHadSource)
|
||||
{
|
||||
// If we have a source and the other has a source, compare them!
|
||||
sourceMatches = *otherSource == _Source;
|
||||
sourceMatches = *otherSource == mySource;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -210,9 +271,9 @@ bool Profile::ShouldBeLayered(const Json::Value& json) const
|
||||
// `this` is a dynamic profile with a source, and our _source is one
|
||||
// of the legacy DPG namespaces. We're looking to see if the other
|
||||
// json object has the same guid, but _no_ "source"
|
||||
if (_Source == WslGeneratorNamespace ||
|
||||
_Source == AzureGeneratorNamespace ||
|
||||
_Source == PowershellCoreGeneratorNamespace)
|
||||
if (mySource == WslGeneratorNamespace ||
|
||||
mySource == AzureGeneratorNamespace ||
|
||||
mySource == PowershellCoreGeneratorNamespace)
|
||||
{
|
||||
sourceMatches = true;
|
||||
}
|
||||
@@ -247,10 +308,10 @@ void Profile::LayerJson(const Json::Value& json)
|
||||
JsonUtils::GetValueForKey(json, HiddenKey, _Hidden);
|
||||
|
||||
// Core Settings
|
||||
JsonUtils::GetValueForKey(json, ForegroundKey, _Foreground);
|
||||
JsonUtils::GetValueForKey(json, BackgroundKey, _Background);
|
||||
JsonUtils::GetValueForKey(json, SelectionBackgroundKey, _SelectionBackground);
|
||||
JsonUtils::GetValueForKey(json, CursorColorKey, _CursorColor);
|
||||
_Foreground.set = JsonUtils::GetValueForKey(json, ForegroundKey, _Foreground.setting);
|
||||
_Background.set = JsonUtils::GetValueForKey(json, BackgroundKey, _Background.setting);
|
||||
_SelectionBackground.set = JsonUtils::GetValueForKey(json, SelectionBackgroundKey, _SelectionBackground.setting);
|
||||
_CursorColor.set = JsonUtils::GetValueForKey(json, CursorColorKey, _CursorColor.setting);
|
||||
JsonUtils::GetValueForKey(json, ColorSchemeKey, _ColorSchemeName);
|
||||
|
||||
// TODO:MSFT:20642297 - Use a sentinel value (-1) for "Infinite scrollback"
|
||||
@@ -278,6 +339,7 @@ void Profile::LayerJson(const Json::Value& json)
|
||||
|
||||
JsonUtils::GetValueForKey(json, ScrollbarStateKey, _ScrollState);
|
||||
JsonUtils::GetValueForKey(json, StartingDirectoryKey, _StartingDirectory);
|
||||
|
||||
JsonUtils::GetValueForKey(json, IconKey, _Icon);
|
||||
JsonUtils::GetValueForKey(json, BackgroundImageKey, _BackgroundImagePath);
|
||||
JsonUtils::GetValueForKey(json, BackgroundImageOpacityKey, _BackgroundImageOpacity);
|
||||
@@ -286,7 +348,7 @@ void Profile::LayerJson(const Json::Value& json)
|
||||
JsonUtils::GetValueForKey(json, RetroTerminalEffectKey, _RetroTerminalEffect);
|
||||
JsonUtils::GetValueForKey(json, AntialiasingModeKey, _AntialiasingMode);
|
||||
|
||||
JsonUtils::GetValueForKey(json, TabColorKey, _TabColor);
|
||||
_TabColor.set = JsonUtils::GetValueForKey(json, TabColorKey, _TabColor.setting);
|
||||
|
||||
JsonUtils::GetValueForKey(json, BellStyleKey, _BellStyle);
|
||||
}
|
||||
@@ -300,13 +362,14 @@ void Profile::LayerJson(const Json::Value& json)
|
||||
// - This profile's expanded background image path / desktops's wallpaper path /the empty string.
|
||||
winrt::hstring Profile::ExpandedBackgroundImagePath() const
|
||||
{
|
||||
if (_BackgroundImagePath.empty())
|
||||
const auto path{ BackgroundImagePath() };
|
||||
if (path.empty())
|
||||
{
|
||||
return _BackgroundImagePath;
|
||||
return path;
|
||||
}
|
||||
// checks if the user would like to copy their desktop wallpaper
|
||||
// if so, replaces the path with the desktop wallpaper's path
|
||||
else if (_BackgroundImagePath == to_hstring(DesktopWallpaperEnum))
|
||||
else if (path == to_hstring(DesktopWallpaperEnum))
|
||||
{
|
||||
WCHAR desktopWallpaper[MAX_PATH];
|
||||
|
||||
@@ -322,13 +385,18 @@ winrt::hstring Profile::ExpandedBackgroundImagePath() const
|
||||
}
|
||||
else
|
||||
{
|
||||
return winrt::hstring{ wil::ExpandEnvironmentStringsW<std::wstring>(_BackgroundImagePath.c_str()) };
|
||||
return winrt::hstring{ wil::ExpandEnvironmentStringsW<std::wstring>(path.c_str()) };
|
||||
}
|
||||
}
|
||||
|
||||
winrt::hstring Profile::EvaluatedStartingDirectory() const
|
||||
{
|
||||
return winrt::hstring{ Profile::EvaluateStartingDirectory(_StartingDirectory.c_str()) };
|
||||
if (_StartingDirectory)
|
||||
{
|
||||
return winrt::hstring{ Profile::EvaluateStartingDirectory(_StartingDirectory->c_str()) };
|
||||
}
|
||||
// treated as "inherit directory from parent process"
|
||||
return L"";
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
@@ -372,7 +440,7 @@ void Profile::GenerateGuidIfNecessary() noexcept
|
||||
{
|
||||
// Always use the name to generate the temporary GUID. That way, across
|
||||
// reloads, we'll generate the same static GUID.
|
||||
_Guid = Profile::_GenerateGuidForProfile(_Name, _Source);
|
||||
_Guid = Profile::_GenerateGuidForProfile(Name(), Source());
|
||||
|
||||
TraceLoggingWrite(
|
||||
g_hSettingsModelProvider,
|
||||
@@ -438,42 +506,45 @@ winrt::guid Profile::GetGuidOrGenerateForJson(const Json::Value& json) noexcept
|
||||
return Profile::_GenerateGuidForProfile(name, source);
|
||||
}
|
||||
|
||||
#pragma region BackgroundImageAlignment
|
||||
bool Profile::HasBackgroundImageAlignment() const noexcept
|
||||
{
|
||||
return _BackgroundImageAlignment.has_value();
|
||||
}
|
||||
|
||||
void Profile::ClearBackgroundImageAlignment() noexcept
|
||||
{
|
||||
_BackgroundImageAlignment = std::nullopt;
|
||||
}
|
||||
|
||||
const HorizontalAlignment Profile::BackgroundImageHorizontalAlignment() const noexcept
|
||||
{
|
||||
return std::get<HorizontalAlignment>(_BackgroundImageAlignment);
|
||||
const auto val{ _getBackgroundImageAlignmentImpl() };
|
||||
return val ? std::get<HorizontalAlignment>(*val) : HorizontalAlignment::Center;
|
||||
}
|
||||
|
||||
void Profile::BackgroundImageHorizontalAlignment(const HorizontalAlignment& value) noexcept
|
||||
{
|
||||
std::get<HorizontalAlignment>(_BackgroundImageAlignment) = value;
|
||||
if (!HasBackgroundImageAlignment() || std::get<HorizontalAlignment>(*_BackgroundImageAlignment) != value)
|
||||
{
|
||||
std::get<HorizontalAlignment>(*_BackgroundImageAlignment) = value;
|
||||
}
|
||||
}
|
||||
|
||||
const VerticalAlignment Profile::BackgroundImageVerticalAlignment() const noexcept
|
||||
{
|
||||
return std::get<VerticalAlignment>(_BackgroundImageAlignment);
|
||||
const auto val{ _getBackgroundImageAlignmentImpl() };
|
||||
return val ? std::get<VerticalAlignment>(*val) : VerticalAlignment::Center;
|
||||
}
|
||||
|
||||
void Profile::BackgroundImageVerticalAlignment(const VerticalAlignment& value) noexcept
|
||||
{
|
||||
std::get<VerticalAlignment>(_BackgroundImageAlignment) = value;
|
||||
}
|
||||
|
||||
bool Profile::HasGuid() const noexcept
|
||||
{
|
||||
return _Guid.has_value();
|
||||
}
|
||||
|
||||
winrt::guid Profile::Guid() const
|
||||
{
|
||||
// This can throw if we never had our guid set to a legitimate value.
|
||||
THROW_HR_IF_MSG(E_FAIL, !_Guid.has_value(), "Profile._guid always expected to have a value");
|
||||
return *_Guid;
|
||||
}
|
||||
|
||||
void Profile::Guid(const winrt::guid& guid) noexcept
|
||||
{
|
||||
_Guid = guid;
|
||||
if (!HasBackgroundImageAlignment() || std::get<VerticalAlignment>(*_BackgroundImageAlignment) != value)
|
||||
{
|
||||
std::get<VerticalAlignment>(*_BackgroundImageAlignment) = value;
|
||||
}
|
||||
}
|
||||
#pragma endregion
|
||||
|
||||
bool Profile::HasConnectionType() const noexcept
|
||||
{
|
||||
|
||||
@@ -16,6 +16,7 @@ Author(s):
|
||||
#pragma once
|
||||
|
||||
#include "Profile.g.h"
|
||||
#include "IInheritable.h"
|
||||
|
||||
#include "../inc/cppwinrt_utils.h"
|
||||
#include "JsonUtils.h"
|
||||
@@ -39,12 +40,12 @@ constexpr GUID RUNTIME_GENERATED_PROFILE_NAMESPACE_GUID = { 0xf65ddb7e, 0x706b,
|
||||
|
||||
namespace winrt::Microsoft::Terminal::Settings::Model::implementation
|
||||
{
|
||||
struct Profile : ProfileT<Profile>
|
||||
struct Profile : ProfileT<Profile>, IInheritable<Profile>
|
||||
{
|
||||
public:
|
||||
Profile();
|
||||
Profile(guid guid);
|
||||
com_ptr<Profile> Copy() const;
|
||||
static com_ptr<Profile> CloneInheritanceGraph(com_ptr<Profile> oldProfile, com_ptr<Profile> newProfile, std::unordered_map<void*, com_ptr<Profile>> visited = {});
|
||||
|
||||
Json::Value GenerateStub() const;
|
||||
static com_ptr<Profile> FromJson(const Json::Value& json);
|
||||
@@ -57,79 +58,97 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
|
||||
void GenerateGuidIfNecessary() noexcept;
|
||||
static guid GetGuidOrGenerateForJson(const Json::Value& json) noexcept;
|
||||
|
||||
bool HasGuid() const noexcept;
|
||||
winrt::guid Guid() const;
|
||||
void Guid(const winrt::guid& guid) noexcept;
|
||||
|
||||
bool HasConnectionType() const noexcept;
|
||||
winrt::guid ConnectionType() const noexcept;
|
||||
void ConnectionType(const winrt::guid& conType) noexcept;
|
||||
|
||||
// BackgroundImageAlignment is 1 setting saved as 2 separate values
|
||||
bool HasBackgroundImageAlignment() const noexcept;
|
||||
void ClearBackgroundImageAlignment() noexcept;
|
||||
const Windows::UI::Xaml::HorizontalAlignment BackgroundImageHorizontalAlignment() const noexcept;
|
||||
void BackgroundImageHorizontalAlignment(const Windows::UI::Xaml::HorizontalAlignment& value) noexcept;
|
||||
const Windows::UI::Xaml::VerticalAlignment BackgroundImageVerticalAlignment() const noexcept;
|
||||
void BackgroundImageVerticalAlignment(const Windows::UI::Xaml::VerticalAlignment& value) noexcept;
|
||||
|
||||
GETSET_PROPERTY(hstring, Name, L"Default");
|
||||
GETSET_PROPERTY(hstring, Source);
|
||||
GETSET_PROPERTY(bool, Hidden, false);
|
||||
GETSET_SETTING(guid, Guid);
|
||||
GETSET_SETTING(hstring, Name, L"Default");
|
||||
GETSET_SETTING(hstring, Source);
|
||||
GETSET_SETTING(bool, Hidden, false);
|
||||
|
||||
GETSET_PROPERTY(hstring, Icon);
|
||||
GETSET_SETTING(hstring, Icon);
|
||||
|
||||
GETSET_PROPERTY(CloseOnExitMode, CloseOnExit, CloseOnExitMode::Graceful);
|
||||
GETSET_PROPERTY(hstring, TabTitle);
|
||||
GETSET_PROPERTY(Windows::Foundation::IReference<Windows::UI::Color>, TabColor);
|
||||
GETSET_PROPERTY(bool, SuppressApplicationTitle, false);
|
||||
GETSET_SETTING(CloseOnExitMode, CloseOnExit, CloseOnExitMode::Graceful);
|
||||
GETSET_SETTING(hstring, TabTitle);
|
||||
GETSET_NULLABLE_SETTING(Windows::UI::Color, TabColor, nullptr);
|
||||
GETSET_SETTING(bool, SuppressApplicationTitle, false);
|
||||
|
||||
GETSET_PROPERTY(bool, UseAcrylic, false);
|
||||
GETSET_PROPERTY(double, AcrylicOpacity, 0.5);
|
||||
GETSET_PROPERTY(Microsoft::Terminal::TerminalControl::ScrollbarState, ScrollState, Microsoft::Terminal::TerminalControl::ScrollbarState::Visible);
|
||||
GETSET_SETTING(bool, UseAcrylic, false);
|
||||
GETSET_SETTING(double, AcrylicOpacity, 0.5);
|
||||
GETSET_SETTING(Microsoft::Terminal::TerminalControl::ScrollbarState, ScrollState, Microsoft::Terminal::TerminalControl::ScrollbarState::Visible);
|
||||
|
||||
GETSET_PROPERTY(hstring, FontFace, DEFAULT_FONT_FACE);
|
||||
GETSET_PROPERTY(int32_t, FontSize, DEFAULT_FONT_SIZE);
|
||||
GETSET_PROPERTY(Windows::UI::Text::FontWeight, FontWeight, DEFAULT_FONT_WEIGHT);
|
||||
GETSET_PROPERTY(hstring, Padding, DEFAULT_PADDING);
|
||||
GETSET_SETTING(hstring, FontFace, DEFAULT_FONT_FACE);
|
||||
GETSET_SETTING(int32_t, FontSize, DEFAULT_FONT_SIZE);
|
||||
GETSET_SETTING(Windows::UI::Text::FontWeight, FontWeight, DEFAULT_FONT_WEIGHT);
|
||||
GETSET_SETTING(hstring, Padding, DEFAULT_PADDING);
|
||||
|
||||
GETSET_PROPERTY(hstring, Commandline, L"cmd.exe");
|
||||
GETSET_PROPERTY(hstring, StartingDirectory);
|
||||
GETSET_SETTING(hstring, Commandline, L"cmd.exe");
|
||||
GETSET_SETTING(hstring, StartingDirectory);
|
||||
|
||||
GETSET_PROPERTY(hstring, BackgroundImagePath);
|
||||
GETSET_PROPERTY(double, BackgroundImageOpacity, 1.0);
|
||||
GETSET_PROPERTY(Windows::UI::Xaml::Media::Stretch, BackgroundImageStretchMode, Windows::UI::Xaml::Media::Stretch::Fill);
|
||||
GETSET_SETTING(hstring, BackgroundImagePath);
|
||||
GETSET_SETTING(double, BackgroundImageOpacity, 1.0);
|
||||
GETSET_SETTING(Windows::UI::Xaml::Media::Stretch, BackgroundImageStretchMode, Windows::UI::Xaml::Media::Stretch::Fill);
|
||||
|
||||
GETSET_PROPERTY(Microsoft::Terminal::TerminalControl::TextAntialiasingMode, AntialiasingMode, Microsoft::Terminal::TerminalControl::TextAntialiasingMode::Grayscale);
|
||||
GETSET_PROPERTY(bool, RetroTerminalEffect, false);
|
||||
GETSET_PROPERTY(bool, ForceFullRepaintRendering, false);
|
||||
GETSET_PROPERTY(bool, SoftwareRendering, false);
|
||||
GETSET_SETTING(Microsoft::Terminal::TerminalControl::TextAntialiasingMode, AntialiasingMode, Microsoft::Terminal::TerminalControl::TextAntialiasingMode::Grayscale);
|
||||
GETSET_SETTING(bool, RetroTerminalEffect, false);
|
||||
GETSET_SETTING(bool, ForceFullRepaintRendering, false);
|
||||
GETSET_SETTING(bool, SoftwareRendering, false);
|
||||
|
||||
GETSET_PROPERTY(hstring, ColorSchemeName, L"Campbell");
|
||||
GETSET_PROPERTY(Windows::Foundation::IReference<Windows::UI::Color>, Foreground);
|
||||
GETSET_PROPERTY(Windows::Foundation::IReference<Windows::UI::Color>, Background);
|
||||
GETSET_PROPERTY(Windows::Foundation::IReference<Windows::UI::Color>, SelectionBackground);
|
||||
GETSET_PROPERTY(Windows::Foundation::IReference<Windows::UI::Color>, CursorColor);
|
||||
GETSET_SETTING(hstring, ColorSchemeName, L"Campbell");
|
||||
|
||||
GETSET_PROPERTY(int32_t, HistorySize, DEFAULT_HISTORY_SIZE);
|
||||
GETSET_PROPERTY(bool, SnapOnInput, true);
|
||||
GETSET_PROPERTY(bool, AltGrAliasing, true);
|
||||
GETSET_NULLABLE_SETTING(Windows::UI::Color, Foreground, nullptr);
|
||||
GETSET_NULLABLE_SETTING(Windows::UI::Color, Background, nullptr);
|
||||
GETSET_NULLABLE_SETTING(Windows::UI::Color, SelectionBackground, nullptr);
|
||||
GETSET_NULLABLE_SETTING(Windows::UI::Color, CursorColor, nullptr);
|
||||
|
||||
GETSET_PROPERTY(Microsoft::Terminal::TerminalControl::CursorStyle, CursorShape, Microsoft::Terminal::TerminalControl::CursorStyle::Bar);
|
||||
GETSET_PROPERTY(uint32_t, CursorHeight, DEFAULT_CURSOR_HEIGHT);
|
||||
GETSET_SETTING(int32_t, HistorySize, DEFAULT_HISTORY_SIZE);
|
||||
GETSET_SETTING(bool, SnapOnInput, true);
|
||||
GETSET_SETTING(bool, AltGrAliasing, true);
|
||||
|
||||
GETSET_PROPERTY(winrt::Microsoft::Terminal::Settings::Model::BellStyle, BellStyle, winrt::Microsoft::Terminal::Settings::Model::BellStyle::Audible);
|
||||
GETSET_SETTING(Microsoft::Terminal::TerminalControl::CursorStyle, CursorShape, Microsoft::Terminal::TerminalControl::CursorStyle::Bar);
|
||||
GETSET_SETTING(uint32_t, CursorHeight, DEFAULT_CURSOR_HEIGHT);
|
||||
|
||||
GETSET_SETTING(Model::BellStyle, BellStyle, BellStyle::Audible);
|
||||
|
||||
private:
|
||||
std::optional<winrt::guid> _Guid{ std::nullopt };
|
||||
std::optional<winrt::guid> _ConnectionType{ std::nullopt };
|
||||
std::tuple<Windows::UI::Xaml::HorizontalAlignment, Windows::UI::Xaml::VerticalAlignment> _BackgroundImageAlignment{
|
||||
Windows::UI::Xaml::HorizontalAlignment::Center,
|
||||
Windows::UI::Xaml::VerticalAlignment::Center
|
||||
std::optional<std::tuple<Windows::UI::Xaml::HorizontalAlignment, Windows::UI::Xaml::VerticalAlignment>> _BackgroundImageAlignment{ std::nullopt };
|
||||
std::optional<std::tuple<Windows::UI::Xaml::HorizontalAlignment, Windows::UI::Xaml::VerticalAlignment>> _getBackgroundImageAlignmentImpl() const
|
||||
{
|
||||
/*return user set value*/
|
||||
if (_BackgroundImageAlignment)
|
||||
{
|
||||
return _BackgroundImageAlignment;
|
||||
}
|
||||
|
||||
/*user set value was not set*/ /*iterate through parents to find a value*/
|
||||
for (auto parent : _parents)
|
||||
{
|
||||
if (auto val{ parent->_getBackgroundImageAlignmentImpl() })
|
||||
{
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
||||
/*no value was found*/
|
||||
return std::nullopt;
|
||||
};
|
||||
|
||||
static std::wstring EvaluateStartingDirectory(const std::wstring& directory);
|
||||
|
||||
static guid _GenerateGuidForProfile(const hstring& name, const hstring& source) noexcept;
|
||||
|
||||
static com_ptr<Profile> _CopyMembers(com_ptr<Profile> source);
|
||||
|
||||
friend class TerminalAppLocalTests::SettingsTests;
|
||||
friend class TerminalAppLocalTests::ProfileTests;
|
||||
friend class TerminalAppUnitTests::JsonTests;
|
||||
|
||||
@@ -20,59 +20,157 @@ namespace Microsoft.Terminal.Settings.Model
|
||||
Profile();
|
||||
Profile(Guid guid);
|
||||
|
||||
Boolean HasName();
|
||||
void ClearName();
|
||||
String Name;
|
||||
|
||||
Boolean HasGuid();
|
||||
Guid Guid;
|
||||
|
||||
Boolean HasSource();
|
||||
void ClearSource();
|
||||
String Source;
|
||||
|
||||
Boolean HasConnectionType();
|
||||
Guid ConnectionType;
|
||||
|
||||
Boolean HasHidden();
|
||||
void ClearHidden();
|
||||
Boolean Hidden;
|
||||
|
||||
Boolean HasIcon();
|
||||
void ClearIcon();
|
||||
String Icon;
|
||||
|
||||
Boolean HasCloseOnExit();
|
||||
void ClearCloseOnExit();
|
||||
CloseOnExitMode CloseOnExit;
|
||||
|
||||
Boolean HasTabTitle();
|
||||
void ClearTabTitle();
|
||||
String TabTitle;
|
||||
|
||||
Boolean HasTabColor();
|
||||
void ClearTabColor();
|
||||
Windows.Foundation.IReference<Windows.UI.Color> TabColor;
|
||||
|
||||
Boolean HasSuppressApplicationTitle();
|
||||
void ClearSuppressApplicationTitle();
|
||||
Boolean SuppressApplicationTitle;
|
||||
|
||||
Boolean HasUseAcrylic();
|
||||
void ClearUseAcrylic();
|
||||
Boolean UseAcrylic;
|
||||
|
||||
Boolean HasAcrylicOpacity();
|
||||
void ClearAcrylicOpacity();
|
||||
Double AcrylicOpacity;
|
||||
|
||||
Boolean HasScrollState();
|
||||
void ClearScrollState();
|
||||
Microsoft.Terminal.TerminalControl.ScrollbarState ScrollState;
|
||||
|
||||
Boolean HasFontFace();
|
||||
void ClearFontFace();
|
||||
String FontFace;
|
||||
|
||||
Boolean HasFontSize();
|
||||
void ClearFontSize();
|
||||
Int32 FontSize;
|
||||
|
||||
Boolean HasFontWeight();
|
||||
void ClearFontWeight();
|
||||
Windows.UI.Text.FontWeight FontWeight;
|
||||
|
||||
Boolean HasPadding();
|
||||
void ClearPadding();
|
||||
String Padding;
|
||||
|
||||
Boolean HasCommandline();
|
||||
void ClearCommandline();
|
||||
String Commandline;
|
||||
|
||||
Boolean HasStartingDirectory();
|
||||
void ClearStartingDirectory();
|
||||
String StartingDirectory;
|
||||
String EvaluatedStartingDirectory { get; };
|
||||
|
||||
Boolean HasBackgroundImagePath();
|
||||
void ClearBackgroundImagePath();
|
||||
String BackgroundImagePath;
|
||||
String ExpandedBackgroundImagePath { get; };
|
||||
|
||||
Boolean HasBackgroundImageOpacity();
|
||||
void ClearBackgroundImageOpacity();
|
||||
Double BackgroundImageOpacity;
|
||||
|
||||
Boolean HasBackgroundImageStretchMode();
|
||||
void ClearBackgroundImageStretchMode();
|
||||
Windows.UI.Xaml.Media.Stretch BackgroundImageStretchMode;
|
||||
|
||||
Boolean HasBackgroundImageAlignment();
|
||||
void ClearBackgroundImageAlignment();
|
||||
Windows.UI.Xaml.HorizontalAlignment BackgroundImageHorizontalAlignment;
|
||||
Windows.UI.Xaml.VerticalAlignment BackgroundImageVerticalAlignment;
|
||||
|
||||
Boolean HasAntialiasingMode();
|
||||
void ClearAntialiasingMode();
|
||||
Microsoft.Terminal.TerminalControl.TextAntialiasingMode AntialiasingMode;
|
||||
|
||||
Boolean HasRetroTerminalEffect();
|
||||
void ClearRetroTerminalEffect();
|
||||
Boolean RetroTerminalEffect;
|
||||
|
||||
Boolean HasForceFullRepaintRendering();
|
||||
void ClearForceFullRepaintRendering();
|
||||
Boolean ForceFullRepaintRendering;
|
||||
|
||||
Boolean HasSoftwareRendering();
|
||||
void ClearSoftwareRendering();
|
||||
Boolean SoftwareRendering;
|
||||
|
||||
Boolean HasColorSchemeName();
|
||||
void ClearColorSchemeName();
|
||||
String ColorSchemeName;
|
||||
|
||||
Boolean HasForeground();
|
||||
void ClearForeground();
|
||||
Windows.Foundation.IReference<Windows.UI.Color> Foreground;
|
||||
|
||||
Boolean HasBackground();
|
||||
void ClearBackground();
|
||||
Windows.Foundation.IReference<Windows.UI.Color> Background;
|
||||
|
||||
Boolean HasSelectionBackground();
|
||||
void ClearSelectionBackground();
|
||||
Windows.Foundation.IReference<Windows.UI.Color> SelectionBackground;
|
||||
|
||||
Boolean HasCursorColor();
|
||||
void ClearCursorColor();
|
||||
Windows.Foundation.IReference<Windows.UI.Color> CursorColor;
|
||||
|
||||
Boolean HasHistorySize();
|
||||
void ClearHistorySize();
|
||||
Int32 HistorySize;
|
||||
|
||||
Boolean HasSnapOnInput();
|
||||
void ClearSnapOnInput();
|
||||
Boolean SnapOnInput;
|
||||
|
||||
Boolean HasAltGrAliasing();
|
||||
void ClearAltGrAliasing();
|
||||
Boolean AltGrAliasing;
|
||||
|
||||
Boolean HasCursorShape();
|
||||
void ClearCursorShape();
|
||||
Microsoft.Terminal.TerminalControl.CursorStyle CursorShape;
|
||||
|
||||
Boolean HasCursorHeight();
|
||||
void ClearCursorHeight();
|
||||
UInt32 CursorHeight;
|
||||
|
||||
Boolean HasBellStyle();
|
||||
void ClearBellStyle();
|
||||
BellStyle BellStyle;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,20 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace winrt
|
||||
{
|
||||
// If we don't use winrt, nobody will include the ConversionTraits for winrt stuff.
|
||||
// If nobody includes it, these forward declarations will suffice.
|
||||
namespace Windows::Foundation
|
||||
{
|
||||
template<typename T>
|
||||
struct IReference;
|
||||
}
|
||||
}
|
||||
|
||||
namespace til
|
||||
{
|
||||
#pragma region coalesce_value
|
||||
// Method Description:
|
||||
// - Base case provided to handle the last argument to coalesce_value<T...>()
|
||||
template<typename T>
|
||||
@@ -22,6 +34,15 @@ namespace til
|
||||
return T{};
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Base case provided to throw an assertion if you call coalesce_value(opt, opt, opt)
|
||||
template<typename T>
|
||||
T coalesce_value(const winrt::Windows::Foundation::IReference<T>& base)
|
||||
{
|
||||
static_assert(false, "coalesce_value must be passed a base non-optional value to be used if all optionals are empty");
|
||||
return T{};
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Returns the value from the first populated optional, or a base value if none were populated.
|
||||
template<typename T, typename... Ts>
|
||||
@@ -34,6 +55,16 @@ namespace til
|
||||
return t1.value_or(coalesce_value(std::forward<Ts>(t2)...));
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Returns the value from the first populated IReference, or a base value if none were populated.
|
||||
template<typename T, typename... Ts>
|
||||
T coalesce_value(const winrt::Windows::Foundation::IReference<T>& t1, Ts&&... t2)
|
||||
{
|
||||
return t1 ? t1.Value() : coalesce_value(std::forward<Ts>(t2)...);
|
||||
}
|
||||
#pragma endregion
|
||||
|
||||
#pragma region coalesce
|
||||
// Method Description:
|
||||
// - Base case provided to handle the last argument to coalesce_value<T...>()
|
||||
template<typename T>
|
||||
@@ -42,6 +73,14 @@ namespace til
|
||||
return base;
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Base case provided to handle the last argument to coalesce_value<T...>()
|
||||
template<typename T>
|
||||
winrt::Windows::Foundation::IReference<T> coalesce(const winrt::Windows::Foundation::IReference<T>& base)
|
||||
{
|
||||
return base;
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Base case provided to handle the last argument to coalesce_value<T...>(..., nullopt)
|
||||
template<typename T>
|
||||
@@ -58,4 +97,12 @@ namespace til
|
||||
return t1.has_value() ? t1 : coalesce(std::forward<Ts>(t2)...);
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Returns the value from the first populated IReference, or the last one (if none of the previous had a value)
|
||||
template<typename T, typename... Ts>
|
||||
winrt::Windows::Foundation::IReference<T> coalesce(const winrt::Windows::Foundation::IReference<T>& t1, Ts&&... t2)
|
||||
{
|
||||
return t1 ? t1 : coalesce(std::forward<Ts>(t2)...);
|
||||
}
|
||||
#pragma endregion
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user