mirror of
https://github.com/microsoft/terminal.git
synced 2026-04-14 02:01:01 +00:00
Compare commits
76 Commits
dev/lhecke
...
dev/migrie
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c9cc47ccb9 | ||
|
|
5668fdb1ef | ||
|
|
4703dfe1ae | ||
|
|
9ffc993d80 | ||
|
|
612727fcfb | ||
|
|
437de6d3fa | ||
|
|
75d4461eef | ||
|
|
822d366cd9 | ||
|
|
1e43eb846a | ||
|
|
b4f6a1c575 | ||
|
|
09c5a1f87e | ||
|
|
7f1ce2ac78 | ||
|
|
b1e3c6910f | ||
|
|
26edc1fbfa | ||
|
|
17e9fe12ad | ||
|
|
7f5879d636 | ||
|
|
788cf40ae0 | ||
|
|
392a84748f | ||
|
|
a22295b29f | ||
|
|
9c9ba51b3e | ||
|
|
6df3755cdb | ||
|
|
f527445091 | ||
|
|
547ab1922e | ||
|
|
2daf56a035 | ||
|
|
0ab080a68e | ||
|
|
7555f3eff0 | ||
|
|
abf5364dbc | ||
|
|
763058784b | ||
|
|
ecb5b4aaff | ||
|
|
b2aafd7534 | ||
|
|
dca316e6cc | ||
|
|
935fb2b512 | ||
|
|
9b8fabe25b | ||
|
|
897bde6df6 | ||
|
|
7ea94d3b9a | ||
|
|
48539f15cb | ||
|
|
adffa881ea | ||
|
|
1fbf15836a | ||
|
|
d10f694778 | ||
|
|
31416ff20a | ||
|
|
12e50ea911 | ||
|
|
24561399a2 | ||
|
|
b1eefb865c | ||
|
|
f742afdb49 | ||
|
|
f3cffafa52 | ||
|
|
bb2920ec01 | ||
|
|
ecf99fac23 | ||
|
|
c86038926d | ||
|
|
52b05e065e | ||
|
|
81a80257c9 | ||
|
|
1ea9fc26c8 | ||
|
|
e1d15105d7 | ||
|
|
d321ec084c | ||
|
|
f33c69d8b4 | ||
|
|
30b8335479 | ||
|
|
93b79fb23c | ||
|
|
7b8806b1fe | ||
|
|
8c5041b2ae | ||
|
|
a511ab0bc7 | ||
|
|
501c47adb2 | ||
|
|
72121721f3 | ||
|
|
3e80b6a466 | ||
|
|
a80e1d3f73 | ||
|
|
f45df9a717 | ||
|
|
b37f69826e | ||
|
|
b2e76c1812 | ||
|
|
2179e16e3d | ||
|
|
fafc0e1316 | ||
|
|
ca6dff9f20 | ||
|
|
186ff8f638 | ||
|
|
37810aac71 | ||
|
|
33bc88b225 | ||
|
|
d56137876e | ||
|
|
f928d41917 | ||
|
|
e4cc3104ab | ||
|
|
0c10b4b265 |
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>
|
||||||
27
.github/actions/spelling/advice.txt
vendored
27
.github/actions/spelling/advice.txt
vendored
@@ -1,27 +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/spelling/dictionary/names.txt`.
|
|
||||||
* ... APIs, you can add them to a file in `.github/actions/spelling/dictionary/`.
|
|
||||||
* ... 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:
|
|
||||||
|
|
||||||
:clamp: If you see a bunch of garbage and it relates to a binary-ish string, please add a file path to the `.github/actions/spelling/excludes.txt` file instead of just accepting the garbage.
|
|
||||||
|
|
||||||
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](https://github.com/microsoft/terminal/blob/main/README.md) (on whichever branch you're using).
|
|
||||||
</details>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Dictionaries are lists of words to accept unconditionally
|
# Allow files are lists of words to accept unconditionally
|
||||||
|
|
||||||
While check spelling will complain about an expected word
|
While check spelling will complain about an expected word
|
||||||
which is no longer present, you can include things here even if
|
which is no longer present, you can include things here even if
|
||||||
@@ -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,
|
contributors (so that if a future commit includes their name,
|
||||||
it'll be accepted).
|
it'll be accepted).
|
||||||
|
|
||||||
### Files
|
## Files
|
||||||
|
|
||||||
| File | Description |
|
| File | Description |
|
||||||
| ---- | ----------- |
|
| ---- | ----------- |
|
||||||
| [Dictionary](dictionary.txt) | Primary US English dictionary |
|
| [Allow](allow.txt) | Supplements to the dictionary |
|
||||||
| [Chinese](chinese.txt) | Chinese words |
|
| [Chinese](chinese.txt) | Chinese words |
|
||||||
| [Japanese](japanese.txt) | Japanese words |
|
| [Japanese](japanese.txt) | Japanese words |
|
||||||
| [Microsoft](microsoft.txt) | Microsoft brand items |
|
| [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
|
||||||
@@ -7,3 +7,4 @@ Iosevka
|
|||||||
MDL
|
MDL
|
||||||
Monofur
|
Monofur
|
||||||
Segoe
|
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
|
||||||
@@ -1,17 +1,25 @@
|
|||||||
ACLs
|
ACLs
|
||||||
ADMINS
|
ADMINS
|
||||||
|
advapi
|
||||||
altform
|
altform
|
||||||
altforms
|
altforms
|
||||||
appendwttlogging
|
appendwttlogging
|
||||||
|
appx
|
||||||
|
appxbundle
|
||||||
|
appxerror
|
||||||
|
appxmanifest
|
||||||
|
ATL
|
||||||
backplating
|
backplating
|
||||||
bitmaps
|
bitmaps
|
||||||
BOMs
|
BOMs
|
||||||
CPLs
|
CPLs
|
||||||
CPRs
|
|
||||||
cpptools
|
cpptools
|
||||||
cppvsdbg
|
cppvsdbg
|
||||||
|
CPRs
|
||||||
|
cryptbase
|
||||||
DACL
|
DACL
|
||||||
DACLs
|
DACLs
|
||||||
|
defaultlib
|
||||||
diffs
|
diffs
|
||||||
disposables
|
disposables
|
||||||
dotnetfeed
|
dotnetfeed
|
||||||
@@ -19,13 +27,24 @@ DTDs
|
|||||||
DWINRT
|
DWINRT
|
||||||
enablewttlogging
|
enablewttlogging
|
||||||
Intelli
|
Intelli
|
||||||
|
IVisual
|
||||||
|
libucrt
|
||||||
|
libucrtd
|
||||||
LKG
|
LKG
|
||||||
|
LOCKFILE
|
||||||
|
Lxss
|
||||||
mfcribbon
|
mfcribbon
|
||||||
microsoft
|
microsoft
|
||||||
microsoftonline
|
microsoftonline
|
||||||
|
MSAA
|
||||||
|
msixbundle
|
||||||
|
MSVC
|
||||||
|
MSVCP
|
||||||
muxc
|
muxc
|
||||||
netcore
|
netcore
|
||||||
|
Onefuzz
|
||||||
osgvsowi
|
osgvsowi
|
||||||
|
PFILETIME
|
||||||
pgc
|
pgc
|
||||||
pgo
|
pgo
|
||||||
pgosweep
|
pgosweep
|
||||||
@@ -33,20 +52,31 @@ powerrename
|
|||||||
powershell
|
powershell
|
||||||
propkey
|
propkey
|
||||||
pscustomobject
|
pscustomobject
|
||||||
|
QWORD
|
||||||
|
regedit
|
||||||
robocopy
|
robocopy
|
||||||
SACLs
|
SACLs
|
||||||
|
sdkddkver
|
||||||
Shobjidl
|
Shobjidl
|
||||||
Skype
|
Skype
|
||||||
|
SRW
|
||||||
|
sxs
|
||||||
|
Sysinternals
|
||||||
sysnative
|
sysnative
|
||||||
systemroot
|
systemroot
|
||||||
taskkill
|
taskkill
|
||||||
tasklist
|
tasklist
|
||||||
tdbuildteamid
|
tdbuildteamid
|
||||||
|
ucrt
|
||||||
|
ucrtd
|
||||||
|
unvirtualized
|
||||||
VCRT
|
VCRT
|
||||||
vcruntime
|
vcruntime
|
||||||
|
Virtualization
|
||||||
visualstudio
|
visualstudio
|
||||||
vscode
|
vscode
|
||||||
VSTHRD
|
VSTHRD
|
||||||
|
winsdkver
|
||||||
wlk
|
wlk
|
||||||
wslpath
|
wslpath
|
||||||
wtl
|
wtl
|
||||||
@@ -1,24 +1,30 @@
|
|||||||
Anup
|
Anup
|
||||||
austdi
|
austdi
|
||||||
|
arkthur
|
||||||
Ballmer
|
Ballmer
|
||||||
bhoj
|
bhoj
|
||||||
Bhojwani
|
Bhojwani
|
||||||
|
Bluloco
|
||||||
carlos
|
carlos
|
||||||
dhowett
|
dhowett
|
||||||
Diviness
|
Diviness
|
||||||
dsafa
|
dsafa
|
||||||
duhowett
|
duhowett
|
||||||
|
DXP
|
||||||
ekg
|
ekg
|
||||||
|
eryksun
|
||||||
ethanschoonover
|
ethanschoonover
|
||||||
Firefox
|
Firefox
|
||||||
Gatta
|
Gatta
|
||||||
glsl
|
glsl
|
||||||
|
Gravell
|
||||||
Grie
|
Grie
|
||||||
Griese
|
Griese
|
||||||
Hernan
|
Hernan
|
||||||
Howett
|
Howett
|
||||||
Illhardt
|
Illhardt
|
||||||
iquilezles
|
iquilezles
|
||||||
|
italo
|
||||||
jantari
|
jantari
|
||||||
jerrysh
|
jerrysh
|
||||||
Kaiyu
|
Kaiyu
|
||||||
@@ -30,8 +36,11 @@ Kourosh
|
|||||||
kowalczyk
|
kowalczyk
|
||||||
leonmsft
|
leonmsft
|
||||||
Lepilleur
|
Lepilleur
|
||||||
|
lhecker
|
||||||
lukesampson
|
lukesampson
|
||||||
|
Macbook
|
||||||
Manandhar
|
Manandhar
|
||||||
|
masserano
|
||||||
mbadolato
|
mbadolato
|
||||||
Mehrain
|
Mehrain
|
||||||
menger
|
menger
|
||||||
@@ -51,6 +60,7 @@ oldnewthing
|
|||||||
opengl
|
opengl
|
||||||
osgwiki
|
osgwiki
|
||||||
pabhojwa
|
pabhojwa
|
||||||
|
panos
|
||||||
paulcam
|
paulcam
|
||||||
pauldotknopf
|
pauldotknopf
|
||||||
PGP
|
PGP
|
||||||
@@ -59,18 +69,23 @@ Rincewind
|
|||||||
rprichard
|
rprichard
|
||||||
Schoonover
|
Schoonover
|
||||||
shadertoy
|
shadertoy
|
||||||
|
Shomnipotence
|
||||||
|
simioni
|
||||||
Somuah
|
Somuah
|
||||||
sonph
|
sonph
|
||||||
sonpham
|
sonpham
|
||||||
stakx
|
stakx
|
||||||
|
talo
|
||||||
thereses
|
thereses
|
||||||
Walisch
|
Walisch
|
||||||
|
WDX
|
||||||
|
Wellons
|
||||||
Wirt
|
Wirt
|
||||||
Wojciech
|
Wojciech
|
||||||
zadjii
|
zadjii
|
||||||
Zamor
|
Zamor
|
||||||
zamora
|
|
||||||
Zamora
|
Zamora
|
||||||
|
zamora
|
||||||
Zoey
|
Zoey
|
||||||
zorio
|
zorio
|
||||||
Zverovich
|
Zverovich
|
||||||
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-)/
|
||||||
119
.github/actions/spelling/dictionary/apis.txt
vendored
119
.github/actions/spelling/dictionary/apis.txt
vendored
@@ -1,119 +0,0 @@
|
|||||||
ACCEPTFILES
|
|
||||||
ACCESSDENIED
|
|
||||||
alignof
|
|
||||||
bitfield
|
|
||||||
bitfields
|
|
||||||
CLASSNOTAVAILABLE
|
|
||||||
cmdletbinding
|
|
||||||
COLORPROPERTY
|
|
||||||
CXICON
|
|
||||||
CYICON
|
|
||||||
D2DERR_SHADER_COMPILE_FAILED
|
|
||||||
dataobject
|
|
||||||
DERR
|
|
||||||
environstrings
|
|
||||||
EXPCMDFLAGS
|
|
||||||
EXPCMDSTATE
|
|
||||||
FORCEMINIMIZE
|
|
||||||
frac
|
|
||||||
fullkbd
|
|
||||||
futex
|
|
||||||
GETDESKWALLPAPER
|
|
||||||
GETHIGHCONTRAST
|
|
||||||
Hashtable
|
|
||||||
HIGHCONTRASTON
|
|
||||||
HIGHCONTRASTW
|
|
||||||
href
|
|
||||||
IApp
|
|
||||||
IAppearance
|
|
||||||
IAsync
|
|
||||||
IBind
|
|
||||||
IBox
|
|
||||||
IClass
|
|
||||||
IConnection
|
|
||||||
IComparable
|
|
||||||
ICustom
|
|
||||||
IDialog
|
|
||||||
IDirect
|
|
||||||
IExplorer
|
|
||||||
IInheritable
|
|
||||||
IMap
|
|
||||||
IObject
|
|
||||||
IPackage
|
|
||||||
IPeasant
|
|
||||||
IStorage
|
|
||||||
istream
|
|
||||||
IStringable
|
|
||||||
ITab
|
|
||||||
ITaskbar
|
|
||||||
IVirtual
|
|
||||||
LCID
|
|
||||||
llabs
|
|
||||||
llu
|
|
||||||
localtime
|
|
||||||
lround
|
|
||||||
LSHIFT
|
|
||||||
MULTIPLEUSE
|
|
||||||
msappx
|
|
||||||
MULTIPLEUSE
|
|
||||||
NCHITTEST
|
|
||||||
NCLBUTTONDBLCLK
|
|
||||||
NCRBUTTONDBLCLK
|
|
||||||
NOAGGREGATION
|
|
||||||
NOASYNC
|
|
||||||
NOPROGRESS
|
|
||||||
NOREDIRECTIONBITMAP
|
|
||||||
ntprivapi
|
|
||||||
oaidl
|
|
||||||
ocidl
|
|
||||||
otms
|
|
||||||
OUTLINETEXTMETRICW
|
|
||||||
overridable
|
|
||||||
PAGESCROLL
|
|
||||||
pmr
|
|
||||||
REGCLS
|
|
||||||
RETURNCMD
|
|
||||||
REGCLS
|
|
||||||
rfind
|
|
||||||
roundf
|
|
||||||
RSHIFT
|
|
||||||
rx
|
|
||||||
schandle
|
|
||||||
semver
|
|
||||||
serializer
|
|
||||||
shobjidl
|
|
||||||
SHOWMINIMIZED
|
|
||||||
SIZENS
|
|
||||||
smoothstep
|
|
||||||
GETDESKWALLPAPER
|
|
||||||
SHELLEXECUTEINFOW
|
|
||||||
snprintf
|
|
||||||
spsc
|
|
||||||
sregex
|
|
||||||
STDCPP
|
|
||||||
strchr
|
|
||||||
Subheader
|
|
||||||
Subpage
|
|
||||||
UPDATEINIFILE
|
|
||||||
syscall
|
|
||||||
TBPF
|
|
||||||
THEMECHANGED
|
|
||||||
tmp
|
|
||||||
tolower
|
|
||||||
TTask
|
|
||||||
TVal
|
|
||||||
tx
|
|
||||||
UPDATEINIFILE
|
|
||||||
userenv
|
|
||||||
wcsstr
|
|
||||||
wcstoui
|
|
||||||
wpc
|
|
||||||
wsregex
|
|
||||||
XDocument
|
|
||||||
XElement
|
|
||||||
xlocmes
|
|
||||||
xlocmon
|
|
||||||
xlocnum
|
|
||||||
xloctime
|
|
||||||
XParse
|
|
||||||
xstring
|
|
||||||
782
.github/actions/spelling/dictionary/colors.txt
vendored
782
.github/actions/spelling/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
|
|
||||||
479851
.github/actions/spelling/dictionary/dictionary.txt
vendored
479851
.github/actions/spelling/dictionary/dictionary.txt
vendored
File diff suppressed because it is too large
Load Diff
3
.github/actions/spelling/dictionary/math.txt
vendored
3
.github/actions/spelling/dictionary/math.txt
vendored
@@ -1,3 +0,0 @@
|
|||||||
powf
|
|
||||||
sqrtf
|
|
||||||
isnan
|
|
||||||
75
.github/actions/spelling/excludes.txt
vendored
75
.github/actions/spelling/excludes.txt
vendored
@@ -1,27 +1,39 @@
|
|||||||
|
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
|
||||||
|
(?:(?i)\.png$)
|
||||||
|
(?:^|/)(?i)COPYRIGHT
|
||||||
|
(?:^|/)(?i)LICEN[CS]E
|
||||||
|
(?:^|/)3rdparty/
|
||||||
(?:^|/)dirs$
|
(?:^|/)dirs$
|
||||||
(?:^|/)go\.mod$
|
(?:^|/)go\.mod$
|
||||||
(?:^|/)go\.sum$
|
(?:^|/)go\.sum$
|
||||||
(?:^|/)package-lock\.json$
|
(?:^|/)package(?:-lock|)\.json$
|
||||||
(?:^|/)sources(?:|\.dep)$
|
(?:^|/)sources(?:|\.dep)$
|
||||||
SUMS$
|
(?:^|/)vendor/
|
||||||
|
\.a$
|
||||||
\.ai$
|
\.ai$
|
||||||
|
\.avi$
|
||||||
\.bmp$
|
\.bmp$
|
||||||
|
\.bz2$
|
||||||
\.cer$
|
\.cer$
|
||||||
\.class$
|
\.class$
|
||||||
\.crl$
|
\.crl$
|
||||||
\.crt$
|
\.crt$
|
||||||
\.csr$
|
\.csr$
|
||||||
\.dll$
|
\.dll$
|
||||||
|
\.docx?$
|
||||||
|
\.drawio$
|
||||||
\.DS_Store$
|
\.DS_Store$
|
||||||
\.eot$
|
\.eot$
|
||||||
\.eps$
|
\.eps$
|
||||||
\.exe$
|
\.exe$
|
||||||
\.gif$
|
\.gif$
|
||||||
|
\.gitattributes$
|
||||||
\.graffle$
|
\.graffle$
|
||||||
\.gz$
|
\.gz$
|
||||||
\.icns$
|
\.icns$
|
||||||
\.ico$
|
\.ico$
|
||||||
\.jar$
|
\.jar$
|
||||||
|
\.jks$
|
||||||
\.jpeg$
|
\.jpeg$
|
||||||
\.jpg$
|
\.jpg$
|
||||||
\.key$
|
\.key$
|
||||||
@@ -29,38 +41,77 @@ SUMS$
|
|||||||
\.lock$
|
\.lock$
|
||||||
\.map$
|
\.map$
|
||||||
\.min\..
|
\.min\..
|
||||||
|
\.mod$
|
||||||
\.mp3$
|
\.mp3$
|
||||||
\.mp4$
|
\.mp4$
|
||||||
|
\.o$
|
||||||
|
\.ocf$
|
||||||
\.otf$
|
\.otf$
|
||||||
\.pbxproj$
|
\.pbxproj$
|
||||||
\.pdf$
|
\.pdf$
|
||||||
\.pem$
|
\.pem$
|
||||||
(?:(?i)\.png$)
|
\.png$
|
||||||
\.psd$
|
\.psd$
|
||||||
|
\.pyc$
|
||||||
\.runsettings$
|
\.runsettings$
|
||||||
|
\.s$
|
||||||
\.sig$
|
\.sig$
|
||||||
\.so$
|
\.so$
|
||||||
\.svg$
|
\.svg$
|
||||||
\.svgz$
|
\.svgz$
|
||||||
|
\.svgz?$
|
||||||
\.tar$
|
\.tar$
|
||||||
\.tgz$
|
\.tgz$
|
||||||
|
\.tiff?$
|
||||||
\.ttf$
|
\.ttf$
|
||||||
\.vsdx$
|
\.vsdx$
|
||||||
|
\.wav$
|
||||||
|
\.webm$
|
||||||
|
\.webp$
|
||||||
\.woff
|
\.woff
|
||||||
|
\.woff2?$
|
||||||
\.xcf$
|
\.xcf$
|
||||||
\.xls
|
\.xls
|
||||||
|
\.xlsx?$
|
||||||
\.xpm$
|
\.xpm$
|
||||||
\.yml$
|
\.yml$
|
||||||
\.zip$
|
\.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$
|
^consolegit2gitfilters\.json$
|
||||||
^dep/
|
^dep/
|
||||||
^oss/
|
|
||||||
^doc/reference/UTF8-torture-test\.txt$
|
|
||||||
^src/interactivity/onecore/BgfxEngine\.
|
|
||||||
^src/renderer/wddmcon/WddmConRenderer\.
|
|
||||||
^src/terminal/parser/ft_fuzzer/VTCommandFuzzer\.cpp$
|
|
||||||
^src/types/ut_types/UtilsTests.cpp$
|
|
||||||
^src/tools/U8U16Test/(?:fr|ru|zh)\.txt$
|
|
||||||
^\.github/actions/spelling/
|
|
||||||
^\.gitignore$
|
|
||||||
^doc/reference/master-sequence-list.csv$
|
^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$
|
||||||
|
|||||||
21
.github/actions/spelling/expect/alphabet.txt
vendored
21
.github/actions/spelling/expect/alphabet.txt
vendored
@@ -1,16 +1,23 @@
|
|||||||
|
AAAa
|
||||||
|
AAAAA
|
||||||
|
AAAAAAAAAAAAA
|
||||||
|
AAAAAABBBBBBCCC
|
||||||
|
AAAAABBBBBBCCC
|
||||||
|
abcd
|
||||||
abcd
|
abcd
|
||||||
abcde
|
|
||||||
abcdef
|
|
||||||
ABCDEFG
|
|
||||||
ABCDEFGH
|
|
||||||
ABCDEFGHIJ
|
ABCDEFGHIJ
|
||||||
abcdefghijk
|
abcdefghijk
|
||||||
|
ABCDEFGHIJKLMNO
|
||||||
abcdefghijklmnop
|
abcdefghijklmnop
|
||||||
ABCDEFGHIJKLMNOPQRST
|
ABCDEFGHIJKLMNOPQRST
|
||||||
abcdefghijklmnopqrstuvwxyz
|
ABCG
|
||||||
ABE
|
ABE
|
||||||
|
abf
|
||||||
|
BBBBB
|
||||||
|
BBBBBBBB
|
||||||
|
BBBBBCCC
|
||||||
|
BBBBCCCCC
|
||||||
BBGGRR
|
BBGGRR
|
||||||
BBBBBBBBBBBBBBDDDD
|
|
||||||
EFG
|
EFG
|
||||||
EFGh
|
EFGh
|
||||||
QQQQQQQQQQABCDEFGHIJ
|
QQQQQQQQQQABCDEFGHIJ
|
||||||
@@ -19,7 +26,6 @@ QQQQQQQQQQABCDEFGHIJKLMNOPQRSTQQQQQQQQQQ
|
|||||||
QQQQQQQQQQABCDEFGHIJPQRSTQQQQQQQQQQ
|
QQQQQQQQQQABCDEFGHIJPQRSTQQQQQQQQQQ
|
||||||
qrstuvwxyz
|
qrstuvwxyz
|
||||||
qwerty
|
qwerty
|
||||||
QWERTYUIOP
|
|
||||||
qwertyuiopasdfg
|
qwertyuiopasdfg
|
||||||
YYYYYYYDDDDDDDDDDD
|
YYYYYYYDDDDDDDDDDD
|
||||||
ZAAZZ
|
ZAAZZ
|
||||||
@@ -31,3 +37,4 @@ ZYXWVUT
|
|||||||
ZZBBZ
|
ZZBBZ
|
||||||
ZZZBB
|
ZZZBB
|
||||||
ZZZBZ
|
ZZZBZ
|
||||||
|
ZZZZZ
|
||||||
|
|||||||
1083
.github/actions/spelling/expect/expect.txt
vendored
1083
.github/actions/spelling/expect/expect.txt
vendored
File diff suppressed because it is too large
Load Diff
16
.github/actions/spelling/expect/web.txt
vendored
16
.github/actions/spelling/expect/web.txt
vendored
@@ -1,18 +1,6 @@
|
|||||||
http
|
|
||||||
td
|
|
||||||
www
|
|
||||||
ecma
|
|
||||||
rapidtables
|
|
||||||
WCAG
|
WCAG
|
||||||
freedesktop
|
|
||||||
ycombinator
|
|
||||||
robertelder
|
|
||||||
kovidgoyal
|
|
||||||
leonerd
|
|
||||||
fixterms
|
|
||||||
uk
|
|
||||||
winui
|
winui
|
||||||
appshellintegration
|
appshellintegration
|
||||||
cppreference
|
mdtauk
|
||||||
gfycat
|
gfycat
|
||||||
what3words
|
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
|
||||||
88
.github/actions/spelling/patterns/patterns.txt
vendored
88
.github/actions/spelling/patterns/patterns.txt
vendored
@@ -1,11 +1,6 @@
|
|||||||
https://(?:(?:[-a-zA-Z0-9?&=]*\.|)microsoft\.com)/[-a-zA-Z0-9?&=_#\/.]*
|
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns
|
||||||
https://aka\.ms/[-a-zA-Z0-9?&=\/_]*
|
|
||||||
https://www\.itscj\.ipsj\.or\.jp/iso-ir/[-0-9]+\.pdf
|
https?://\S+
|
||||||
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-]+\.|)github(?:usercontent|)\.com/[-a-zA-Z0-9?%&=_\/.]*
|
|
||||||
https://www.xfree86.org/[-a-zA-Z0-9?&=\/_#]*
|
|
||||||
[Pp]ublicKeyToken="?[0-9a-fA-F]{16}"?
|
[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)
|
(?:[{"]|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
|
(?:0[Xx]|\\x|U\+|#)[a-f0-9A-FGgRr]{2,}[Uu]?[Ll]{0,2}\b
|
||||||
@@ -22,3 +17,80 @@ Base64::s_(?:En|De)code\(L"[^"]+"
|
|||||||
VERIFY_ARE_EQUAL\(L"[^"]+"
|
VERIFY_ARE_EQUAL\(L"[^"]+"
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+/"
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+/"
|
||||||
std::memory_order_[\w]+
|
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.*
|
||||||
15
.github/workflows/spelling.yml
vendored
15
.github/workflows/spelling.yml
vendored
@@ -1,15 +0,0 @@
|
|||||||
name: Spell checking
|
|
||||||
on:
|
|
||||||
pull_request_target:
|
|
||||||
push:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
name: Spell checking
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2.0.0
|
|
||||||
with:
|
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
|
||||||
fetch-depth: 5
|
|
||||||
- uses: check-spelling/check-spelling@0.0.17-alpha
|
|
||||||
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 }}
|
||||||
15
.vscode/settings.json
vendored
15
.vscode/settings.json
vendored
@@ -21,7 +21,20 @@
|
|||||||
"xloctime": "cpp",
|
"xloctime": "cpp",
|
||||||
"multi_span": "cpp",
|
"multi_span": "cpp",
|
||||||
"pointers": "cpp",
|
"pointers": "cpp",
|
||||||
"vector": "cpp"
|
"vector": "cpp",
|
||||||
|
"bitset": "cpp",
|
||||||
|
"deque": "cpp",
|
||||||
|
"initializer_list": "cpp",
|
||||||
|
"list": "cpp",
|
||||||
|
"queue": "cpp",
|
||||||
|
"random": "cpp",
|
||||||
|
"regex": "cpp",
|
||||||
|
"stack": "cpp",
|
||||||
|
"xhash": "cpp",
|
||||||
|
"xtree": "cpp",
|
||||||
|
"xutility": "cpp",
|
||||||
|
"span": "cpp",
|
||||||
|
"string_span": "cpp"
|
||||||
},
|
},
|
||||||
"files.exclude": {
|
"files.exclude": {
|
||||||
"**/bin/**": true,
|
"**/bin/**": true,
|
||||||
|
|||||||
7
.vscode/tasks.json
vendored
7
.vscode/tasks.json
vendored
@@ -9,7 +9,7 @@
|
|||||||
"-Command",
|
"-Command",
|
||||||
"Import-Module ${workspaceFolder}\\tools\\OpenConsole.psm1;",
|
"Import-Module ${workspaceFolder}\\tools\\OpenConsole.psm1;",
|
||||||
"Set-MsBuildDevEnvironment;",
|
"Set-MsBuildDevEnvironment;",
|
||||||
"$project = switch(\"${input:buildProjectChoice}\"){OpenConsole{\"Conhost\\Host_EXE\"} Terminal{\"Terminal\\CascadiaPackage\"}};",
|
"$project = switch(\"${input:buildProjectChoice}\"){OpenConsole{\"Conhost\\Host_EXE\"} Terminal{\"Terminal\\CascadiaPackage\"} TermControl{\"Terminal\\TerminalControl\"}};",
|
||||||
"$target = switch(\"${input:buildModeChoice}\"){Build{\"\"} Rebuild{\":Rebuild\"} Clean{\":Clean\"}};",
|
"$target = switch(\"${input:buildModeChoice}\"){Build{\"\"} Rebuild{\":Rebuild\"} Clean{\":Clean\"}};",
|
||||||
"$target = $project + $target;",
|
"$target = $project + $target;",
|
||||||
"msbuild",
|
"msbuild",
|
||||||
@@ -98,10 +98,11 @@
|
|||||||
"description": "OpenConsole or Terminal?",
|
"description": "OpenConsole or Terminal?",
|
||||||
"options":[
|
"options":[
|
||||||
"OpenConsole",
|
"OpenConsole",
|
||||||
"Terminal"
|
"Terminal",
|
||||||
|
"TermControl"
|
||||||
],
|
],
|
||||||
"default": "Terminal"
|
"default": "Terminal"
|
||||||
}
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
105
OpenConsole.sln
105
OpenConsole.sln
@@ -317,6 +317,24 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WpfTerminalTestNetCore", "s
|
|||||||
{84848BFA-931D-42CE-9ADF-01EE54DE7890} = {84848BFA-931D-42CE-9ADF-01EE54DE7890}
|
{84848BFA-931D-42CE-9ADF-01EE54DE7890} = {84848BFA-931D-42CE-9ADF-01EE54DE7890}
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ScratchWinRTServer", "src\tools\ScratchWinRTServer\ScratchWinRTServer.vcxproj", "{D46D9547-F085-4645-B8F7-E8CD21559AB4}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B} = {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}
|
||||||
|
{CA5CAD1A-ABCD-429C-B551-8562EC954746} = {CA5CAD1A-ABCD-429C-B551-8562EC954746}
|
||||||
|
{CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907} = {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}
|
||||||
|
{48D21369-3D7B-4431-9967-24E81292CF62} = {48D21369-3D7B-4431-9967-24E81292CF62}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ScratchWinRTClient", "src\tools\ScratchWinRTClient\ScratchWinRTClient.vcxproj", "{06382349-D62A-4C7D-A7D3-9CA817EAE092}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4} = {D46D9547-F085-4645-B8F7-E8CD21559AB4}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ScratchIsland", "src\tools\ScratchIsland\ScratchIsland.vcxproj", "{23A1F736-CD19-4196-980F-84BCD50CF783}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4} = {D46D9547-F085-4645-B8F7-E8CD21559AB4}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wt", "src\cascadia\wt\wt.vcxproj", "{506FD703-BAA7-4F6E-9361-64F550EC8FCA}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wt", "src\cascadia\wt\wt.vcxproj", "{506FD703-BAA7-4F6E-9361-64F550EC8FCA}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.Terminal.Settings.Editor", "src\cascadia\TerminalSettingsEditor\Microsoft.Terminal.Settings.Editor.vcxproj", "{CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.Terminal.Settings.Editor", "src\cascadia\TerminalSettingsEditor\Microsoft.Terminal.Settings.Editor.vcxproj", "{CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}"
|
||||||
@@ -2223,6 +2241,90 @@ Global
|
|||||||
{1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|DotNet_x86Test.Build.0 = Release|x86
|
{1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|DotNet_x86Test.Build.0 = Release|x86
|
||||||
{1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|x64.ActiveCfg = Release|Any CPU
|
{1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
{1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|x86.ActiveCfg = Release|Any CPU
|
{1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.AuditMode|Any CPU.ActiveCfg = Release|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.AuditMode|Any CPU.Build.0 = Release|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.AuditMode|ARM64.ActiveCfg = Release|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.AuditMode|ARM64.Build.0 = Release|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.AuditMode|DotNet_x64Test.ActiveCfg = Release|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.AuditMode|DotNet_x64Test.Build.0 = Release|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.AuditMode|DotNet_x86Test.ActiveCfg = Release|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.AuditMode|DotNet_x86Test.Build.0 = Release|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.AuditMode|x64.ActiveCfg = Release|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.AuditMode|x64.Build.0 = Release|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.AuditMode|x86.ActiveCfg = Release|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.AuditMode|x86.Build.0 = Release|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Debug|ARM64.ActiveCfg = Debug|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Release|ARM64.ActiveCfg = Release|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Release|DotNet_x64Test.ActiveCfg = Release|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Release|DotNet_x86Test.ActiveCfg = Release|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Release|x64.Build.0 = Release|x64
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.AuditMode|Any CPU.ActiveCfg = Release|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.AuditMode|Any CPU.Build.0 = Release|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.AuditMode|ARM64.ActiveCfg = Release|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.AuditMode|ARM64.Build.0 = Release|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.AuditMode|DotNet_x64Test.ActiveCfg = Release|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.AuditMode|DotNet_x64Test.Build.0 = Release|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.AuditMode|DotNet_x86Test.ActiveCfg = Release|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.AuditMode|DotNet_x86Test.Build.0 = Release|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.AuditMode|x64.ActiveCfg = Release|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.AuditMode|x64.Build.0 = Release|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.AuditMode|x86.ActiveCfg = Release|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.AuditMode|x86.Build.0 = Release|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Debug|ARM64.ActiveCfg = Debug|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Release|ARM64.ActiveCfg = Release|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Release|DotNet_x64Test.ActiveCfg = Release|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Release|DotNet_x86Test.ActiveCfg = Release|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Release|x64.Build.0 = Release|x64
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092}.Release|x86.Build.0 = Release|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.AuditMode|Any CPU.ActiveCfg = Release|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.AuditMode|Any CPU.Build.0 = Release|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.AuditMode|ARM64.ActiveCfg = Release|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.AuditMode|ARM64.Build.0 = Release|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.AuditMode|DotNet_x64Test.ActiveCfg = Release|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.AuditMode|DotNet_x64Test.Build.0 = Release|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.AuditMode|DotNet_x86Test.ActiveCfg = Release|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.AuditMode|DotNet_x86Test.Build.0 = Release|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.AuditMode|x64.ActiveCfg = Release|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.AuditMode|x64.Build.0 = Release|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.AuditMode|x86.ActiveCfg = Release|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.AuditMode|x86.Build.0 = Release|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Debug|ARM64.ActiveCfg = Debug|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Release|ARM64.ActiveCfg = Release|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Release|DotNet_x64Test.ActiveCfg = Release|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Release|DotNet_x86Test.ActiveCfg = Release|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Release|x64.Build.0 = Release|x64
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783}.Release|x86.Build.0 = Release|Win32
|
||||||
{506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32
|
{506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32
|
||||||
{506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|ARM.ActiveCfg = AuditMode|Win32
|
{506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|ARM.ActiveCfg = AuditMode|Win32
|
||||||
{506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64
|
{506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64
|
||||||
@@ -2650,6 +2752,9 @@ Global
|
|||||||
{024052DE-83FB-4653-AEA4-90790D29D5BD} = {E8F24881-5E37-4362-B191-A3BA0ED7F4EB}
|
{024052DE-83FB-4653-AEA4-90790D29D5BD} = {E8F24881-5E37-4362-B191-A3BA0ED7F4EB}
|
||||||
{067F0A06-FCB7-472C-96E9-B03B54E8E18D} = {59840756-302F-44DF-AA47-441A9D673202}
|
{067F0A06-FCB7-472C-96E9-B03B54E8E18D} = {59840756-302F-44DF-AA47-441A9D673202}
|
||||||
{6BAE5851-50D5-4934-8D5E-30361A8A40F3} = {81C352DB-1818-45B7-A284-18E259F1CC87}
|
{6BAE5851-50D5-4934-8D5E-30361A8A40F3} = {81C352DB-1818-45B7-A284-18E259F1CC87}
|
||||||
|
{23A1F736-CD19-4196-980F-84BCD50CF783} = {A10C4720-DCA4-4640-9749-67F4314F527C}
|
||||||
|
{06382349-D62A-4C7D-A7D3-9CA817EAE092} = {A10C4720-DCA4-4640-9749-67F4314F527C}
|
||||||
|
{D46D9547-F085-4645-B8F7-E8CD21559AB4} = {A10C4720-DCA4-4640-9749-67F4314F527C}
|
||||||
{1588FD7C-241E-4E7D-9113-43735F3E6BAD} = {4DAF0299-495E-4CD1-A982-9BAC16A45932}
|
{1588FD7C-241E-4E7D-9113-43735F3E6BAD} = {4DAF0299-495E-4CD1-A982-9BAC16A45932}
|
||||||
{506FD703-BAA7-4F6E-9361-64F550EC8FCA} = {59840756-302F-44DF-AA47-441A9D673202}
|
{506FD703-BAA7-4F6E-9361-64F550EC8FCA} = {59840756-302F-44DF-AA47-441A9D673202}
|
||||||
{CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32} = {59840756-302F-44DF-AA47-441A9D673202}
|
{CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32} = {59840756-302F-44DF-AA47-441A9D673202}
|
||||||
|
|||||||
@@ -2349,8 +2349,9 @@ namespace winrt::TerminalApp::implementation
|
|||||||
// Arguments:
|
// Arguments:
|
||||||
// - sender (not used)
|
// - sender (not used)
|
||||||
// - eventArgs: the arguments specifying how to set the progress indicator
|
// - eventArgs: the arguments specifying how to set the progress indicator
|
||||||
void TerminalPage::_SetTaskbarProgressHandler(const IInspectable /*sender*/, const IInspectable /*eventArgs*/)
|
winrt::fire_and_forget TerminalPage::_SetTaskbarProgressHandler(const IInspectable /*sender*/, const IInspectable /*eventArgs*/)
|
||||||
{
|
{
|
||||||
|
co_await resume_foreground(Dispatcher());
|
||||||
_setTaskbarProgressHandlers(*this, nullptr);
|
_setTaskbarProgressHandlers(*this, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -167,7 +167,17 @@ namespace winrt::TerminalApp::implementation
|
|||||||
if (lastFocusedControl)
|
if (lastFocusedControl)
|
||||||
{
|
{
|
||||||
lastFocusedControl.Focus(_focusState);
|
lastFocusedControl.Focus(_focusState);
|
||||||
lastFocusedControl.TaskbarProgressChanged();
|
// !!TODO!!: This is weird: The tab calls a method on the
|
||||||
|
// control to cause the control to raise an event to the page to
|
||||||
|
// the app logic
|
||||||
|
//
|
||||||
|
// TermControl \v
|
||||||
|
// /^ TerminalPage \v
|
||||||
|
// TerminalTab /^ AppLogic \v
|
||||||
|
// AppHost
|
||||||
|
// Seems like there's a better way...
|
||||||
|
//
|
||||||
|
// lastFocusedControl.TaskbarProgressChanged();
|
||||||
}
|
}
|
||||||
// When we gain focus, remove the bell indicator if it is active
|
// When we gain focus, remove the bell indicator if it is active
|
||||||
if (_tabStatus.BellIndicator())
|
if (_tabStatus.BellIndicator())
|
||||||
|
|||||||
1259
src/cascadia/TerminalControl/ControlCore.cpp
Normal file
1259
src/cascadia/TerminalControl/ControlCore.cpp
Normal file
File diff suppressed because it is too large
Load Diff
213
src/cascadia/TerminalControl/ControlCore.h
Normal file
213
src/cascadia/TerminalControl/ControlCore.h
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "EventArgs.h"
|
||||||
|
#include "ControlCore.g.h"
|
||||||
|
#include <winrt/Microsoft.Terminal.TerminalConnection.h>
|
||||||
|
#include "../../renderer/base/Renderer.hpp"
|
||||||
|
#include "../../renderer/dx/DxRenderer.hpp"
|
||||||
|
#include "../../renderer/uia/UiaRenderer.hpp"
|
||||||
|
#include "../../cascadia/TerminalCore/Terminal.hpp"
|
||||||
|
#include "../buffer/out/search.h"
|
||||||
|
#include "cppwinrt_utils.h"
|
||||||
|
#include "ThrottledFunc.h"
|
||||||
|
|
||||||
|
namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
||||||
|
{
|
||||||
|
struct ControlCore : ControlCoreT<ControlCore>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ControlCore(IControlSettings settings, TerminalConnection::ITerminalConnection connection);
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// These members are taken from TermControl
|
||||||
|
|
||||||
|
bool _initializedTerminal;
|
||||||
|
|
||||||
|
TerminalConnection::ITerminalConnection _connection;
|
||||||
|
event_token _connectionOutputEventToken;
|
||||||
|
TerminalConnection::ITerminalConnection::StateChanged_revoker _connectionStateChangedRevoker;
|
||||||
|
|
||||||
|
std::unique_ptr<::Microsoft::Terminal::Core::Terminal> _terminal;
|
||||||
|
std::unique_ptr<::Microsoft::Console::Render::Renderer> _renderer;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<::Microsoft::Console::Render::DxEngine> _renderEngine;
|
||||||
|
|
||||||
|
IControlSettings _settings; // ? Might be able to get away with only retrieving pieces
|
||||||
|
|
||||||
|
FontInfoDesired _desiredFont;
|
||||||
|
FontInfo _actualFont;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// storage location for the leading surrogate of a utf-16 surrogate pair
|
||||||
|
std::optional<wchar_t> _leadingSurrogate;
|
||||||
|
|
||||||
|
bool _isReadOnly{ false }; // ?
|
||||||
|
|
||||||
|
std::optional<COORD> _lastHoveredCell;
|
||||||
|
// Track the last hyperlink ID we hovered over
|
||||||
|
uint16_t _lastHoveredId;
|
||||||
|
|
||||||
|
std::optional<interval_tree::IntervalTree<til::point, size_t>::interval> _lastHoveredInterval;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// These members are new
|
||||||
|
double _panelWidth;
|
||||||
|
double _panelHeight;
|
||||||
|
double _compositionScaleX;
|
||||||
|
double _compositionScaleY;
|
||||||
|
til::color _backgroundColor; // This is _in_ Terminal already!
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// These methods are taken from TermControl
|
||||||
|
bool InitializeTerminal(const double actualWidth,
|
||||||
|
const double actualHeight,
|
||||||
|
const double compositionScaleX,
|
||||||
|
const double compositionScaleY);
|
||||||
|
|
||||||
|
void _SetFontSize(int fontSize);
|
||||||
|
void _UpdateFont(const bool initialUpdate = false);
|
||||||
|
void AdjustFontSize(int fontSizeDelta);
|
||||||
|
void ResetFontSize();
|
||||||
|
void _RefreshSizeUnderLock();
|
||||||
|
void _DoResizeUnderLock(const double newWidth,
|
||||||
|
const double newHeight);
|
||||||
|
|
||||||
|
void _SendInputToConnection(const winrt::hstring& wstr);
|
||||||
|
void _SendInputToConnection(std::wstring_view wstr);
|
||||||
|
|
||||||
|
void SendInput(const winrt::hstring& wstr);
|
||||||
|
void ToggleShaderEffects();
|
||||||
|
void UpdatePatternLocations();
|
||||||
|
void UpdateHoveredCell(const std::optional<COORD>& terminalPosition);
|
||||||
|
|
||||||
|
void SetSelectionAnchor(winrt::Windows::Foundation::Point const& position);
|
||||||
|
void SetEndSelectionPoint(winrt::Windows::Foundation::Point const& position);
|
||||||
|
bool CopySelectionToClipboard(bool singleLine, const Windows::Foundation::IReference<CopyFormat>& formats);
|
||||||
|
|
||||||
|
::Microsoft::Console::Types::IUiaData* GetUiaData() const;
|
||||||
|
|
||||||
|
winrt::fire_and_forget _AsyncCloseConnection();
|
||||||
|
void Close();
|
||||||
|
|
||||||
|
#pragma region ICoreState
|
||||||
|
// existing
|
||||||
|
Windows::Foundation::IReference<winrt::Windows::UI::Color> TabColor() noexcept;
|
||||||
|
const size_t TaskbarState() const noexcept;
|
||||||
|
const size_t TaskbarProgress() const noexcept;
|
||||||
|
hstring Title();
|
||||||
|
hstring WorkingDirectory() const;
|
||||||
|
TerminalConnection::ConnectionState ConnectionState() const;
|
||||||
|
// new
|
||||||
|
int ScrollOffset();
|
||||||
|
int ViewHeight() const;
|
||||||
|
int BufferHeight() const;
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
|
#pragma region TerminalCoreCallbacks
|
||||||
|
void _TerminalCopyToClipboard(const std::wstring_view& wstr);
|
||||||
|
void _TerminalWarningBell();
|
||||||
|
void _TerminalTitleChanged(const std::wstring_view& wstr);
|
||||||
|
void _TerminalTabColorChanged(const std::optional<til::color> color);
|
||||||
|
void _TerminalBackgroundColorChanged(const COLORREF color);
|
||||||
|
void _TerminalScrollPositionChanged(const int viewTop,
|
||||||
|
const int viewHeight,
|
||||||
|
const int bufferSize);
|
||||||
|
void _TerminalCursorPositionChanged();
|
||||||
|
void _TerminalTaskbarProgressChanged();
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
|
#pragma region RendererCallbacks
|
||||||
|
void _RendererWarning(const HRESULT hr);
|
||||||
|
void RenderEngineSwapChainChanged();
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
|
TYPED_EVENT(CopyToClipboard, IInspectable, TerminalControl::CopyToClipboardEventArgs);
|
||||||
|
|
||||||
|
TYPED_EVENT(TitleChanged, IInspectable, TerminalControl::TitleChangedEventArgs);
|
||||||
|
TYPED_EVENT(WarningBell, IInspectable, IInspectable);
|
||||||
|
TYPED_EVENT(TabColorChanged, IInspectable, IInspectable);
|
||||||
|
TYPED_EVENT(BackgroundColorChanged, IInspectable, IInspectable);
|
||||||
|
TYPED_EVENT(ScrollPositionChanged, IInspectable, TerminalControl::ScrollPositionChangedArgs);
|
||||||
|
TYPED_EVENT(CursorPositionChanged, IInspectable, IInspectable);
|
||||||
|
TYPED_EVENT(TaskbarProgressChanged, IInspectable, IInspectable);
|
||||||
|
TYPED_EVENT(ConnectionStateChanged, IInspectable, IInspectable);
|
||||||
|
|
||||||
|
public:
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// These methods are new
|
||||||
|
void UpdateSettings(const IControlSettings& settings);
|
||||||
|
|
||||||
|
void SizeChanged(const double width, const double height);
|
||||||
|
void ScaleChanged(const double scaleX, const double scaleY);
|
||||||
|
float RendererScale() const;
|
||||||
|
|
||||||
|
void _raiseHoveredHyperlinkChanged();
|
||||||
|
winrt::hstring GetHyperlink(const til::point position) const;
|
||||||
|
winrt::hstring GetHoveredUriText() const;
|
||||||
|
std::optional<COORD> GetHoveredCell() const;
|
||||||
|
|
||||||
|
void PasteText(const winrt::hstring& hstr);
|
||||||
|
|
||||||
|
FontInfo GetFont() const;
|
||||||
|
til::color BackgroundColor() const;
|
||||||
|
|
||||||
|
bool HasSelection() const;
|
||||||
|
std::vector<std::wstring> SelectedText(bool trimTrailingWhitespace) const;
|
||||||
|
|
||||||
|
void Search(const winrt::hstring& text,
|
||||||
|
const bool goForward,
|
||||||
|
const bool caseSensitive);
|
||||||
|
|
||||||
|
void SetBackgroundOpacity(const float opacity);
|
||||||
|
|
||||||
|
#pragma region ITerminalInputButNotReally
|
||||||
|
bool TrySendKeyEvent(const WORD vkey,
|
||||||
|
const WORD scanCode,
|
||||||
|
const ::Microsoft::Terminal::Core::ControlKeyStates modifiers,
|
||||||
|
const bool eitherWinPressed,
|
||||||
|
const bool keyDown);
|
||||||
|
bool SendCharEvent(const wchar_t ch,
|
||||||
|
const WORD scanCode,
|
||||||
|
const ::Microsoft::Terminal::Core::ControlKeyStates modifiers);
|
||||||
|
bool SendMouseEvent(const COORD viewportPos,
|
||||||
|
const unsigned int uiButton,
|
||||||
|
const ::Microsoft::Terminal::Core::ControlKeyStates states,
|
||||||
|
const short wheelDelta,
|
||||||
|
const ::Microsoft::Console::VirtualTerminal::TerminalInput::MouseButtonState state);
|
||||||
|
void UserScrollViewport(const int viewTop);
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
|
HANDLE GetSwapChainHandle() const;
|
||||||
|
|
||||||
|
void BlinkAttributeTick();
|
||||||
|
void BlinkCursor();
|
||||||
|
bool CursorOn() const;
|
||||||
|
void CursorOn(const bool isCursorOn);
|
||||||
|
|
||||||
|
void ResumeRendering();
|
||||||
|
bool IsVtMouseModeEnabled() const;
|
||||||
|
til::point CursorPosition() const;
|
||||||
|
|
||||||
|
void LeftClickOnTerminal(const til::point terminalPosition,
|
||||||
|
const int numberOfClicks,
|
||||||
|
const bool altEnabled,
|
||||||
|
const bool shiftEnabled,
|
||||||
|
const bool isOnOriginalPosition,
|
||||||
|
bool& selectionNeedsToBeCopied);
|
||||||
|
|
||||||
|
TYPED_EVENT(HoveredHyperlinkChanged, IInspectable, IInspectable);
|
||||||
|
|
||||||
|
TYPED_EVENT(SwapChainChanged, IInspectable, IInspectable);
|
||||||
|
TYPED_EVENT(RendererWarning, IInspectable, TerminalControl::RendererWarningArgs);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace winrt::Microsoft::Terminal::TerminalControl::factory_implementation
|
||||||
|
{
|
||||||
|
BASIC_FACTORY(ControlCore);
|
||||||
|
}
|
||||||
16
src/cascadia/TerminalControl/ControlCore.idl
Normal file
16
src/cascadia/TerminalControl/ControlCore.idl
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
import "ICoreState.idl";
|
||||||
|
import "IControlSettings.idl";
|
||||||
|
import "EventArgs.idl";
|
||||||
|
|
||||||
|
namespace Microsoft.Terminal.TerminalControl
|
||||||
|
{
|
||||||
|
|
||||||
|
[default_interface] runtimeclass ControlCore : ICoreState
|
||||||
|
{
|
||||||
|
ControlCore(Microsoft.Terminal.TerminalControl.IControlSettings settings,
|
||||||
|
Microsoft.Terminal.TerminalConnection.ITerminalConnection connection);
|
||||||
|
};
|
||||||
|
}
|
||||||
12
src/cascadia/TerminalControl/EventArgs.cpp
Normal file
12
src/cascadia/TerminalControl/EventArgs.cpp
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
#include "pch.h"
|
||||||
|
#include "EventArgs.h"
|
||||||
|
#include "TitleChangedEventArgs.g.cpp"
|
||||||
|
#include "CopyToClipboardEventArgs.g.cpp"
|
||||||
|
#include "PasteFromClipboardEventArgs.g.cpp"
|
||||||
|
#include "OpenHyperlinkEventArgs.g.cpp"
|
||||||
|
#include "NoticeEventArgs.g.cpp"
|
||||||
|
#include "ScrollPositionChangedArgs.g.cpp"
|
||||||
|
#include "RendererWarningArgs.g.cpp"
|
||||||
129
src/cascadia/TerminalControl/EventArgs.h
Normal file
129
src/cascadia/TerminalControl/EventArgs.h
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "TitleChangedEventArgs.g.h"
|
||||||
|
#include "CopyToClipboardEventArgs.g.h"
|
||||||
|
#include "PasteFromClipboardEventArgs.g.h"
|
||||||
|
#include "OpenHyperlinkEventArgs.g.h"
|
||||||
|
#include "NoticeEventArgs.g.h"
|
||||||
|
#include "ScrollPositionChangedArgs.g.h"
|
||||||
|
#include "RendererWarningArgs.g.h"
|
||||||
|
#include "cppwinrt_utils.h"
|
||||||
|
|
||||||
|
namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
||||||
|
{
|
||||||
|
struct TitleChangedEventArgs :
|
||||||
|
public TitleChangedEventArgsT<TitleChangedEventArgs>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TitleChangedEventArgs(hstring title) :
|
||||||
|
_Title(title) {}
|
||||||
|
|
||||||
|
WINRT_PROPERTY(hstring, Title);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CopyToClipboardEventArgs :
|
||||||
|
public CopyToClipboardEventArgsT<CopyToClipboardEventArgs>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CopyToClipboardEventArgs(hstring text) :
|
||||||
|
_text(text),
|
||||||
|
_html(),
|
||||||
|
_rtf(),
|
||||||
|
_formats(static_cast<CopyFormat>(0)) {}
|
||||||
|
|
||||||
|
CopyToClipboardEventArgs(hstring text, hstring html, hstring rtf, Windows::Foundation::IReference<CopyFormat> formats) :
|
||||||
|
_text(text),
|
||||||
|
_html(html),
|
||||||
|
_rtf(rtf),
|
||||||
|
_formats(formats) {}
|
||||||
|
|
||||||
|
hstring Text() { return _text; };
|
||||||
|
hstring Html() { return _html; };
|
||||||
|
hstring Rtf() { return _rtf; };
|
||||||
|
Windows::Foundation::IReference<CopyFormat> Formats() { return _formats; };
|
||||||
|
|
||||||
|
private:
|
||||||
|
hstring _text;
|
||||||
|
hstring _html;
|
||||||
|
hstring _rtf;
|
||||||
|
Windows::Foundation::IReference<CopyFormat> _formats;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PasteFromClipboardEventArgs :
|
||||||
|
public PasteFromClipboardEventArgsT<PasteFromClipboardEventArgs>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PasteFromClipboardEventArgs(std::function<void(std::wstring)> clipboardDataHandler) :
|
||||||
|
m_clipboardDataHandler(clipboardDataHandler) {}
|
||||||
|
|
||||||
|
void HandleClipboardData(hstring value)
|
||||||
|
{
|
||||||
|
m_clipboardDataHandler(static_cast<std::wstring>(value));
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::function<void(std::wstring)> m_clipboardDataHandler;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OpenHyperlinkEventArgs :
|
||||||
|
public OpenHyperlinkEventArgsT<OpenHyperlinkEventArgs>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
OpenHyperlinkEventArgs(hstring uri) :
|
||||||
|
_uri(uri) {}
|
||||||
|
|
||||||
|
hstring Uri() { return _uri; };
|
||||||
|
|
||||||
|
private:
|
||||||
|
hstring _uri;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NoticeEventArgs :
|
||||||
|
public NoticeEventArgsT<NoticeEventArgs>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NoticeEventArgs(const NoticeLevel level, const hstring& message) :
|
||||||
|
_level(level),
|
||||||
|
_message(message) {}
|
||||||
|
|
||||||
|
NoticeLevel Level() { return _level; };
|
||||||
|
hstring Message() { return _message; };
|
||||||
|
|
||||||
|
private:
|
||||||
|
const NoticeLevel _level;
|
||||||
|
const hstring _message;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ScrollPositionChangedArgs :
|
||||||
|
public ScrollPositionChangedArgsT<ScrollPositionChangedArgs>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ScrollPositionChangedArgs(const int viewTop,
|
||||||
|
const int viewHeight,
|
||||||
|
const int bufferSize) :
|
||||||
|
_ViewTop(viewTop),
|
||||||
|
_ViewHeight(viewHeight),
|
||||||
|
_BufferSize(bufferSize)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
WINRT_PROPERTY(int32_t, ViewTop);
|
||||||
|
WINRT_PROPERTY(int32_t, ViewHeight);
|
||||||
|
WINRT_PROPERTY(int32_t, BufferSize);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RendererWarningArgs :
|
||||||
|
public RendererWarningArgsT<RendererWarningArgs>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RendererWarningArgs(const uint64_t hr) :
|
||||||
|
_Result(hr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
WINRT_PROPERTY(uint64_t, Result);
|
||||||
|
};
|
||||||
|
}
|
||||||
64
src/cascadia/TerminalControl/EventArgs.idl
Normal file
64
src/cascadia/TerminalControl/EventArgs.idl
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
namespace Microsoft.Terminal.TerminalControl
|
||||||
|
{
|
||||||
|
delegate void FontSizeChangedEventArgs(Int32 width, Int32 height, Boolean isInitialChange);
|
||||||
|
delegate void ScrollPositionChangedEventArgs(Int32 viewTop, Int32 viewHeight, Int32 bufferLength);
|
||||||
|
|
||||||
|
[flags]
|
||||||
|
enum CopyFormat
|
||||||
|
{
|
||||||
|
HTML = 0x1,
|
||||||
|
RTF = 0x2,
|
||||||
|
All = 0xffffffff
|
||||||
|
};
|
||||||
|
|
||||||
|
runtimeclass CopyToClipboardEventArgs
|
||||||
|
{
|
||||||
|
String Text { get; };
|
||||||
|
String Html { get; };
|
||||||
|
String Rtf { get; };
|
||||||
|
Windows.Foundation.IReference<CopyFormat> Formats { get; };
|
||||||
|
}
|
||||||
|
|
||||||
|
runtimeclass TitleChangedEventArgs
|
||||||
|
{
|
||||||
|
String Title;
|
||||||
|
}
|
||||||
|
|
||||||
|
runtimeclass PasteFromClipboardEventArgs
|
||||||
|
{
|
||||||
|
void HandleClipboardData(String data);
|
||||||
|
}
|
||||||
|
|
||||||
|
runtimeclass OpenHyperlinkEventArgs
|
||||||
|
{
|
||||||
|
String Uri { get; };
|
||||||
|
}
|
||||||
|
|
||||||
|
enum NoticeLevel
|
||||||
|
{
|
||||||
|
Debug = 10,
|
||||||
|
Info = 20,
|
||||||
|
Warning = 30,
|
||||||
|
Error = 40,
|
||||||
|
};
|
||||||
|
|
||||||
|
runtimeclass NoticeEventArgs
|
||||||
|
{
|
||||||
|
NoticeLevel Level { get; };
|
||||||
|
String Message { get; };
|
||||||
|
}
|
||||||
|
|
||||||
|
runtimeclass ScrollPositionChangedArgs
|
||||||
|
{
|
||||||
|
Int32 ViewTop { get; };
|
||||||
|
Int32 ViewHeight { get; };
|
||||||
|
Int32 BufferSize { get; };
|
||||||
|
}
|
||||||
|
runtimeclass RendererWarningArgs
|
||||||
|
{
|
||||||
|
UInt64 Result { get; };
|
||||||
|
}
|
||||||
|
}
|
||||||
23
src/cascadia/TerminalControl/ICoreState.idl
Normal file
23
src/cascadia/TerminalControl/ICoreState.idl
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
namespace Microsoft.Terminal.TerminalControl
|
||||||
|
{
|
||||||
|
// These are properties of the TerminalCore that should be queryable by the
|
||||||
|
// rest of the app.
|
||||||
|
interface ICoreState
|
||||||
|
{
|
||||||
|
String Title { get; };
|
||||||
|
UInt64 TaskbarState { get; };
|
||||||
|
UInt64 TaskbarProgress { get; };
|
||||||
|
|
||||||
|
String WorkingDirectory { get; };
|
||||||
|
|
||||||
|
Windows.Foundation.IReference<Windows.UI.Color> TabColor { get; };
|
||||||
|
|
||||||
|
Int32 ScrollOffset { get; };
|
||||||
|
Int32 ViewHeight { get; };
|
||||||
|
|
||||||
|
Microsoft.Terminal.TerminalConnection.ConnectionState ConnectionState { get; };
|
||||||
|
};
|
||||||
|
}
|
||||||
14
src/cascadia/TerminalControl/IDirectKeyListener.idl
Normal file
14
src/cascadia/TerminalControl/IDirectKeyListener.idl
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
namespace Microsoft.Terminal.TerminalControl
|
||||||
|
{
|
||||||
|
// C++/winrt makes it difficult to share this idl between two projects,
|
||||||
|
// Instead, we just pin the uuid and include it in both TermControl and App
|
||||||
|
// If you update this one, please update TerminalApp\IDirectKeyListener.idl.
|
||||||
|
// If you change this interface, please update the guid.
|
||||||
|
// If you press F7 or Alt and get a runtime error, go make sure both copies are the same.
|
||||||
|
[uuid("0ddf4edc-3fda-4dee-97ca-a417ee3dd510")] interface IDirectKeyListener {
|
||||||
|
Boolean OnDirectKeyEvent(UInt32 vkey, UInt8 scanCode, Boolean down);
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -94,8 +94,8 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
|||||||
auto pfnWarningBell = std::bind(&TermControl::_TerminalWarningBell, this);
|
auto pfnWarningBell = std::bind(&TermControl::_TerminalWarningBell, this);
|
||||||
_terminal->SetWarningBellCallback(pfnWarningBell);
|
_terminal->SetWarningBellCallback(pfnWarningBell);
|
||||||
|
|
||||||
auto pfnTitleChanged = std::bind(&TermControl::_TerminalTitleChanged, this, std::placeholders::_1);
|
// auto pfnTitleChanged = std::bind(&TermControl::_TerminalTitleChanged, this, std::placeholders::_1);
|
||||||
_terminal->SetTitleChangedCallback(pfnTitleChanged);
|
// _terminal->SetTitleChangedCallback(pfnTitleChanged);
|
||||||
|
|
||||||
auto pfnTabColorChanged = std::bind(&TermControl::_TerminalTabColorChanged, this, std::placeholders::_1);
|
auto pfnTabColorChanged = std::bind(&TermControl::_TerminalTabColorChanged, this, std::placeholders::_1);
|
||||||
_terminal->SetTabColorChangedCallback(pfnTabColorChanged);
|
_terminal->SetTabColorChangedCallback(pfnTabColorChanged);
|
||||||
@@ -658,14 +658,14 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
|||||||
// This event is only registered during terminal initialization,
|
// This event is only registered during terminal initialization,
|
||||||
// so we don't need to check _initializedTerminal.
|
// so we don't need to check _initializedTerminal.
|
||||||
// We also don't lock for things that come back from the renderer.
|
// We also don't lock for things that come back from the renderer.
|
||||||
auto chain = _renderEngine->GetSwapChain();
|
auto chainHandle = _renderEngine->GetSwapChainHandle();
|
||||||
auto weakThis{ get_weak() };
|
auto weakThis{ get_weak() };
|
||||||
|
|
||||||
co_await winrt::resume_foreground(Dispatcher());
|
co_await winrt::resume_foreground(Dispatcher());
|
||||||
|
|
||||||
if (auto control{ weakThis.get() })
|
if (auto control{ weakThis.get() })
|
||||||
{
|
{
|
||||||
_AttachDxgiSwapChainToXaml(chain.Get());
|
_AttachDxgiSwapChainToXaml(chainHandle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -708,10 +708,10 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TermControl::_AttachDxgiSwapChainToXaml(IDXGISwapChain1* swapChain)
|
void TermControl::_AttachDxgiSwapChainToXaml(HANDLE swapChainHandle)
|
||||||
{
|
{
|
||||||
auto nativePanel = SwapChainPanel().as<ISwapChainPanelNative>();
|
auto nativePanel = SwapChainPanel().as<ISwapChainPanelNative2>();
|
||||||
nativePanel->SetSwapChain(swapChain);
|
nativePanel->SetSwapChainHandle(swapChainHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TermControl::_InitializeTerminal()
|
bool TermControl::_InitializeTerminal()
|
||||||
@@ -822,7 +822,7 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
|||||||
THROW_IF_FAILED(dxEngine->Enable());
|
THROW_IF_FAILED(dxEngine->Enable());
|
||||||
_renderEngine = std::move(dxEngine);
|
_renderEngine = std::move(dxEngine);
|
||||||
|
|
||||||
_AttachDxgiSwapChainToXaml(_renderEngine->GetSwapChain().Get());
|
_AttachDxgiSwapChainToXaml(_renderEngine->GetSwapChainHandle());
|
||||||
|
|
||||||
// Tell the DX Engine to notify us when the swap chain changes.
|
// Tell the DX Engine to notify us when the swap chain changes.
|
||||||
// We do this after we initially set the swapchain so as to avoid unnecessary callbacks (and locking problems)
|
// We do this after we initially set the swapchain so as to avoid unnecessary callbacks (and locking problems)
|
||||||
@@ -2398,9 +2398,9 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
|||||||
_WarningBellHandlers(*this, nullptr);
|
_WarningBellHandlers(*this, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TermControl::_TerminalTitleChanged(const std::wstring_view& wstr)
|
void TermControl::_TerminalTitleChanged(const std::wstring_view& /*wstr*/)
|
||||||
{
|
{
|
||||||
_titleChangedHandlers(winrt::hstring{ wstr });
|
// _titleChangedHandlers(winrt::hstring{ wstr });
|
||||||
}
|
}
|
||||||
void TermControl::_TerminalTabColorChanged(const std::optional<til::color> /*color*/)
|
void TermControl::_TerminalTabColorChanged(const std::optional<til::color> /*color*/)
|
||||||
{
|
{
|
||||||
@@ -3393,7 +3393,7 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
|||||||
// -------------------------------- WinRT Events ---------------------------------
|
// -------------------------------- WinRT Events ---------------------------------
|
||||||
// Winrt events need a method for adding a callback to the event and removing the callback.
|
// Winrt events need a method for adding a callback to the event and removing the callback.
|
||||||
// These macros will define them both for you.
|
// These macros will define them both for you.
|
||||||
DEFINE_EVENT(TermControl, TitleChanged, _titleChangedHandlers, TerminalControl::TitleChangedEventArgs);
|
// DEFINE_EVENT(TermControl, TitleChanged, _titleChangedHandlers, TerminalControl::TitleChangedEventArgs);
|
||||||
DEFINE_EVENT(TermControl, FontSizeChanged, _fontSizeChangedHandlers, TerminalControl::FontSizeChangedEventArgs);
|
DEFINE_EVENT(TermControl, FontSizeChanged, _fontSizeChangedHandlers, TerminalControl::FontSizeChangedEventArgs);
|
||||||
DEFINE_EVENT(TermControl, ScrollPositionChanged, _scrollPositionChangedHandlers, TerminalControl::ScrollPositionChangedEventArgs);
|
DEFINE_EVENT(TermControl, ScrollPositionChanged, _scrollPositionChangedHandlers, TerminalControl::ScrollPositionChangedEventArgs);
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "TermControl.g.h"
|
#include "TermControl.g.h"
|
||||||
#include "CopyToClipboardEventArgs.g.h"
|
#include "EventArgs.h"
|
||||||
#include "PasteFromClipboardEventArgs.g.h"
|
|
||||||
#include "OpenHyperlinkEventArgs.g.h"
|
|
||||||
#include "NoticeEventArgs.g.h"
|
|
||||||
#include <winrt/Microsoft.Terminal.TerminalConnection.h>
|
#include <winrt/Microsoft.Terminal.TerminalConnection.h>
|
||||||
#include "../../renderer/base/Renderer.hpp"
|
#include "../../renderer/base/Renderer.hpp"
|
||||||
#include "../../renderer/dx/DxRenderer.hpp"
|
#include "../../renderer/dx/DxRenderer.hpp"
|
||||||
@@ -25,79 +22,6 @@ namespace Microsoft::Console::VirtualTerminal
|
|||||||
|
|
||||||
namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
||||||
{
|
{
|
||||||
struct CopyToClipboardEventArgs :
|
|
||||||
public CopyToClipboardEventArgsT<CopyToClipboardEventArgs>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CopyToClipboardEventArgs(hstring text) :
|
|
||||||
_text(text),
|
|
||||||
_html(),
|
|
||||||
_rtf(),
|
|
||||||
_formats(static_cast<CopyFormat>(0)) {}
|
|
||||||
|
|
||||||
CopyToClipboardEventArgs(hstring text, hstring html, hstring rtf, Windows::Foundation::IReference<CopyFormat> formats) :
|
|
||||||
_text(text),
|
|
||||||
_html(html),
|
|
||||||
_rtf(rtf),
|
|
||||||
_formats(formats) {}
|
|
||||||
|
|
||||||
hstring Text() { return _text; };
|
|
||||||
hstring Html() { return _html; };
|
|
||||||
hstring Rtf() { return _rtf; };
|
|
||||||
Windows::Foundation::IReference<CopyFormat> Formats() { return _formats; };
|
|
||||||
|
|
||||||
private:
|
|
||||||
hstring _text;
|
|
||||||
hstring _html;
|
|
||||||
hstring _rtf;
|
|
||||||
Windows::Foundation::IReference<CopyFormat> _formats;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct PasteFromClipboardEventArgs :
|
|
||||||
public PasteFromClipboardEventArgsT<PasteFromClipboardEventArgs>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
PasteFromClipboardEventArgs(std::function<void(std::wstring)> clipboardDataHandler) :
|
|
||||||
m_clipboardDataHandler(clipboardDataHandler) {}
|
|
||||||
|
|
||||||
void HandleClipboardData(hstring value)
|
|
||||||
{
|
|
||||||
m_clipboardDataHandler(static_cast<std::wstring>(value));
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::function<void(std::wstring)> m_clipboardDataHandler;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct OpenHyperlinkEventArgs :
|
|
||||||
public OpenHyperlinkEventArgsT<OpenHyperlinkEventArgs>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
OpenHyperlinkEventArgs(hstring uri) :
|
|
||||||
_uri(uri) {}
|
|
||||||
|
|
||||||
hstring Uri() { return _uri; };
|
|
||||||
|
|
||||||
private:
|
|
||||||
hstring _uri;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct NoticeEventArgs :
|
|
||||||
public NoticeEventArgsT<NoticeEventArgs>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
NoticeEventArgs(const NoticeLevel level, const hstring& message) :
|
|
||||||
_level(level),
|
|
||||||
_message(message) {}
|
|
||||||
|
|
||||||
NoticeLevel Level() { return _level; };
|
|
||||||
hstring Message() { return _message; };
|
|
||||||
|
|
||||||
private:
|
|
||||||
const NoticeLevel _level;
|
|
||||||
const hstring _message;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TermControl : TermControlT<TermControl>
|
struct TermControl : TermControlT<TermControl>
|
||||||
{
|
{
|
||||||
TermControl(IControlSettings settings, TerminalConnection::ITerminalConnection connection);
|
TermControl(IControlSettings settings, TerminalConnection::ITerminalConnection connection);
|
||||||
@@ -126,7 +50,7 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
|||||||
void ToggleShaderEffects();
|
void ToggleShaderEffects();
|
||||||
|
|
||||||
winrt::fire_and_forget RenderEngineSwapChainChanged();
|
winrt::fire_and_forget RenderEngineSwapChainChanged();
|
||||||
void _AttachDxgiSwapChainToXaml(IDXGISwapChain1* swapChain);
|
void _AttachDxgiSwapChainToXaml(HANDLE swapChainHandle);
|
||||||
winrt::fire_and_forget _RendererEnteredErrorState();
|
winrt::fire_and_forget _RendererEnteredErrorState();
|
||||||
void _RenderRetryButton_Click(IInspectable const& button, IInspectable const& args);
|
void _RenderRetryButton_Click(IInspectable const& button, IInspectable const& args);
|
||||||
winrt::fire_and_forget _RendererWarning(const HRESULT hr);
|
winrt::fire_and_forget _RendererWarning(const HRESULT hr);
|
||||||
@@ -171,7 +95,7 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
|||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
// -------------------------------- WinRT Events ---------------------------------
|
// -------------------------------- WinRT Events ---------------------------------
|
||||||
DECLARE_EVENT(TitleChanged, _titleChangedHandlers, TerminalControl::TitleChangedEventArgs);
|
// DECLARE_EVENT(TitleChanged, _titleChangedHandlers, TerminalControl::TitleChangedEventArgs);
|
||||||
DECLARE_EVENT(FontSizeChanged, _fontSizeChangedHandlers, TerminalControl::FontSizeChangedEventArgs);
|
DECLARE_EVENT(FontSizeChanged, _fontSizeChangedHandlers, TerminalControl::FontSizeChangedEventArgs);
|
||||||
DECLARE_EVENT(ScrollPositionChanged, _scrollPositionChangedHandlers, TerminalControl::ScrollPositionChangedEventArgs);
|
DECLARE_EVENT(ScrollPositionChanged, _scrollPositionChangedHandlers, TerminalControl::ScrollPositionChangedEventArgs);
|
||||||
|
|
||||||
|
|||||||
@@ -3,61 +3,12 @@
|
|||||||
|
|
||||||
import "IMouseWheelListener.idl";
|
import "IMouseWheelListener.idl";
|
||||||
import "IControlSettings.idl";
|
import "IControlSettings.idl";
|
||||||
|
import "IDirectKeyListener.idl";
|
||||||
|
import "EventArgs.idl";
|
||||||
|
|
||||||
namespace Microsoft.Terminal.TerminalControl
|
namespace Microsoft.Terminal.TerminalControl
|
||||||
{
|
{
|
||||||
delegate void TitleChangedEventArgs(String newTitle);
|
|
||||||
delegate void FontSizeChangedEventArgs(Int32 width, Int32 height, Boolean isInitialChange);
|
|
||||||
delegate void ScrollPositionChangedEventArgs(Int32 viewTop, Int32 viewHeight, Int32 bufferLength);
|
|
||||||
|
|
||||||
// C++/winrt makes it difficult to share this idl between two projects,
|
|
||||||
// Instead, we just pin the uuid and include it in both TermControl and App
|
|
||||||
// If you update this one, please update TerminalApp\IDirectKeyListener.idl.
|
|
||||||
// If you change this interface, please update the guid.
|
|
||||||
// If you press F7 or Alt and get a runtime error, go make sure both copies are the same.
|
|
||||||
[uuid("0ddf4edc-3fda-4dee-97ca-a417ee3dd510")] interface IDirectKeyListener {
|
|
||||||
Boolean OnDirectKeyEvent(UInt32 vkey, UInt8 scanCode, Boolean down);
|
|
||||||
};
|
|
||||||
|
|
||||||
[flags]
|
|
||||||
enum CopyFormat
|
|
||||||
{
|
|
||||||
HTML = 0x1,
|
|
||||||
RTF = 0x2,
|
|
||||||
All = 0xffffffff
|
|
||||||
};
|
|
||||||
|
|
||||||
runtimeclass CopyToClipboardEventArgs
|
|
||||||
{
|
|
||||||
String Text { get; };
|
|
||||||
String Html { get; };
|
|
||||||
String Rtf { get; };
|
|
||||||
Windows.Foundation.IReference<CopyFormat> Formats { get; };
|
|
||||||
}
|
|
||||||
|
|
||||||
runtimeclass PasteFromClipboardEventArgs
|
|
||||||
{
|
|
||||||
void HandleClipboardData(String data);
|
|
||||||
}
|
|
||||||
|
|
||||||
runtimeclass OpenHyperlinkEventArgs
|
|
||||||
{
|
|
||||||
String Uri { get; };
|
|
||||||
}
|
|
||||||
|
|
||||||
enum NoticeLevel
|
|
||||||
{
|
|
||||||
Debug = 10,
|
|
||||||
Info = 20,
|
|
||||||
Warning = 30,
|
|
||||||
Error = 40,
|
|
||||||
};
|
|
||||||
|
|
||||||
runtimeclass NoticeEventArgs
|
|
||||||
{
|
|
||||||
NoticeLevel Level { get; };
|
|
||||||
String Message { get; };
|
|
||||||
}
|
|
||||||
|
|
||||||
[default_interface] runtimeclass TermControl : Windows.UI.Xaml.Controls.UserControl, IDirectKeyListener, IMouseWheelListener
|
[default_interface] runtimeclass TermControl : Windows.UI.Xaml.Controls.UserControl, IDirectKeyListener, IMouseWheelListener
|
||||||
{
|
{
|
||||||
@@ -69,7 +20,7 @@ namespace Microsoft.Terminal.TerminalControl
|
|||||||
|
|
||||||
Microsoft.Terminal.TerminalControl.IControlSettings Settings { get; };
|
Microsoft.Terminal.TerminalControl.IControlSettings Settings { get; };
|
||||||
|
|
||||||
event TitleChangedEventArgs TitleChanged;
|
// event TitleChangedEventArgs TitleChanged;
|
||||||
event FontSizeChangedEventArgs FontSizeChanged;
|
event FontSizeChangedEventArgs FontSizeChanged;
|
||||||
event Windows.Foundation.TypedEventHandler<TermControl, CopyToClipboardEventArgs> CopyToClipboard;
|
event Windows.Foundation.TypedEventHandler<TermControl, CopyToClipboardEventArgs> CopyToClipboard;
|
||||||
event Windows.Foundation.TypedEventHandler<TermControl, PasteFromClipboardEventArgs> PasteFromClipboard;
|
event Windows.Foundation.TypedEventHandler<TermControl, PasteFromClipboardEventArgs> PasteFromClipboard;
|
||||||
|
|||||||
2717
src/cascadia/TerminalControl/TermControlTwo.cpp
Normal file
2717
src/cascadia/TerminalControl/TermControlTwo.cpp
Normal file
File diff suppressed because it is too large
Load Diff
294
src/cascadia/TerminalControl/TermControlTwo.h
Normal file
294
src/cascadia/TerminalControl/TermControlTwo.h
Normal file
@@ -0,0 +1,294 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "TermControlTwo.g.h"
|
||||||
|
#include "EventArgs.h"
|
||||||
|
#include <winrt/Microsoft.Terminal.TerminalConnection.h>
|
||||||
|
#include "../../renderer/base/Renderer.hpp"
|
||||||
|
#include "../../renderer/dx/DxRenderer.hpp"
|
||||||
|
#include "../../renderer/uia/UiaRenderer.hpp"
|
||||||
|
#include "../../cascadia/TerminalCore/Terminal.hpp"
|
||||||
|
#include "../buffer/out/search.h"
|
||||||
|
#include "cppwinrt_utils.h"
|
||||||
|
#include "SearchBoxControl.h"
|
||||||
|
#include "ThrottledFunc.h"
|
||||||
|
|
||||||
|
#include "ControlCore.h"
|
||||||
|
|
||||||
|
namespace Microsoft::Console::VirtualTerminal
|
||||||
|
{
|
||||||
|
struct MouseButtonState;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace winrt::Microsoft::Terminal::TerminalControl::implementation
|
||||||
|
{
|
||||||
|
struct TermControlTwo : TermControlTwoT<TermControlTwo>
|
||||||
|
{
|
||||||
|
TermControlTwo(IControlSettings settings, TerminalConnection::ITerminalConnection connection);
|
||||||
|
|
||||||
|
winrt::fire_and_forget UpdateSettings();
|
||||||
|
|
||||||
|
hstring Title();
|
||||||
|
hstring GetProfileName() const;
|
||||||
|
hstring WorkingDirectory() const;
|
||||||
|
|
||||||
|
bool CopySelectionToClipboard(bool singleLine, const Windows::Foundation::IReference<CopyFormat>& formats);
|
||||||
|
void PasteTextFromClipboard();
|
||||||
|
void Close();
|
||||||
|
Windows::Foundation::Size CharacterDimensions() const;
|
||||||
|
Windows::Foundation::Size MinimumSize();
|
||||||
|
float SnapDimensionToGrid(const bool widthOrHeight, const float dimension);
|
||||||
|
|
||||||
|
void ScrollViewport(int viewTop);
|
||||||
|
int ScrollOffset();
|
||||||
|
int ViewHeight() const;
|
||||||
|
|
||||||
|
void AdjustFontSize(int fontSizeDelta);
|
||||||
|
void ResetFontSize();
|
||||||
|
|
||||||
|
void SendInput(const winrt::hstring& input);
|
||||||
|
void ToggleShaderEffects();
|
||||||
|
|
||||||
|
winrt::fire_and_forget RenderEngineSwapChainChanged(const IInspectable& sender, const IInspectable& args);
|
||||||
|
void _AttachDxgiSwapChainToXaml(HANDLE swapChainHandle);
|
||||||
|
winrt::fire_and_forget _RendererEnteredErrorState();
|
||||||
|
void _RenderRetryButton_Click(IInspectable const& button, IInspectable const& args);
|
||||||
|
winrt::fire_and_forget _RendererWarning(const IInspectable& sender,
|
||||||
|
const TerminalControl::RendererWarningArgs& args);
|
||||||
|
|
||||||
|
void CreateSearchBoxControl();
|
||||||
|
|
||||||
|
void SearchMatch(const bool goForward);
|
||||||
|
|
||||||
|
bool OnDirectKeyEvent(const uint32_t vkey, const uint8_t scanCode, const bool down);
|
||||||
|
|
||||||
|
bool OnMouseWheel(const Windows::Foundation::Point location, const int32_t delta, const bool leftButtonDown, const bool midButtonDown, const bool rightButtonDown);
|
||||||
|
|
||||||
|
~TermControlTwo();
|
||||||
|
|
||||||
|
Windows::UI::Xaml::Automation::Peers::AutomationPeer OnCreateAutomationPeer();
|
||||||
|
::Microsoft::Console::Types::IUiaData* GetUiaData() const;
|
||||||
|
const Windows::UI::Xaml::Thickness GetPadding();
|
||||||
|
|
||||||
|
TerminalConnection::ConnectionState ConnectionState() const;
|
||||||
|
IControlSettings Settings() const;
|
||||||
|
|
||||||
|
static Windows::Foundation::Size GetProposedDimensions(IControlSettings const& settings, const uint32_t dpi);
|
||||||
|
static Windows::Foundation::Size GetProposedDimensions(const winrt::Windows::Foundation::Size& initialSizeInChars,
|
||||||
|
const int32_t& fontSize,
|
||||||
|
const winrt::Windows::UI::Text::FontWeight& fontWeight,
|
||||||
|
const winrt::hstring& fontFace,
|
||||||
|
const ScrollbarState& scrollState,
|
||||||
|
const winrt::hstring& padding,
|
||||||
|
const uint32_t dpi);
|
||||||
|
|
||||||
|
Windows::Foundation::IReference<winrt::Windows::UI::Color> TabColor() noexcept;
|
||||||
|
|
||||||
|
// winrt::fire_and_forget TaskbarProgressChanged();
|
||||||
|
const size_t TaskbarState() const noexcept;
|
||||||
|
const size_t TaskbarProgress() const noexcept;
|
||||||
|
|
||||||
|
bool ReadOnly() const noexcept;
|
||||||
|
void ToggleReadOnly();
|
||||||
|
|
||||||
|
// -------------------------------- WinRT Events ---------------------------------
|
||||||
|
FORWARDED_TYPED_EVENT(CopyToClipboard, IInspectable, TerminalControl::CopyToClipboardEventArgs, _core, CopyToClipboard);
|
||||||
|
FORWARDED_TYPED_EVENT(TitleChanged, IInspectable, TerminalControl::TitleChangedEventArgs, _core, TitleChanged);
|
||||||
|
FORWARDED_TYPED_EVENT(WarningBell, IInspectable, IInspectable, _core, WarningBell);
|
||||||
|
FORWARDED_TYPED_EVENT(TabColorChanged, IInspectable, IInspectable, _core, TabColorChanged);
|
||||||
|
FORWARDED_TYPED_EVENT(SetTaskbarProgress, IInspectable, IInspectable, _core, TaskbarProgressChanged);
|
||||||
|
FORWARDED_TYPED_EVENT(ConnectionStateChanged, IInspectable, IInspectable, _core, ConnectionStateChanged);
|
||||||
|
// clang-format off
|
||||||
|
|
||||||
|
DECLARE_EVENT(FontSizeChanged, _fontSizeChangedHandlers, TerminalControl::FontSizeChangedEventArgs);
|
||||||
|
|
||||||
|
DECLARE_EVENT_WITH_TYPED_EVENT_HANDLER(PasteFromClipboard, _clipboardPasteHandlers, TerminalControl::TermControlTwo, TerminalControl::PasteFromClipboardEventArgs);
|
||||||
|
DECLARE_EVENT_WITH_TYPED_EVENT_HANDLER(OpenHyperlink, _openHyperlinkHandlers, TerminalControl::TermControlTwo, TerminalControl::OpenHyperlinkEventArgs);
|
||||||
|
DECLARE_EVENT_WITH_TYPED_EVENT_HANDLER(RaiseNotice, _raiseNoticeHandlers, TerminalControl::TermControlTwo, TerminalControl::NoticeEventArgs);
|
||||||
|
|
||||||
|
TYPED_EVENT(Initialized, TerminalControl::TermControlTwo, Windows::UI::Xaml::RoutedEventArgs);
|
||||||
|
TYPED_EVENT(HidePointerCursor, IInspectable, IInspectable);
|
||||||
|
TYPED_EVENT(RestorePointerCursor, IInspectable, IInspectable);
|
||||||
|
TYPED_EVENT(ReadOnlyChanged, IInspectable, IInspectable);
|
||||||
|
TYPED_EVENT(FocusFollowMouseRequested, IInspectable, IInspectable);
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend struct TermControlTwoT<TermControlTwo>; // friend our parent so it can bind private event handlers
|
||||||
|
|
||||||
|
winrt::com_ptr<ControlCore> _core{ nullptr };
|
||||||
|
|
||||||
|
// TerminalConnection::ITerminalConnection _connection;
|
||||||
|
bool _initializedTerminal;
|
||||||
|
|
||||||
|
winrt::com_ptr<SearchBoxControl> _searchBox;
|
||||||
|
|
||||||
|
// event_token _connectionOutputEventToken;
|
||||||
|
// TerminalConnection::ITerminalConnection::StateChanged_revoker _connectionStateChangedRevoker;
|
||||||
|
|
||||||
|
// std::unique_ptr<::Microsoft::Terminal::Core::Terminal> _terminal;
|
||||||
|
|
||||||
|
// std::unique_ptr<::Microsoft::Console::Render::Renderer> _renderer;
|
||||||
|
// std::unique_ptr<::Microsoft::Console::Render::DxEngine> _renderEngine;
|
||||||
|
std::unique_ptr<::Microsoft::Console::Render::UiaEngine> _uiaEngine;
|
||||||
|
|
||||||
|
IControlSettings _settings;
|
||||||
|
bool _focused;
|
||||||
|
std::atomic<bool> _closing;
|
||||||
|
|
||||||
|
// FontInfoDesired _desiredFont;
|
||||||
|
// FontInfo _actualFont;
|
||||||
|
|
||||||
|
std::shared_ptr<ThrottledFunc<>> _tsfTryRedrawCanvas;
|
||||||
|
|
||||||
|
std::shared_ptr<ThrottledFunc<>> _updatePatternLocations;
|
||||||
|
|
||||||
|
struct ScrollBarUpdate
|
||||||
|
{
|
||||||
|
std::optional<double> newValue;
|
||||||
|
double newMaximum;
|
||||||
|
double newMinimum;
|
||||||
|
double newViewportSize;
|
||||||
|
};
|
||||||
|
std::shared_ptr<ThrottledFunc<ScrollBarUpdate>> _updateScrollBar;
|
||||||
|
bool _isInternalScrollBarUpdate;
|
||||||
|
|
||||||
|
unsigned int _rowsToScroll; // Definitely Control/Interactivity
|
||||||
|
|
||||||
|
// Auto scroll occurs when user, while selecting, drags cursor outside viewport. View is then scrolled to 'follow' the cursor.
|
||||||
|
double _autoScrollVelocity;
|
||||||
|
std::optional<Windows::UI::Input::PointerPoint> _autoScrollingPointerPoint;
|
||||||
|
Windows::UI::Xaml::DispatcherTimer _autoScrollTimer;
|
||||||
|
std::optional<std::chrono::high_resolution_clock::time_point> _lastAutoScrollUpdateTime;
|
||||||
|
|
||||||
|
// // storage location for the leading surrogate of a utf-16 surrogate pair
|
||||||
|
// std::optional<wchar_t> _leadingSurrogate;
|
||||||
|
|
||||||
|
std::optional<Windows::UI::Xaml::DispatcherTimer> _cursorTimer;
|
||||||
|
std::optional<Windows::UI::Xaml::DispatcherTimer> _blinkTimer;
|
||||||
|
|
||||||
|
// If this is set, then we assume we are in the middle of panning the
|
||||||
|
// viewport via touch input.
|
||||||
|
std::optional<winrt::Windows::Foundation::Point> _touchAnchor;
|
||||||
|
|
||||||
|
// // Track the last cell we hovered over (used in pointerMovedHandler)
|
||||||
|
// std::optional<COORD> _lastHoveredCell;
|
||||||
|
// // Track the last hyperlink ID we hovered over
|
||||||
|
// uint16_t _lastHoveredId;
|
||||||
|
|
||||||
|
// std::optional<interval_tree::IntervalTree<til::point, size_t>::interval> _lastHoveredInterval;
|
||||||
|
|
||||||
|
using Timestamp = uint64_t;
|
||||||
|
|
||||||
|
// imported from WinUser
|
||||||
|
// Used for PointerPoint.Timestamp Property (https://docs.microsoft.com/en-us/uwp/api/windows.ui.input.pointerpoint.timestamp#Windows_UI_Input_PointerPoint_Timestamp)
|
||||||
|
Timestamp _multiClickTimer;
|
||||||
|
unsigned int _multiClickCounter;
|
||||||
|
Timestamp _lastMouseClickTimestamp;
|
||||||
|
std::optional<winrt::Windows::Foundation::Point> _lastMouseClickPos;
|
||||||
|
std::optional<winrt::Windows::Foundation::Point> _singleClickTouchdownPos;
|
||||||
|
std::optional<winrt::Windows::Foundation::Point> _lastMouseClickPosNoSelection;
|
||||||
|
// This field tracks whether the selection has changed meaningfully
|
||||||
|
// since it was last copied. It's generally used to prevent copyOnSelect
|
||||||
|
// from firing when the pointer _just happens_ to be released over the
|
||||||
|
// terminal.
|
||||||
|
bool _selectionNeedsToBeCopied; // ->Interactivity
|
||||||
|
|
||||||
|
winrt::Windows::UI::Xaml::Controls::SwapChainPanel::LayoutUpdated_revoker _layoutUpdatedRevoker;
|
||||||
|
|
||||||
|
bool _isReadOnly{ false }; // ?
|
||||||
|
|
||||||
|
void _ApplyUISettings(const IControlSettings&);
|
||||||
|
void _UpdateSettingsOnUIThread();
|
||||||
|
void _UpdateSystemParameterSettings() noexcept;
|
||||||
|
void _InitializeBackgroundBrush();
|
||||||
|
void _BackgroundColorChangedHandler(const IInspectable& sender, const IInspectable& args);
|
||||||
|
winrt::fire_and_forget _changeBackgroundColor(til::color bg);
|
||||||
|
bool _InitializeTerminal();
|
||||||
|
// void _UpdateFont(const bool initialUpdate = false);
|
||||||
|
void _SetFontSize(int fontSize);
|
||||||
|
void _TappedHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs const& e);
|
||||||
|
void _KeyDownHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs const& e);
|
||||||
|
void _KeyUpHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs const& e);
|
||||||
|
void _CharacterHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::Input::CharacterReceivedRoutedEventArgs const& e);
|
||||||
|
void _PointerPressedHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e);
|
||||||
|
void _PointerMovedHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e);
|
||||||
|
void _PointerReleasedHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e);
|
||||||
|
void _PointerExitedHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e);
|
||||||
|
void _MouseWheelHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e);
|
||||||
|
void _ScrollbarChangeHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs const& e);
|
||||||
|
void _GotFocusHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::RoutedEventArgs const& e);
|
||||||
|
void _LostFocusHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::RoutedEventArgs const& e);
|
||||||
|
winrt::fire_and_forget _DragDropHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::DragEventArgs const e);
|
||||||
|
void _DragOverHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::DragEventArgs const& e);
|
||||||
|
winrt::fire_and_forget _HyperlinkHandler(const std::wstring_view uri);
|
||||||
|
|
||||||
|
void _CursorTimerTick(Windows::Foundation::IInspectable const& sender, Windows::Foundation::IInspectable const& e);
|
||||||
|
void _BlinkTimerTick(Windows::Foundation::IInspectable const& sender, Windows::Foundation::IInspectable const& e);
|
||||||
|
void _SetEndSelectionPointAtCursor(Windows::Foundation::Point const& cursorPosition);
|
||||||
|
// void _SendInputToConnection(const winrt::hstring& wstr);
|
||||||
|
// void _SendInputToConnection(std::wstring_view wstr);
|
||||||
|
void _SendPastedTextToConnection(const std::wstring& wstr);
|
||||||
|
void _SwapChainSizeChanged(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::SizeChangedEventArgs const& e);
|
||||||
|
void _SwapChainScaleChanged(Windows::UI::Xaml::Controls::SwapChainPanel const& sender, Windows::Foundation::IInspectable const& args);
|
||||||
|
// void _DoResizeUnderLock(const double newWidth, const double newHeight);
|
||||||
|
// void _RefreshSizeUnderLock();
|
||||||
|
// void _CopyToClipboard(const std::wstring_view& wstr);
|
||||||
|
// void _TerminalWarningBell();
|
||||||
|
// void _TerminalTitleChanged(const std::wstring_view& wstr);
|
||||||
|
void _TerminalTabColorChanged(const std::optional<til::color> color);
|
||||||
|
void _ScrollPositionChanged(const IInspectable& sender, const TerminalControl::ScrollPositionChangedArgs& args);
|
||||||
|
void _CursorPositionChanged(const IInspectable& sender, const IInspectable& args);
|
||||||
|
|
||||||
|
void _MouseScrollHandler(const double mouseDelta, const Windows::Foundation::Point point, const bool isLeftButtonPressed);
|
||||||
|
void _MouseZoomHandler(const double delta);
|
||||||
|
void _MouseTransparencyHandler(const double delta);
|
||||||
|
bool _DoMouseWheel(const Windows::Foundation::Point point, const ::Microsoft::Terminal::Core::ControlKeyStates modifiers, const int32_t delta, const ::Microsoft::Console::VirtualTerminal::TerminalInput::MouseButtonState state);
|
||||||
|
|
||||||
|
bool _CapturePointer(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e);
|
||||||
|
bool _ReleasePointerCapture(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e);
|
||||||
|
|
||||||
|
void _TryStartAutoScroll(Windows::UI::Input::PointerPoint const& pointerPoint, const double scrollVelocity);
|
||||||
|
void _TryStopAutoScroll(const uint32_t pointerId);
|
||||||
|
void _UpdateAutoScroll(Windows::Foundation::IInspectable const& sender, Windows::Foundation::IInspectable const& e);
|
||||||
|
|
||||||
|
static Windows::UI::Xaml::Thickness _ParseThicknessFromPadding(const hstring padding);
|
||||||
|
|
||||||
|
void _KeyHandler(Windows::UI::Xaml::Input::KeyRoutedEventArgs const& e, const bool keyDown);
|
||||||
|
::Microsoft::Terminal::Core::ControlKeyStates _GetPressedModifierKeys() const;
|
||||||
|
bool _TryHandleKeyBinding(const WORD vkey, const WORD scanCode, ::Microsoft::Terminal::Core::ControlKeyStates modifiers) const;
|
||||||
|
void _ClearKeyboardState(const WORD vkey, const WORD scanCode) const noexcept;
|
||||||
|
bool _TrySendKeyEvent(const WORD vkey, const WORD scanCode, ::Microsoft::Terminal::Core::ControlKeyStates modifiers, const bool keyDown);
|
||||||
|
bool _TrySendMouseEvent(Windows::UI::Input::PointerPoint const& point);
|
||||||
|
bool _CanSendVTMouseInput();
|
||||||
|
|
||||||
|
const til::point _GetTerminalPosition(winrt::Windows::Foundation::Point cursorPosition);
|
||||||
|
const unsigned int _NumberOfClicks(winrt::Windows::Foundation::Point clickPos, Timestamp clickTime);
|
||||||
|
double _GetAutoScrollSpeed(double cursorDistanceFromBorder) const;
|
||||||
|
|
||||||
|
void _Search(const winrt::hstring& text, const bool goForward, const bool caseSensitive);
|
||||||
|
void _CloseSearchBoxControl(const winrt::Windows::Foundation::IInspectable& sender, Windows::UI::Xaml::RoutedEventArgs const& args);
|
||||||
|
|
||||||
|
// TSFInputControl Handlers
|
||||||
|
void _CompositionCompleted(winrt::hstring text);
|
||||||
|
void _CurrentCursorPositionHandler(const IInspectable& sender, const CursorPositionEventArgs& eventArgs);
|
||||||
|
void _FontInfoHandler(const IInspectable& sender, const FontInfoEventArgs& eventArgs);
|
||||||
|
// winrt::fire_and_forget _AsyncCloseConnection();
|
||||||
|
|
||||||
|
winrt::fire_and_forget _RaiseReadOnlyWarning();
|
||||||
|
|
||||||
|
// void _UpdateHoveredCell(const std::optional<COORD>& terminalPosition);
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
winrt::fire_and_forget _hoveredHyperlinkChanged(const IInspectable& sender, const IInspectable& args);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace winrt::Microsoft::Terminal::TerminalControl::factory_implementation
|
||||||
|
{
|
||||||
|
struct TermControlTwo : TermControlTwoT<TermControlTwo, implementation::TermControlTwo>
|
||||||
|
{
|
||||||
|
};
|
||||||
|
}
|
||||||
75
src/cascadia/TerminalControl/TermControlTwo.idl
Normal file
75
src/cascadia/TerminalControl/TermControlTwo.idl
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
import "IMouseWheelListener.idl";
|
||||||
|
import "IControlSettings.idl";
|
||||||
|
import "IDirectKeyListener.idl";
|
||||||
|
import "EventArgs.idl";
|
||||||
|
import "ICoreState.idl";
|
||||||
|
|
||||||
|
namespace Microsoft.Terminal.TerminalControl
|
||||||
|
{
|
||||||
|
|
||||||
|
[default_interface] runtimeclass TermControlTwo : Windows.UI.Xaml.Controls.UserControl,
|
||||||
|
IDirectKeyListener,
|
||||||
|
IMouseWheelListener,
|
||||||
|
ICoreState
|
||||||
|
{
|
||||||
|
TermControlTwo(Microsoft.Terminal.TerminalControl.IControlSettings settings, Microsoft.Terminal.TerminalConnection.ITerminalConnection connection);
|
||||||
|
|
||||||
|
static Windows.Foundation.Size GetProposedDimensions(Microsoft.Terminal.TerminalControl.IControlSettings settings, UInt32 dpi);
|
||||||
|
|
||||||
|
void UpdateSettings();
|
||||||
|
|
||||||
|
Microsoft.Terminal.TerminalControl.IControlSettings Settings { get; };
|
||||||
|
|
||||||
|
event Windows.Foundation.TypedEventHandler<Object, TitleChangedEventArgs> TitleChanged;
|
||||||
|
event FontSizeChangedEventArgs FontSizeChanged;
|
||||||
|
event Windows.Foundation.TypedEventHandler<Object, CopyToClipboardEventArgs> CopyToClipboard;
|
||||||
|
event Windows.Foundation.TypedEventHandler<TermControlTwo, PasteFromClipboardEventArgs> PasteFromClipboard;
|
||||||
|
event Windows.Foundation.TypedEventHandler<TermControlTwo, OpenHyperlinkEventArgs> OpenHyperlink;
|
||||||
|
event Windows.Foundation.TypedEventHandler<Object, Object> SetTaskbarProgress;
|
||||||
|
event Windows.Foundation.TypedEventHandler<TermControlTwo, NoticeEventArgs> RaiseNotice;
|
||||||
|
event Windows.Foundation.TypedEventHandler<Object, Object> WarningBell;
|
||||||
|
event Windows.Foundation.TypedEventHandler<Object, Object> HidePointerCursor;
|
||||||
|
event Windows.Foundation.TypedEventHandler<Object, Object> RestorePointerCursor;
|
||||||
|
event Windows.Foundation.TypedEventHandler<Object, Object> TabColorChanged;
|
||||||
|
event Windows.Foundation.TypedEventHandler<Object, Object> ReadOnlyChanged;
|
||||||
|
event Windows.Foundation.TypedEventHandler<Object, Object> FocusFollowMouseRequested;
|
||||||
|
|
||||||
|
event Windows.Foundation.TypedEventHandler<TermControlTwo, Windows.UI.Xaml.RoutedEventArgs> Initialized;
|
||||||
|
// // This is an event handler forwarder for the underlying connection.
|
||||||
|
// // We expose this and ConnectionState here so that it might eventually be data bound.
|
||||||
|
event Windows.Foundation.TypedEventHandler<Object, Object> ConnectionStateChanged;
|
||||||
|
// Microsoft.Terminal.TerminalConnection.ConnectionState ConnectionState { get; };
|
||||||
|
|
||||||
|
|
||||||
|
Boolean CopySelectionToClipboard(Boolean singleLine, Windows.Foundation.IReference<CopyFormat> formats);
|
||||||
|
void PasteTextFromClipboard();
|
||||||
|
void Close();
|
||||||
|
Windows.Foundation.Size CharacterDimensions { get; };
|
||||||
|
Windows.Foundation.Size MinimumSize { get; };
|
||||||
|
Single SnapDimensionToGrid(Boolean widthOrHeight, Single dimension);
|
||||||
|
|
||||||
|
void ScrollViewport(Int32 viewTop);
|
||||||
|
// Int32 GetScrollOffset();
|
||||||
|
// Int32 GetViewHeight();
|
||||||
|
// event ScrollPositionChangedEventArgs ScrollPositionChanged;
|
||||||
|
|
||||||
|
void CreateSearchBoxControl();
|
||||||
|
|
||||||
|
void SearchMatch(Boolean goForward);
|
||||||
|
|
||||||
|
void AdjustFontSize(Int32 fontSizeDelta);
|
||||||
|
void ResetFontSize();
|
||||||
|
|
||||||
|
void ToggleShaderEffects();
|
||||||
|
void SendInput(String input);
|
||||||
|
|
||||||
|
// void TaskbarProgressChanged();
|
||||||
|
|
||||||
|
|
||||||
|
Boolean ReadOnly { get; };
|
||||||
|
void ToggleReadOnly();
|
||||||
|
}
|
||||||
|
}
|
||||||
125
src/cascadia/TerminalControl/TermControlTwo.xaml
Normal file
125
src/cascadia/TerminalControl/TermControlTwo.xaml
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
<!-- Copyright (c) Microsoft Corporation. All rights reserved. Licensed under
|
||||||
|
the MIT License. See LICENSE in the project root for license information. -->
|
||||||
|
<UserControl
|
||||||
|
x:Class="Microsoft.Terminal.TerminalControl.TermControlTwo"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="using:Microsoft.Terminal.TerminalControl"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
d:DesignHeight="768"
|
||||||
|
d:DesignWidth="1024"
|
||||||
|
TabNavigation="Cycle"
|
||||||
|
IsTabStop="True"
|
||||||
|
AllowFocusOnInteraction="True"
|
||||||
|
AllowDrop="True"
|
||||||
|
Drop="_DragDropHandler"
|
||||||
|
DragOver="_DragOverHandler"
|
||||||
|
Tapped="_TappedHandler"
|
||||||
|
PointerWheelChanged="_MouseWheelHandler"
|
||||||
|
PreviewKeyDown="_KeyDownHandler"
|
||||||
|
KeyUp="_KeyUpHandler"
|
||||||
|
CharacterReceived="_CharacterHandler"
|
||||||
|
GotFocus="_GotFocusHandler"
|
||||||
|
LostFocus="_LostFocusHandler">
|
||||||
|
<!--
|
||||||
|
TODO GH#4031: We've investigated whether we should be using KeyDown or PreviewKeyDown
|
||||||
|
but not necessarily come to a consensus. It's possible that moving input to the SwapChainPanel
|
||||||
|
will solve a bunch of the search input issues we found last time we switched.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<Grid x:Name="RootGrid">
|
||||||
|
<Image x:Name="BackgroundImage"
|
||||||
|
AutomationProperties.AccessibilityView="Raw" />
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<Grid Grid.Column="0"
|
||||||
|
Visibility="Visible"
|
||||||
|
Background="Transparent"
|
||||||
|
PointerPressed="_PointerPressedHandler"
|
||||||
|
PointerMoved="_PointerMovedHandler"
|
||||||
|
PointerReleased="_PointerReleasedHandler"
|
||||||
|
PointerExited="_PointerExitedHandler">
|
||||||
|
|
||||||
|
<SwapChainPanel x:Name="SwapChainPanel"
|
||||||
|
SizeChanged="_SwapChainSizeChanged"
|
||||||
|
CompositionScaleChanged="_SwapChainScaleChanged">
|
||||||
|
|
||||||
|
<Canvas x:Name="OverlayCanvas"
|
||||||
|
Visibility="Visible">
|
||||||
|
<Border x:Name="HyperlinkTooltipBorder"
|
||||||
|
BorderBrush="Transparent">
|
||||||
|
<ToolTipService.ToolTip>
|
||||||
|
<ToolTip x:Name="LinkTip"
|
||||||
|
Placement="Mouse">
|
||||||
|
<TextBlock IsTextSelectionEnabled="True">
|
||||||
|
<Run x:Name="HoveredUri"/> <LineBreak />
|
||||||
|
<Run x:Uid="HowToOpenRun"
|
||||||
|
FontStyle="Italic">
|
||||||
|
</Run>
|
||||||
|
</TextBlock>
|
||||||
|
</ToolTip>
|
||||||
|
</ToolTipService.ToolTip>
|
||||||
|
</Border>
|
||||||
|
</Canvas>
|
||||||
|
</SwapChainPanel>
|
||||||
|
|
||||||
|
<!-- Putting this in a grid w/ the SwapChainPanel
|
||||||
|
ensures that it's always aligned w/ the scrollbar -->
|
||||||
|
<local:SearchBoxControl x:Name="SearchBox"
|
||||||
|
x:Load="False"
|
||||||
|
Visibility="Collapsed"
|
||||||
|
HorizontalAlignment="Right"
|
||||||
|
VerticalAlignment="Top"
|
||||||
|
Search="_Search"
|
||||||
|
Closed="_CloseSearchBoxControl" />
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<ScrollBar Grid.Column="1"
|
||||||
|
x:Name="ScrollBar"
|
||||||
|
Orientation="Vertical"
|
||||||
|
IndicatorMode="MouseIndicator"
|
||||||
|
HorizontalAlignment="Right"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
Maximum="1"
|
||||||
|
ViewportSize="10"
|
||||||
|
IsTabStop="False"
|
||||||
|
SmallChange="1"
|
||||||
|
LargeChange="4"
|
||||||
|
ValueChanged="_ScrollbarChangeHandler"
|
||||||
|
PointerPressed="_CapturePointer"
|
||||||
|
PointerReleased="_ReleasePointerCapture" />
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<local:TSFInputControl x:Name="TSFInputControl"
|
||||||
|
CompositionCompleted="_CompositionCompleted"
|
||||||
|
CurrentCursorPosition="_CurrentCursorPositionHandler"
|
||||||
|
CurrentFontInfo="_FontInfoHandler" />
|
||||||
|
|
||||||
|
<Grid x:Name="RendererFailedNotice"
|
||||||
|
x:Load="False"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center">
|
||||||
|
<Border Background="{ThemeResource SystemControlBackgroundAltHighBrush}"
|
||||||
|
BorderBrush="{ThemeResource SystemAccentColor}"
|
||||||
|
Margin="8,8,8,8"
|
||||||
|
Padding="8,8,8,8"
|
||||||
|
BorderThickness="2,2,2,2"
|
||||||
|
CornerRadius="{ThemeResource OverlayCornerRadius}">
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock HorizontalAlignment="Center" x:Uid="TermControl_RendererFailedTextBlock" TextWrapping="WrapWholeWords"/>
|
||||||
|
<Button Click="_RenderRetryButton_Click" x:Uid="TermControl_RendererRetryButton" HorizontalAlignment="Right" />
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
</UserControl>
|
||||||
@@ -25,15 +25,24 @@
|
|||||||
<Import Project="$(OpenConsoleDir)src\cppwinrt.build.pre.props" />
|
<Import Project="$(OpenConsoleDir)src\cppwinrt.build.pre.props" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="pch.h" />
|
<ClInclude Include="pch.h" />
|
||||||
|
<ClInclude Include="ControlCore.h">
|
||||||
|
<DependentUpon>ControlCore.idl</DependentUpon>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="KeyChord.h">
|
<ClInclude Include="KeyChord.h">
|
||||||
<DependentUpon>KeyChord.idl</DependentUpon>
|
<DependentUpon>KeyChord.idl</DependentUpon>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="EventArgs.h">
|
||||||
|
<DependentUpon>EventArgs.idl</DependentUpon>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="SearchBoxControl.h">
|
<ClInclude Include="SearchBoxControl.h">
|
||||||
<DependentUpon>SearchBoxControl.xaml</DependentUpon>
|
<DependentUpon>SearchBoxControl.xaml</DependentUpon>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="TermControl.h">
|
<ClInclude Include="TermControl.h">
|
||||||
<DependentUpon>TermControl.xaml</DependentUpon>
|
<DependentUpon>TermControl.xaml</DependentUpon>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="TermControlTwo.h">
|
||||||
|
<DependentUpon>TermControlTwo.xaml</DependentUpon>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="TermControlAutomationPeer.h">
|
<ClInclude Include="TermControlAutomationPeer.h">
|
||||||
<DependentUpon>TermControlAutomationPeer.idl</DependentUpon>
|
<DependentUpon>TermControlAutomationPeer.idl</DependentUpon>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@@ -47,6 +56,12 @@
|
|||||||
<ClCompile Include="pch.cpp">
|
<ClCompile Include="pch.cpp">
|
||||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="ControlCore.cpp">
|
||||||
|
<DependentUpon>ControlCore.idl</DependentUpon>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="EventArgs.cpp">
|
||||||
|
<DependentUpon>EventArgs.idl</DependentUpon>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="init.cpp" />
|
<ClCompile Include="init.cpp" />
|
||||||
<ClCompile Include="KeyChord.cpp">
|
<ClCompile Include="KeyChord.cpp">
|
||||||
<DependentUpon>KeyChord.idl</DependentUpon>
|
<DependentUpon>KeyChord.idl</DependentUpon>
|
||||||
@@ -57,6 +72,9 @@
|
|||||||
<ClCompile Include="TermControl.cpp">
|
<ClCompile Include="TermControl.cpp">
|
||||||
<DependentUpon>TermControl.xaml</DependentUpon>
|
<DependentUpon>TermControl.xaml</DependentUpon>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="TermControlTwo.cpp">
|
||||||
|
<DependentUpon>TermControlTwo.xaml</DependentUpon>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="ThrottledFunc.cpp" />
|
<ClCompile Include="ThrottledFunc.cpp" />
|
||||||
<ClCompile Include="TSFInputControl.cpp">
|
<ClCompile Include="TSFInputControl.cpp">
|
||||||
<DependentUpon>TSFInputControl.xaml</DependentUpon>
|
<DependentUpon>TSFInputControl.xaml</DependentUpon>
|
||||||
@@ -68,7 +86,11 @@
|
|||||||
<ClCompile Include="XamlUiaTextRange.cpp" />
|
<ClCompile Include="XamlUiaTextRange.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Midl Include="ControlCore.idl" />
|
||||||
|
<Midl Include="ICoreState.idl" />
|
||||||
|
<Midl Include="IDirectKeyListener.idl" />
|
||||||
<Midl Include="KeyChord.idl" />
|
<Midl Include="KeyChord.idl" />
|
||||||
|
<Midl Include="EventArgs.idl" />
|
||||||
<Midl Include="IKeyBindings.idl" />
|
<Midl Include="IKeyBindings.idl" />
|
||||||
<Midl Include="IControlSettings.idl" />
|
<Midl Include="IControlSettings.idl" />
|
||||||
<Midl Include="SearchBoxControl.idl">
|
<Midl Include="SearchBoxControl.idl">
|
||||||
@@ -77,6 +99,9 @@
|
|||||||
<Midl Include="TermControl.idl">
|
<Midl Include="TermControl.idl">
|
||||||
<DependentUpon>TermControl.xaml</DependentUpon>
|
<DependentUpon>TermControl.xaml</DependentUpon>
|
||||||
</Midl>
|
</Midl>
|
||||||
|
<Midl Include="TermControlTwo.idl">
|
||||||
|
<DependentUpon>TermControlTwo.xaml</DependentUpon>
|
||||||
|
</Midl>
|
||||||
<Midl Include="TermControlAutomationPeer.idl" />
|
<Midl Include="TermControlAutomationPeer.idl" />
|
||||||
<Midl Include="IMouseWheelListener.idl" />
|
<Midl Include="IMouseWheelListener.idl" />
|
||||||
<Midl Include="TSFInputControl.idl">
|
<Midl Include="TSFInputControl.idl">
|
||||||
@@ -117,6 +142,9 @@
|
|||||||
<Page Include="TermControl.xaml">
|
<Page Include="TermControl.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
|
<Page Include="TermControlTwo.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
<Page Include="TSFInputControl.xaml">
|
<Page Include="TSFInputControl.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ namespace Microsoft::Terminal::Core
|
|||||||
virtual bool SendMouseEvent(const COORD viewportPos, const unsigned int uiButton, const ControlKeyStates states, const short wheelDelta, const Microsoft::Console::VirtualTerminal::TerminalInput::MouseButtonState state) = 0;
|
virtual bool SendMouseEvent(const COORD viewportPos, const unsigned int uiButton, const ControlKeyStates states, const short wheelDelta, const Microsoft::Console::VirtualTerminal::TerminalInput::MouseButtonState state) = 0;
|
||||||
virtual bool SendCharEvent(const wchar_t ch, const WORD scanCode, const ControlKeyStates states) = 0;
|
virtual bool SendCharEvent(const wchar_t ch, const WORD scanCode, const ControlKeyStates states) = 0;
|
||||||
|
|
||||||
// void SendMouseEvent(uint row, uint col, KeyModifiers modifiers);
|
|
||||||
[[nodiscard]] virtual HRESULT UserResize(const COORD size) noexcept = 0;
|
[[nodiscard]] virtual HRESULT UserResize(const COORD size) noexcept = 0;
|
||||||
virtual void UserScrollViewport(const int viewTop) = 0;
|
virtual void UserScrollViewport(const int viewTop) = 0;
|
||||||
virtual int GetScrollOffset() = 0;
|
virtual int GetScrollOffset() = 0;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>onecoreuap_apiset.lib;d3dcompiler.lib;dwmapi.lib;uxtheme.lib;shlwapi.lib;ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>onecoreuap_apiset.lib;d3dcompiler.lib;dwmapi.lib;uxtheme.lib;shlwapi.lib;ntdll.lib;dcomp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ DxEngine::DxEngine() :
|
|||||||
_backgroundColor{ 0 },
|
_backgroundColor{ 0 },
|
||||||
_selectionBackground{},
|
_selectionBackground{},
|
||||||
_haveDeviceResources{ false },
|
_haveDeviceResources{ false },
|
||||||
|
_swapChainHandle{ INVALID_HANDLE_VALUE },
|
||||||
_swapChainDesc{ 0 },
|
_swapChainDesc{ 0 },
|
||||||
_swapChainFrameLatencyWaitableObject{ INVALID_HANDLE_VALUE },
|
_swapChainFrameLatencyWaitableObject{ INVALID_HANDLE_VALUE },
|
||||||
_recreateDeviceRequested{ false },
|
_recreateDeviceRequested{ false },
|
||||||
@@ -618,6 +619,13 @@ try
|
|||||||
}
|
}
|
||||||
case SwapChainMode::ForComposition:
|
case SwapChainMode::ForComposition:
|
||||||
{
|
{
|
||||||
|
if (!_swapChainHandle)
|
||||||
|
{
|
||||||
|
RETURN_IF_FAILED(DCompositionCreateSurfaceHandle(GENERIC_ALL, nullptr, &_swapChainHandle));
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_IF_FAILED(_dxgiFactory2.As(&_dxgiFactoryMedia));
|
||||||
|
|
||||||
// Use the given target size for compositions.
|
// Use the given target size for compositions.
|
||||||
_swapChainDesc.Width = _displaySizePixels.width<UINT>();
|
_swapChainDesc.Width = _displaySizePixels.width<UINT>();
|
||||||
_swapChainDesc.Height = _displaySizePixels.height<UINT>();
|
_swapChainDesc.Height = _displaySizePixels.height<UINT>();
|
||||||
@@ -627,10 +635,11 @@ try
|
|||||||
// It's 100% required to use scaling mode stretch for composition. There is no other choice.
|
// It's 100% required to use scaling mode stretch for composition. There is no other choice.
|
||||||
_swapChainDesc.Scaling = DXGI_SCALING_STRETCH;
|
_swapChainDesc.Scaling = DXGI_SCALING_STRETCH;
|
||||||
|
|
||||||
RETURN_IF_FAILED(_dxgiFactory2->CreateSwapChainForComposition(_d3dDevice.Get(),
|
RETURN_IF_FAILED(_dxgiFactoryMedia->CreateSwapChainForCompositionSurfaceHandle(_d3dDevice.Get(),
|
||||||
&_swapChainDesc,
|
_swapChainHandle.get(),
|
||||||
nullptr,
|
&_swapChainDesc,
|
||||||
&_dxgiSwapChain));
|
nullptr,
|
||||||
|
&_dxgiSwapChain));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -1003,14 +1012,14 @@ try
|
|||||||
}
|
}
|
||||||
CATCH_LOG()
|
CATCH_LOG()
|
||||||
|
|
||||||
Microsoft::WRL::ComPtr<IDXGISwapChain1> DxEngine::GetSwapChain()
|
HANDLE DxEngine::GetSwapChainHandle()
|
||||||
{
|
{
|
||||||
if (_dxgiSwapChain.Get() == nullptr)
|
if (!_swapChainHandle)
|
||||||
{
|
{
|
||||||
THROW_IF_FAILED(_CreateDeviceResources(true));
|
THROW_IF_FAILED(_CreateDeviceResources(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
return _dxgiSwapChain;
|
return _swapChainHandle.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DxEngine::_InvalidateRectangle(const til::rectangle& rc)
|
void DxEngine::_InvalidateRectangle(const til::rectangle& rc)
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ namespace Microsoft::Console::Render
|
|||||||
|
|
||||||
void SetSoftwareRendering(bool enable) noexcept;
|
void SetSoftwareRendering(bool enable) noexcept;
|
||||||
|
|
||||||
::Microsoft::WRL::ComPtr<IDXGISwapChain1> GetSwapChain();
|
HANDLE GetSwapChainHandle();
|
||||||
|
|
||||||
// IRenderEngine Members
|
// IRenderEngine Members
|
||||||
[[nodiscard]] HRESULT Invalidate(const SMALL_RECT* const psrRegion) noexcept override;
|
[[nodiscard]] HRESULT Invalidate(const SMALL_RECT* const psrRegion) noexcept override;
|
||||||
@@ -128,6 +128,8 @@ namespace Microsoft::Console::Render
|
|||||||
void SetAntialiasingMode(const D2D1_TEXT_ANTIALIAS_MODE antialiasingMode) noexcept;
|
void SetAntialiasingMode(const D2D1_TEXT_ANTIALIAS_MODE antialiasingMode) noexcept;
|
||||||
void SetDefaultTextBackgroundOpacity(const float opacity) noexcept;
|
void SetDefaultTextBackgroundOpacity(const float opacity) noexcept;
|
||||||
|
|
||||||
|
wil::unique_handle _swapChainHandle;
|
||||||
|
|
||||||
void UpdateHyperlinkHoveredId(const uint16_t hoveredId) noexcept;
|
void UpdateHyperlinkHoveredId(const uint16_t hoveredId) noexcept;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -210,6 +212,7 @@ namespace Microsoft::Console::Render
|
|||||||
::Microsoft::WRL::ComPtr<ID2D1SolidColorBrush> _d2dBrushBackground;
|
::Microsoft::WRL::ComPtr<ID2D1SolidColorBrush> _d2dBrushBackground;
|
||||||
|
|
||||||
::Microsoft::WRL::ComPtr<IDXGIFactory2> _dxgiFactory2;
|
::Microsoft::WRL::ComPtr<IDXGIFactory2> _dxgiFactory2;
|
||||||
|
::Microsoft::WRL::ComPtr<IDXGIFactoryMedia> _dxgiFactoryMedia;
|
||||||
::Microsoft::WRL::ComPtr<IDXGIDevice> _dxgiDevice;
|
::Microsoft::WRL::ComPtr<IDXGIDevice> _dxgiDevice;
|
||||||
::Microsoft::WRL::ComPtr<IDXGISurface> _dxgiSurface;
|
::Microsoft::WRL::ComPtr<IDXGISurface> _dxgiSurface;
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
#include <typeinfo>
|
#include <typeinfo>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
|
#include <dcomp.h>
|
||||||
|
|
||||||
#include <dxgi.h>
|
#include <dxgi.h>
|
||||||
#include <dxgi1_2.h>
|
#include <dxgi1_2.h>
|
||||||
#include <dxgi1_3.h>
|
#include <dxgi1_3.h>
|
||||||
|
|||||||
69
src/tools/ScratchWinRTClient/HostManager.cpp
Normal file
69
src/tools/ScratchWinRTClient/HostManager.cpp
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
#include "pch.h"
|
||||||
|
#include "HostManager.h"
|
||||||
|
|
||||||
|
#include "HostManager.g.cpp"
|
||||||
|
#include "../../types/inc/utils.hpp"
|
||||||
|
|
||||||
|
using namespace winrt;
|
||||||
|
using namespace winrt::Windows::Foundation;
|
||||||
|
using namespace ::Microsoft::Console;
|
||||||
|
|
||||||
|
namespace winrt::ScratchWinRTClient::implementation
|
||||||
|
{
|
||||||
|
HostManager::HostManager()
|
||||||
|
{
|
||||||
|
_hosts = winrt::single_threaded_observable_vector<ScratchWinRTServer::HostClass>();
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections::IObservableVector<ScratchWinRTServer::HostClass> HostManager::Hosts()
|
||||||
|
{
|
||||||
|
return _hosts;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _createHostClassProcess(const winrt::guid& g)
|
||||||
|
{
|
||||||
|
auto guidStr{ Utils::GuidToString(g) };
|
||||||
|
std::wstring commandline{ fmt::format(L"ScratchWinRTServer.exe {}", guidStr) };
|
||||||
|
STARTUPINFO siOne{ 0 };
|
||||||
|
siOne.cb = sizeof(STARTUPINFOW);
|
||||||
|
wil::unique_process_information piOne;
|
||||||
|
auto succeeded = CreateProcessW(
|
||||||
|
nullptr,
|
||||||
|
commandline.data(),
|
||||||
|
nullptr, // lpProcessAttributes
|
||||||
|
nullptr, // lpThreadAttributes
|
||||||
|
false, // bInheritHandles
|
||||||
|
CREATE_UNICODE_ENVIRONMENT, // dwCreationFlags
|
||||||
|
nullptr, // lpEnvironment
|
||||||
|
nullptr, // startingDirectory
|
||||||
|
&siOne, // lpStartupInfo
|
||||||
|
&piOne // lpProcessInformation
|
||||||
|
);
|
||||||
|
if (!succeeded)
|
||||||
|
{
|
||||||
|
printf("Failed to create host process\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ooof this is dumb, but we need a sleep here to make the server starts.
|
||||||
|
// That's _sub par_. Maybe we could use the host's stdout to have them emit
|
||||||
|
// a byte when they're set up?
|
||||||
|
Sleep(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
ScratchWinRTServer::HostClass HostManager::CreateHost()
|
||||||
|
{
|
||||||
|
// 1. Generate a GUID.
|
||||||
|
winrt::guid g{ Utils::CreateGuid() };
|
||||||
|
|
||||||
|
// 2. Spawn a Server.exe, with the guid on the commandline
|
||||||
|
_createHostClassProcess(g);
|
||||||
|
|
||||||
|
auto host = create_instance<winrt::ScratchWinRTServer::HostClass>(g, CLSCTX_LOCAL_SERVER);
|
||||||
|
THROW_IF_NULL_ALLOC(host);
|
||||||
|
|
||||||
|
_hosts.Append(host);
|
||||||
|
|
||||||
|
return host;
|
||||||
|
}
|
||||||
|
}
|
||||||
65
src/tools/ScratchWinRTClient/HostManager.h
Normal file
65
src/tools/ScratchWinRTClient/HostManager.h
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "HostManager.g.h"
|
||||||
|
|
||||||
|
// {50dba6cd-4ddb-4b12-8363-5e06f5d0082c}
|
||||||
|
static constexpr GUID HostManager_clsid{
|
||||||
|
0x50dba6cd,
|
||||||
|
0x4ddb,
|
||||||
|
0x4b12,
|
||||||
|
{ 0x83, 0x63, 0x5e, 0x06, 0xf5, 0xd0, 0x08, 0x2c }
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace winrt::ScratchWinRTClient::implementation
|
||||||
|
{
|
||||||
|
struct HostManager : public HostManagerT<HostManager>
|
||||||
|
{
|
||||||
|
HostManager();
|
||||||
|
|
||||||
|
Windows::Foundation::Collections::IObservableVector<ScratchWinRTServer::HostClass> Hosts();
|
||||||
|
ScratchWinRTServer::HostClass CreateHost();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Windows::Foundation::Collections::IObservableVector<ScratchWinRTServer::HostClass> _hosts{ nullptr };
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace winrt::ScratchWinRTClient::factory_implementation
|
||||||
|
{
|
||||||
|
struct HostManager : HostManagerT<HostManager, implementation::HostManager>
|
||||||
|
{
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// I bet all this could be a macro.
|
||||||
|
// I MORE be that this is all done by the factory_implementation stuff, isn't it...
|
||||||
|
struct HostManagerFactory : winrt::implements<HostManagerFactory, IClassFactory>
|
||||||
|
{
|
||||||
|
HRESULT __stdcall CreateInstance(IUnknown* outer, GUID const& iid, void** result) noexcept final
|
||||||
|
{
|
||||||
|
*result = nullptr;
|
||||||
|
if (outer)
|
||||||
|
{
|
||||||
|
return CLASS_E_NOAGGREGATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
return winrt::make<winrt::ScratchWinRTClient::implementation::HostManager>().as(iid, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT __stdcall LockServer(BOOL) noexcept final
|
||||||
|
{
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void RegisterHostManager()
|
||||||
|
{
|
||||||
|
DWORD registrationHostManager{};
|
||||||
|
|
||||||
|
winrt::check_hresult(CoRegisterClassObject(HostManager_clsid,
|
||||||
|
winrt::make<HostManagerFactory>().get(),
|
||||||
|
CLSCTX_LOCAL_SERVER,
|
||||||
|
REGCLS_MULTIPLEUSE,
|
||||||
|
®istrationHostManager));
|
||||||
|
printf("registrationHostManager:%d\n", registrationHostManager);
|
||||||
|
}
|
||||||
|
};
|
||||||
12
src/tools/ScratchWinRTClient/HostManager.idl
Normal file
12
src/tools/ScratchWinRTClient/HostManager.idl
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
|
||||||
|
namespace ScratchWinRTClient
|
||||||
|
{
|
||||||
|
[default_interface] runtimeclass HostManager // : IScratchInterface
|
||||||
|
{
|
||||||
|
HostManager();
|
||||||
|
|
||||||
|
Windows.Foundation.Collections.IObservableVector<ScratchWinRTServer.HostClass> Hosts { get; };
|
||||||
|
ScratchWinRTServer.HostClass CreateHost();
|
||||||
|
};
|
||||||
|
}
|
||||||
16
src/tools/ScratchWinRTClient/PropertySheet.props
Normal file
16
src/tools/ScratchWinRTClient/PropertySheet.props
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<!--
|
||||||
|
To customize common C++/WinRT project properties:
|
||||||
|
* right-click the project node
|
||||||
|
* expand the Common Properties item
|
||||||
|
* select the C++/WinRT property page
|
||||||
|
|
||||||
|
For more advanced scenarios, and complete documentation, please see:
|
||||||
|
https://github.com/Microsoft/cppwinrt/tree/master/nuget
|
||||||
|
-->
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup />
|
||||||
|
</Project>
|
||||||
84
src/tools/ScratchWinRTClient/ScratchWinRTClient.vcxproj
Normal file
84
src/tools/ScratchWinRTClient/ScratchWinRTClient.vcxproj
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{06382349-d62a-4c7d-a7d3-9ca817eae092}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>ScratchWinRTClient</RootNamespace>
|
||||||
|
<ProjectName>ScratchWinRTClient</ProjectName>
|
||||||
|
<TargetName>ScratchWinRTClient</TargetName>
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<OpenConsoleUniversalApp>false</OpenConsoleUniversalApp>
|
||||||
|
<ApplicationType>Windows Store</ApplicationType>
|
||||||
|
<TargetPlatformIdentifier>Windows</TargetPlatformIdentifier>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<Import Project="..\..\..\common.openconsole.props" Condition="'$(OpenConsoleDir)'==''" />
|
||||||
|
<Import Project="$(OpenConsoleDir)src\cppwinrt.build.pre.props" />
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<GenerateManifest>true</GenerateManifest>
|
||||||
|
<EmbedManifest>true</EmbedManifest>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!-- Source Files -->
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="pch.h" />
|
||||||
|
<ClInclude Include="HostManager.h">
|
||||||
|
<DependentUpon>HostManager.idl</DependentUpon>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="main.cpp" />
|
||||||
|
<ClCompile Include="pch.cpp">
|
||||||
|
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="HostManager.cpp">
|
||||||
|
<DependentUpon>HostManager.idl</DependentUpon>
|
||||||
|
</ClCompile>
|
||||||
|
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Midl Include="HostManager.idl" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!-- Dependencies -->
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\ScratchWinRTServer\ScratchWinRTServer.vcxproj">
|
||||||
|
<Project>{d46d9547-f085-4645-b8f7-e8cd21559ab4}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="$(SolutionDir)src\types\lib\types.vcxproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This ItemGroup and the Globals PropertyGroup below it are required in order
|
||||||
|
to enable F5 debugging for the unpackaged application
|
||||||
|
-->
|
||||||
|
<ItemGroup>
|
||||||
|
<PropertyPageSchema Include="$(VCTargetsPath)$(LangID)\debugger_general.xml" />
|
||||||
|
<PropertyPageSchema Include="$(VCTargetsPath)$(LangID)\debugger_local_windows.xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<Import Project="$(OpenConsoleDir)src\cppwinrt.build.post.props" />
|
||||||
|
|
||||||
|
<!-- These have to come after post.props because the Cpp common targets will inexplicably overwrite them. -->
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
|
||||||
|
<!-- <Import Project="$(OpenConsoleDir)\build\rules\GenerateSxsManifestsFromWinmds.targets" /> -->
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="pch.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="pch.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="main.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="PropertySheet.props" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Text Include="readme.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
377
src/tools/ScratchWinRTClient/main.cpp
Normal file
377
src/tools/ScratchWinRTClient/main.cpp
Normal file
@@ -0,0 +1,377 @@
|
|||||||
|
#include "pch.h"
|
||||||
|
#include <conio.h>
|
||||||
|
#include "HostManager.h"
|
||||||
|
#include <winrt/ScratchWinRTServer.h>
|
||||||
|
#include "../../types/inc/utils.hpp"
|
||||||
|
#include "../ScratchWinRTServer/IMyComInterface.h"
|
||||||
|
|
||||||
|
using namespace winrt;
|
||||||
|
using namespace winrt::Windows::Foundation;
|
||||||
|
using namespace ::Microsoft::Console;
|
||||||
|
|
||||||
|
// DAA16D7F-EF66-4FC9-B6F2-3E5B6D924576
|
||||||
|
static constexpr GUID MyStringable_clsid{
|
||||||
|
0xdaa16d7f,
|
||||||
|
0xef66,
|
||||||
|
0x4fc9,
|
||||||
|
{ 0xb6, 0xf2, 0x3e, 0x5b, 0x6d, 0x92, 0x45, 0x76 }
|
||||||
|
};
|
||||||
|
|
||||||
|
// EAA16D7F-EF66-4FC9-B6F2-3E5B6D924576
|
||||||
|
static constexpr GUID ScratchStringable_clsid{
|
||||||
|
0xeaa16d7f,
|
||||||
|
0xef66,
|
||||||
|
0x4fc9,
|
||||||
|
{ 0xb6, 0xf2, 0x3e, 0x5b, 0x6d, 0x92, 0x45, 0x76 }
|
||||||
|
};
|
||||||
|
|
||||||
|
// FAA16D7F-EF66-4FC9-B6F2-3E5B6D924576
|
||||||
|
static constexpr GUID ScratchClass_clsid{
|
||||||
|
0xfaa16d7f,
|
||||||
|
0xef66,
|
||||||
|
0x4fc9,
|
||||||
|
{ 0xb6, 0xf2, 0x3e, 0x5b, 0x6d, 0x92, 0x45, 0x76 }
|
||||||
|
};
|
||||||
|
|
||||||
|
void createExistingObjectApp(int /*argc*/, char** argv)
|
||||||
|
{
|
||||||
|
winrt::guid guidFromCmdline{};
|
||||||
|
std::string guidString{ argv[1] };
|
||||||
|
auto canConvert = guidString.length() == 38 && guidString.front() == '{' && guidString.back() == '}';
|
||||||
|
if (canConvert)
|
||||||
|
{
|
||||||
|
std::wstring wideGuidStr{ til::u8u16(guidString) };
|
||||||
|
printf("\x1b[90mCLIENT: Found GUID:%ls\x1b[m\n", wideGuidStr.c_str());
|
||||||
|
GUID result{};
|
||||||
|
THROW_IF_FAILED(IIDFromString(wideGuidStr.c_str(), &result));
|
||||||
|
guidFromCmdline = result;
|
||||||
|
}
|
||||||
|
if (guidFromCmdline == winrt::guid{})
|
||||||
|
{
|
||||||
|
printf("client did not recieve GUID, early returning.");
|
||||||
|
return; // -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
winrt::ScratchWinRTServer::HostClass host{ nullptr };
|
||||||
|
{
|
||||||
|
HANDLE hProcessToken;
|
||||||
|
|
||||||
|
// Open a handle to the access token for the
|
||||||
|
// calling process that is the currently login access token
|
||||||
|
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hProcessToken))
|
||||||
|
{
|
||||||
|
printf("OpenProcessToken()-Getting the handle to access token failed, error %u\n", GetLastError());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("OpenProcessToken()-Got the handle to access token!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
TOKEN_ELEVATION tokenElevation{ 0 };
|
||||||
|
DWORD neededTokenInformationLength = 0;
|
||||||
|
if (GetTokenInformation(hProcessToken, TOKEN_INFORMATION_CLASS::TokenElevation, &tokenElevation, sizeof(tokenElevation), &neededTokenInformationLength))
|
||||||
|
{
|
||||||
|
printf("GetTokenInformation(TokenElevation) succeeded\n");
|
||||||
|
printf("Token is elevated? - %s\n", (tokenElevation.TokenIsElevated != 0 ? "true" : "false"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto gle = GetLastError();
|
||||||
|
printf("GetTokenInformation(TokenElevation) failed: %d\n", gle);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lets the calling process impersonate the security context of a logged-on user.
|
||||||
|
if (ImpersonateLoggedOnUser(hProcessToken))
|
||||||
|
{
|
||||||
|
printf("ImpersonateLoggedOnUser() is OK.\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("ImpersonateLoggedOnUser() failed, error %u.\n", GetLastError());
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SetThreadToken(nullptr, hProcessToken))
|
||||||
|
{
|
||||||
|
printf("SetThreadToken() succeeded\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("STT failed %x\n", GetLastError());
|
||||||
|
}
|
||||||
|
|
||||||
|
host = create_instance<winrt::ScratchWinRTServer::HostClass>(guidFromCmdline,
|
||||||
|
// CLSCTX_LOCAL_SERVER
|
||||||
|
CLSCTX_LOCAL_SERVER | CLSCTX_ENABLE_CLOAKING
|
||||||
|
//
|
||||||
|
);
|
||||||
|
// Terminates the impersonation of a client.
|
||||||
|
|
||||||
|
if (RevertToSelf())
|
||||||
|
{
|
||||||
|
printf("Impersonation was terminated.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the handle
|
||||||
|
if (CloseHandle(hProcessToken))
|
||||||
|
{
|
||||||
|
printf("Handle to an access token was closed.\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Failed to close the hToken handle! error %x\n", GetLastError());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// auto host = create_instance<winrt::ScratchWinRTServer::HostClass>(guidFromCmdline,
|
||||||
|
// // CLSCTX_LOCAL_SERVER
|
||||||
|
// CLSCTX_LOCAL_SERVER | CLSCTX_ENABLE_CLOAKING
|
||||||
|
// //
|
||||||
|
// );
|
||||||
|
|
||||||
|
if (!host)
|
||||||
|
{
|
||||||
|
printf("Could not get the existing HostClass\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The DoCount could be anything, depending on which of the hosts we're creating.
|
||||||
|
printf("DoCount: %d (Expected: ?)\n",
|
||||||
|
host.DoCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
void createHostClassProcess(const winrt::guid& g)
|
||||||
|
{
|
||||||
|
auto guidStr{ Utils::GuidToString(g) };
|
||||||
|
std::wstring commandline{ fmt::format(L"ScratchWinRTServer.exe {}", guidStr) };
|
||||||
|
STARTUPINFO siOne{ 0 };
|
||||||
|
siOne.cb = sizeof(STARTUPINFOW);
|
||||||
|
wil::unique_process_information piOne;
|
||||||
|
auto succeeded = CreateProcessW(
|
||||||
|
nullptr,
|
||||||
|
commandline.data(),
|
||||||
|
nullptr, // lpProcessAttributes
|
||||||
|
nullptr, // lpThreadAttributes
|
||||||
|
false, // bInheritHandles
|
||||||
|
CREATE_UNICODE_ENVIRONMENT, // dwCreationFlags
|
||||||
|
nullptr, // lpEnvironment
|
||||||
|
nullptr, // startingDirectory
|
||||||
|
&siOne, // lpStartupInfo
|
||||||
|
&piOne // lpProcessInformation
|
||||||
|
);
|
||||||
|
if (!succeeded)
|
||||||
|
{
|
||||||
|
printf("Failed to create first host process\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ooof this is dumb, but we need a sleep here to make the server starts.
|
||||||
|
// That's _sub par_. Maybe we could use the host's stdout to have them emit
|
||||||
|
// a byte when they're set up?
|
||||||
|
Sleep(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void scratchApp()
|
||||||
|
{
|
||||||
|
printf("scratchApp\n");
|
||||||
|
|
||||||
|
// 1. Generate a GUID.
|
||||||
|
// 2. Spawn a Server.exe, with the guid on the commandline
|
||||||
|
// 3. Make an instance of that GUID, as a HostClass
|
||||||
|
// 4. Call HostClass::DoTheThing, and get the count with HostClass::DoCount [1]
|
||||||
|
// 5. Make another instance of HostClass, and get the count with HostClass::DoCount. It should be the same. [1, 1]
|
||||||
|
// 6. On the second HostClass, call DoTheThing. Verify that both instances have the same DoCount. [2. 2]
|
||||||
|
// 7. Create a second Server.exe, and create a Third HostClass, using that GUID.
|
||||||
|
// 8. Call DoTheThing on the third, and verify the counts of all three instances. [2, 2, 1]
|
||||||
|
// 9. QUESTION: Does releasing the first instance leave the first object alive, since the second instance still points at it?
|
||||||
|
|
||||||
|
// 1. Generate a GUID.
|
||||||
|
winrt::guid firstGuid{ Utils::CreateGuid() };
|
||||||
|
|
||||||
|
// 2. Spawn a Server.exe, with the guid on the commandline
|
||||||
|
createHostClassProcess(firstGuid);
|
||||||
|
|
||||||
|
// 3. Make an instance of that GUID, as a HostClass
|
||||||
|
printf("Trying to directly create a HostClass...\n");
|
||||||
|
auto firstHost = create_instance<winrt::ScratchWinRTServer::HostClass>(firstGuid, CLSCTX_LOCAL_SERVER);
|
||||||
|
|
||||||
|
if (!firstHost)
|
||||||
|
{
|
||||||
|
printf("Could not get the first HostClass\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("DoCount: %d (Expected: 0)\n",
|
||||||
|
firstHost.DoCount());
|
||||||
|
// 4. Call HostClass::DoTheThing, and get the count with HostClass::DoCount [1]
|
||||||
|
firstHost.DoTheThing();
|
||||||
|
printf("DoCount: %d (Expected: 1)\n",
|
||||||
|
firstHost.DoCount());
|
||||||
|
|
||||||
|
// 5. Make another instance of HostClass, and get the count with HostClass::DoCount. It should be the same. [1, 1]
|
||||||
|
auto secondHost = create_instance<winrt::ScratchWinRTServer::HostClass>(firstGuid, CLSCTX_LOCAL_SERVER);
|
||||||
|
if (!secondHost)
|
||||||
|
{
|
||||||
|
printf("Could not get the second HostClass\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
printf("DoCount: [%d, %d] (Expected: [1, 1])\n",
|
||||||
|
firstHost.DoCount(),
|
||||||
|
secondHost.DoCount());
|
||||||
|
|
||||||
|
// 6. On the second HostClass, call DoTheThing. Verify that both instances have the same DoCount. [2. 2]
|
||||||
|
secondHost.DoTheThing();
|
||||||
|
printf("DoCount: [%d, %d] (Expected: [2, 2])\n",
|
||||||
|
firstHost.DoCount(),
|
||||||
|
secondHost.DoCount());
|
||||||
|
|
||||||
|
// 7. Create a second Server.exe, and create a Third HostClass, using that GUID.
|
||||||
|
winrt::guid secondGuid{ Utils::CreateGuid() };
|
||||||
|
createHostClassProcess(secondGuid);
|
||||||
|
auto thirdHost = create_instance<winrt::ScratchWinRTServer::HostClass>(secondGuid, CLSCTX_LOCAL_SERVER);
|
||||||
|
if (!thirdHost)
|
||||||
|
{
|
||||||
|
printf("Could not get the third HostClass\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
printf("DoCount: [%d, %d, %d] (Expected: [2, 2, 0])\n",
|
||||||
|
firstHost.DoCount(),
|
||||||
|
secondHost.DoCount(),
|
||||||
|
thirdHost.DoCount());
|
||||||
|
// 8. Call DoTheThing on the third, and verify the counts of all three instances. [2, 2, 1]
|
||||||
|
thirdHost.DoTheThing();
|
||||||
|
printf("DoCount: [%d, %d, %d] (Expected: [2, 2, 1])\n",
|
||||||
|
firstHost.DoCount(),
|
||||||
|
secondHost.DoCount(),
|
||||||
|
thirdHost.DoCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
static void printHosts(const ScratchWinRTClient::HostManager& manager)
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
for (const auto& h : manager.Hosts())
|
||||||
|
{
|
||||||
|
auto guidStr{ Utils::GuidToString(h.Id()) };
|
||||||
|
printf("Host[%d]: DoCount=%d %ls\n", index, h.DoCount(), guidStr.c_str());
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
if (index == 0)
|
||||||
|
{
|
||||||
|
printf("<No hosts>\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void managerApp()
|
||||||
|
{
|
||||||
|
ScratchWinRTClient::HostManager manager;
|
||||||
|
printHosts(manager);
|
||||||
|
|
||||||
|
printf("Create host 0:\n");
|
||||||
|
auto host0 = manager.CreateHost();
|
||||||
|
printHosts(manager);
|
||||||
|
|
||||||
|
printf("Create host 1:\n");
|
||||||
|
auto host1 = manager.CreateHost();
|
||||||
|
host1.DoTheThing();
|
||||||
|
printHosts(manager);
|
||||||
|
|
||||||
|
printf("Create host 2:\n");
|
||||||
|
auto host2 = manager.CreateHost();
|
||||||
|
host2.DoTheThing();
|
||||||
|
host2.DoTheThing();
|
||||||
|
printHosts(manager);
|
||||||
|
|
||||||
|
printf("Create host 3:\n");
|
||||||
|
auto host3 = manager.CreateHost();
|
||||||
|
host3.DoTheThing();
|
||||||
|
host3.DoTheThing();
|
||||||
|
host3.DoTheThing();
|
||||||
|
printHosts(manager);
|
||||||
|
|
||||||
|
printf("increment host 0:\n");
|
||||||
|
|
||||||
|
host0.DoTheThing();
|
||||||
|
host0.DoTheThing();
|
||||||
|
host0.DoTheThing();
|
||||||
|
host0.DoTheThing();
|
||||||
|
printHosts(manager);
|
||||||
|
|
||||||
|
// return;
|
||||||
|
|
||||||
|
bool exitRequested = false;
|
||||||
|
while (!exitRequested)
|
||||||
|
{
|
||||||
|
printf("-----------------------------\n");
|
||||||
|
printf("input a command (l, i, c, q): ");
|
||||||
|
const auto ch = _getch();
|
||||||
|
printf("\n");
|
||||||
|
if (ch == 'l')
|
||||||
|
{
|
||||||
|
printHosts(manager);
|
||||||
|
}
|
||||||
|
else if (ch == 'i')
|
||||||
|
{
|
||||||
|
printf("input a host to increment: ");
|
||||||
|
const auto ch2 = _getch();
|
||||||
|
if (ch2 >= '0' && ch2 <= '9')
|
||||||
|
{
|
||||||
|
uint32_t index = ((int)(ch2)) - ((int)('0'));
|
||||||
|
if (index < manager.Hosts().Size())
|
||||||
|
{
|
||||||
|
manager.Hosts().GetAt(index).DoTheThing();
|
||||||
|
printHosts(manager);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ch == 'c')
|
||||||
|
{
|
||||||
|
printf("Creating a new host\n");
|
||||||
|
manager.CreateHost();
|
||||||
|
printHosts(manager);
|
||||||
|
}
|
||||||
|
else if (ch == 'q')
|
||||||
|
{
|
||||||
|
exitRequested = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
auto hOut = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
|
DWORD dwMode = 0;
|
||||||
|
GetConsoleMode(hOut, &dwMode);
|
||||||
|
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
|
||||||
|
SetConsoleMode(hOut, dwMode);
|
||||||
|
|
||||||
|
init_apartment();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// If a GUID was passed on the commandline, then try to instead make an instance of that class.
|
||||||
|
if (argc > 1)
|
||||||
|
{
|
||||||
|
createExistingObjectApp(argc, argv);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
managerApp();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (hresult_error const& e)
|
||||||
|
{
|
||||||
|
printf("Error: %ls\n", e.message().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// managerApp();
|
||||||
|
// }
|
||||||
|
// catch (hresult_error const& e)
|
||||||
|
// {
|
||||||
|
// printf("Error: %ls\n", e.message().c_str());
|
||||||
|
// }
|
||||||
|
|
||||||
|
// printf("Press Enter me when you're done.");
|
||||||
|
// getchar();
|
||||||
|
printf("Exiting client");
|
||||||
|
}
|
||||||
4
src/tools/ScratchWinRTClient/packages.config
Normal file
4
src/tools/ScratchWinRTClient/packages.config
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.200609.3" targetFramework="native" />
|
||||||
|
</packages>
|
||||||
1
src/tools/ScratchWinRTClient/pch.cpp
Normal file
1
src/tools/ScratchWinRTClient/pch.cpp
Normal file
@@ -0,0 +1 @@
|
|||||||
|
#include "pch.h"
|
||||||
28
src/tools/ScratchWinRTClient/pch.h
Normal file
28
src/tools/ScratchWinRTClient/pch.h
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
// Manually include til after we include Windows.Foundation to give it winrt superpowers
|
||||||
|
#define BLOCK_TIL
|
||||||
|
#include <wil/cppwinrt.h>
|
||||||
|
#undef max
|
||||||
|
#undef min
|
||||||
|
#include "LibraryIncludes.h"
|
||||||
|
|
||||||
|
// This is inexplicable, but for whatever reason, cppwinrt conflicts with the
|
||||||
|
// SDK definition of this function, so the only fix is to undef it.
|
||||||
|
// from WinBase.h
|
||||||
|
// Windows::UI::Xaml::Media::Animation::IStoryboard::GetCurrentTime
|
||||||
|
#ifdef GetCurrentTime
|
||||||
|
#undef GetCurrentTime
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <Unknwn.h>
|
||||||
|
#include <winrt/Windows.Foundation.h>
|
||||||
|
#include <winrt/Windows.Foundation.Collections.h>
|
||||||
|
|
||||||
|
#include <winrt/Windows.UI.Xaml.Controls.h>
|
||||||
|
#include <winrt/Windows.UI.Xaml.Media.h>
|
||||||
|
#include <windows.ui.xaml.media.dxinterop.h>
|
||||||
|
|
||||||
|
// Manually include til after we include Windows.Foundation to give it winrt superpowers
|
||||||
|
#include "til.h"
|
||||||
30
src/tools/ScratchWinRTClient/readme.txt
Normal file
30
src/tools/ScratchWinRTClient/readme.txt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
========================================================================
|
||||||
|
C++/WinRT ScratchWinRTClient Project Overview
|
||||||
|
========================================================================
|
||||||
|
|
||||||
|
This project demonstrates how to get started consuming Windows Runtime
|
||||||
|
classes directly from standard C++, using platform projection headers
|
||||||
|
generated from Windows SDK metadata files.
|
||||||
|
|
||||||
|
Steps to generate and consume SDK platform projection:
|
||||||
|
1. Build project initally to generate platform projection headers into
|
||||||
|
your Generated Files folder.
|
||||||
|
2. Include a projection namespace header in your pch.h, such as
|
||||||
|
<winrt/Windows.Foundation.h>.
|
||||||
|
3. Consume winrt namespace and any Windows Runtime namespaces, such as
|
||||||
|
winrt::Windows::Foundation, from source code.
|
||||||
|
4. Initialize apartment via init_apartment() and consume winrt classes.
|
||||||
|
|
||||||
|
Steps to generate and consume a projection from third party metadata:
|
||||||
|
1. Add a WinMD reference by right-clicking the References project node
|
||||||
|
and selecting "Add Reference...". In the Add References dialog,
|
||||||
|
browse to the component WinMD you want to consume and add it.
|
||||||
|
2. Build the project once to generate projection headers for the
|
||||||
|
referenced WinMD file under the "Generated Files" subfolder.
|
||||||
|
3. As above, include projection headers in pch or source code
|
||||||
|
to consume projected Windows Runtime classes.
|
||||||
|
|
||||||
|
========================================================================
|
||||||
|
Learn more about C++/WinRT here:
|
||||||
|
http://aka.ms/cppwinrt/
|
||||||
|
========================================================================
|
||||||
411
src/tools/ScratchWinRTServer/HostClass.cpp
Normal file
411
src/tools/ScratchWinRTServer/HostClass.cpp
Normal file
@@ -0,0 +1,411 @@
|
|||||||
|
#include "pch.h"
|
||||||
|
#include <argb.h>
|
||||||
|
#include <DefaultSettings.h>
|
||||||
|
#include "HostClass.h"
|
||||||
|
#include "HostClass.g.cpp"
|
||||||
|
|
||||||
|
// #include <wrl.h>
|
||||||
|
extern std::mutex m;
|
||||||
|
extern std::condition_variable cv;
|
||||||
|
extern bool dtored;
|
||||||
|
|
||||||
|
using namespace ::Microsoft::Console::Types;
|
||||||
|
using namespace ::Microsoft::Terminal::Core;
|
||||||
|
using namespace winrt::Windows::UI::Xaml;
|
||||||
|
using namespace winrt::Windows::UI::Xaml::Input;
|
||||||
|
using namespace winrt::Windows::UI::Xaml::Automation::Peers;
|
||||||
|
using namespace winrt::Windows::UI::Core;
|
||||||
|
using namespace winrt::Windows::UI::ViewManagement;
|
||||||
|
using namespace winrt::Windows::UI::Input;
|
||||||
|
using namespace winrt::Windows::System;
|
||||||
|
// using namespace winrt::Microsoft::Terminal::Settings;
|
||||||
|
// using namespace winrt::Windows::ApplicationModel::DataTransfer;
|
||||||
|
|
||||||
|
namespace winrt::ScratchWinRTServer::implementation
|
||||||
|
{
|
||||||
|
HostClass::HostClass(const winrt::guid& g) :
|
||||||
|
_id{ g },
|
||||||
|
_desiredFont{ DEFAULT_FONT_FACE, 0, DEFAULT_FONT_WEIGHT, { 0, DEFAULT_FONT_SIZE }, CP_UTF8 },
|
||||||
|
_actualFont{ DEFAULT_FONT_FACE, 0, DEFAULT_FONT_WEIGHT, { 0, DEFAULT_FONT_SIZE }, CP_UTF8, false }
|
||||||
|
{
|
||||||
|
printf("HostClass()\n");
|
||||||
|
|
||||||
|
_terminal = std::make_unique<::Microsoft::Terminal::Core::Terminal>();
|
||||||
|
// _settings = winrt::Microsoft::Terminal::Settings::TerminalSettings();
|
||||||
|
|
||||||
|
// auto fontSize = _settings.FontSize();
|
||||||
|
// const auto newSize = std::max<short>(gsl::narrow_cast<short>(fontSize), 1);
|
||||||
|
// const auto fontFace = _settings.FontFace();
|
||||||
|
// const auto fontWeight = _settings.FontWeight();
|
||||||
|
// _actualFont = { fontFace, 0, fontWeight.Weight, { 0, newSize }, CP_UTF8, false };
|
||||||
|
// _desiredFont = { _actualFont };
|
||||||
|
}
|
||||||
|
HostClass::~HostClass()
|
||||||
|
{
|
||||||
|
printf("~HostClass()\n");
|
||||||
|
std::unique_lock<std::mutex> lk(m);
|
||||||
|
dtored = true;
|
||||||
|
cv.notify_one();
|
||||||
|
}
|
||||||
|
int HostClass::DoCount()
|
||||||
|
{
|
||||||
|
return _DoCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HostClass::DoTheThing()
|
||||||
|
{
|
||||||
|
_DoCount++;
|
||||||
|
}
|
||||||
|
winrt::guid HostClass::Id()
|
||||||
|
{
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// HRESULT __stdcall HostClass::Call()
|
||||||
|
// {
|
||||||
|
// _DoCount += 4;
|
||||||
|
// return S_OK;
|
||||||
|
// }
|
||||||
|
|
||||||
|
void HostClass::Attach(Windows::UI::Xaml::Controls::SwapChainPanel panel)
|
||||||
|
{
|
||||||
|
// /*onecore\com\combase\winrt\error \restrictederror.cpp(3285)\combase.dll !00007FFD9313FF74 : (caller : 00007FFD9313F147)ReturnHr(1) tid(5af0) 80070057 The parameter is incorrect.Exception thrown at 0x00007FFD918422CC(KernelBase.dll)in ScratchIsland.exe : WinRT originate error - 0x80040155 : 'Failed to find proxy registration for IID: {FCC4566D-82DC-5D36-BB84-3DA4F0926318}.'.'ScratchIsland.exe'(Win32) :
|
||||||
|
// Loaded 'C:\Windows\System32\rometadata.dll'.Symbol loading disabled by Include / Exclude setting.'ScratchIsland.exe'(Win32) :
|
||||||
|
// Loaded 'C:\Users\migrie\dev\private\OpenConsole\x64\Debug\ScratchWinRTServer.winmd'.Module was built without symbols.'ScratchIsland.exe'(Win32) :
|
||||||
|
// Loaded 'C:\Windows\System32\WinMetadata\Windows.UI.Xaml.winmd'.Module was built without symbols.Exception thrown at 0x00007FFD918422CC(KernelBase.dll)in ScratchIsland.exe : WinRT originate error -
|
||||||
|
// 0x80040155 : 'Failed to find proxy registration for IID: {C589644F-EBA8-427A-B75A-9F1F93A11AE9}.'.'ScratchIsland.exe'(Win32) :
|
||||||
|
// Loaded 'C:\Windows\System32\WinMetadata\Windows.Foundation.winmd'.Module was built without symbols.'ScratchIsland.exe'(Win32) :
|
||||||
|
// Loaded 'C:\Windows\System32\WinMetadata\Windows.UI.winmd'.Module was built without symbols.Exception thrown at 0x00007FFD918422CC(KernelBase.dll)in ScratchWinRTServer.exe : WinRT originate error -
|
||||||
|
// 0x80040155 : 'Failed to find proxy registration for IID: {C589644F-EBA8-427A-B75A-9F1F93A11AE9}.'.'ScratchWinRTServer.exe'(Win32) :
|
||||||
|
// Loaded 'C:\Windows\System32\WinMetadata\Windows.Foundation.winmd'.Module was built without symbols.'ScratchWinRTServer.exe'(Win32) :
|
||||||
|
// Loaded 'C:\Windows\System32\WinMetadata\Windows.UI.winmd'.Module was built without symbols.Exception thrown at 0x00007FFD918422CC(KernelBase.dll)in ScratchIsland.exe : WinRT originate error -
|
||||||
|
// 0x80040155 : 'Failed to find proxy registration for IID: {D5A2F60C-37B2-44A2-937B-8D8EB9726821}.'.*/
|
||||||
|
|
||||||
|
// {
|
||||||
|
// auto f = winrt::get_abi(panel);
|
||||||
|
// // auto whatEvenIsThis = &panel;
|
||||||
|
// // IUnknown* dummy{ reinterpret_cast<IUnknown*>(&panel) };
|
||||||
|
// IUnknown* dummy{ reinterpret_cast<IUnknown*>(f) };
|
||||||
|
// ::Microsoft::WRL::ComPtr<ISwapChainPanelNative2> panelNative0;
|
||||||
|
// winrt::guid g{ __uuidof(**(&panelNative0)) };
|
||||||
|
// g;
|
||||||
|
// dummy->QueryInterface(IID_PPV_ARGS(&panelNative0));
|
||||||
|
// // // panelNative->SetSwapChainHandle(m_swapChainHandle);
|
||||||
|
|
||||||
|
// // // auto nativePanel2 = panel.try_as<ISwapChainPanelNative2>();
|
||||||
|
// // // if (nativePanel2)
|
||||||
|
// if (panelNative0)
|
||||||
|
// {
|
||||||
|
// printf("Got the nativePanel2\n");
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// printf("Couldn't reinterpret_cast\n");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // // _panel = panel;
|
||||||
|
// // // nativePanel2;
|
||||||
|
// // panelNative;
|
||||||
|
|
||||||
|
// // winrt::com_ptr<ISwapChainPanelNative2> native;
|
||||||
|
// winrt::com_ptr<IUnknown> iunk = panel.try_as<IUnknown>();
|
||||||
|
// if (iunk)
|
||||||
|
// {
|
||||||
|
// printf("Got the IUnknown\n");
|
||||||
|
// ////////////////////////////////////////////////////////////////////
|
||||||
|
// auto nativePanel2 = iunk.try_as<ISwapChainPanelNative2>();
|
||||||
|
// if (nativePanel2)
|
||||||
|
// {
|
||||||
|
// printf("Got the nativePanel2\n");
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// printf("Couldn't try_as to get the ISwapChainPanelNative2\n");
|
||||||
|
// }
|
||||||
|
// nativePanel2;
|
||||||
|
// ////////////////////////////////////////////////////////////////////
|
||||||
|
// ::Microsoft::WRL::ComPtr<ISwapChainPanelNative2> panelNative;
|
||||||
|
// iunk->QueryInterface(IID_PPV_ARGS(&panelNative));
|
||||||
|
// if (panelNative)
|
||||||
|
// {
|
||||||
|
// printf("Got the panelNative\n");
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// printf("Couldn't QueryInterface to get the ISwapChainPanelNative2\n");
|
||||||
|
// }
|
||||||
|
// ////////////////////////////////////////////////////////////////////
|
||||||
|
// IUnknown* foo = iunk.get();
|
||||||
|
// foo->QueryInterface(IID_PPV_ARGS(&panelNative));
|
||||||
|
// if (panelNative)
|
||||||
|
// {
|
||||||
|
// printf("Got the panelNative\n");
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// printf("This didn't work either\n");
|
||||||
|
// }
|
||||||
|
// ////////////////////////////////////////////////////////////////////
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// printf("Couldn't try_as to get the IUnknown\n");
|
||||||
|
// }
|
||||||
|
// iunk;
|
||||||
|
|
||||||
|
// // // DO NOT UNDER ANY CIRCUMSTANCE DO THIS
|
||||||
|
// //
|
||||||
|
// // winrt::Windows::UI::Xaml::Media::SolidColorBrush solidColor{};
|
||||||
|
// // til::color newBgColor{ 0x8F000000 };
|
||||||
|
// // solidColor.Color(newBgColor);
|
||||||
|
// // _panel.Background(solidColor);
|
||||||
|
// //
|
||||||
|
// // ANYTHING WE DO TO THE SWAPCHAINPANEL on this thread is NOT the UI thread. It can't _possibly_ be.
|
||||||
|
|
||||||
|
printf("Hey dummy, we're not using Attach() anymore\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void HostClass::BeginRendering()
|
||||||
|
{
|
||||||
|
// IDXGISwapChain1* swapChain; // = _getSwapchainFromMyRenderer();
|
||||||
|
|
||||||
|
// // DANGER: I'm fairly certain that this needs to be called on the
|
||||||
|
// // `SwapChainPanel`s UI thread. So we may be slightly out of luck here.
|
||||||
|
// // Unless we can just
|
||||||
|
// // co_await winrt::resume_foreground(_panel.Dispatcher());
|
||||||
|
// // But that's a thread in another process!
|
||||||
|
|
||||||
|
// auto nativePanel = _panel.as<ISwapChainPanelNative>();
|
||||||
|
// nativePanel->SetSwapChain(swapChain);
|
||||||
|
|
||||||
|
// Holy crap look at:
|
||||||
|
// ISwapChainPanelNative2::SetSwapChainHandle method
|
||||||
|
// https://docs.microsoft.com/en-us/windows/win32/api/windows.ui.xaml.media.dxinterop/nf-windows-ui-xaml-media-dxinterop-iswapchainpanelnative2-setswapchainhandle
|
||||||
|
//
|
||||||
|
// SetSwapChain(HANDLE swapChainHandle) allows a swap chain to be
|
||||||
|
// rendered by referencing a shared handle to the swap chain. This
|
||||||
|
// enables scenarios where a swap chain is created in one process and
|
||||||
|
// needs to be passed to another process.
|
||||||
|
//
|
||||||
|
// XAML supports setting a DXGI swap chain as the content of a
|
||||||
|
// SwapChainPanel element. Apps accomplish this by querying for the
|
||||||
|
// ISwapChainPanelNative interface from a SwapChainPanel instance and
|
||||||
|
// calling SetSwapChain(IDXGISwapChain *swapChain).
|
||||||
|
//
|
||||||
|
// This process works for pointers to in process swap chains. However,
|
||||||
|
// this doesn’t work for VoIP apps, which use a two-process model to
|
||||||
|
// enable continuing calls on a background process when a foreground
|
||||||
|
// process is suspended or shut down. This two-process implementation
|
||||||
|
// requires the ability to pass a shared handle to a swap chain, rather
|
||||||
|
// than a pointer, created on the background process to the foreground
|
||||||
|
// process to be rendered in a XAML SwapChainPanel in the foreground
|
||||||
|
// app.
|
||||||
|
|
||||||
|
// I _believe_ this will work something like:
|
||||||
|
//
|
||||||
|
// HANDLE hSwapChain;
|
||||||
|
// auto nativePanel2 = _panel.as<ISwapChainPanelNative2>();
|
||||||
|
// nativePanel2->SetSwapChainHandle(hSwapChain);
|
||||||
|
//
|
||||||
|
// But I'm not sure yet.
|
||||||
|
|
||||||
|
_InitializeTerminal();
|
||||||
|
}
|
||||||
|
|
||||||
|
void HostClass::RenderEngineSwapChainChanged()
|
||||||
|
{
|
||||||
|
// // This event is only registered during terminal initialization,
|
||||||
|
// // so we don't need to check _initializedTerminal.
|
||||||
|
// // We also don't lock for things that come back from the renderer.
|
||||||
|
// auto chainHandle = _renderEngine->GetSwapChainHandle();
|
||||||
|
// auto weakThis{ get_weak() };
|
||||||
|
|
||||||
|
// // co_await winrt::resume_foreground(Dispatcher());
|
||||||
|
|
||||||
|
// // if (auto control{ weakThis.get() })
|
||||||
|
// // {
|
||||||
|
// // _AttachDxgiSwapChainToXaml(chainHandle);
|
||||||
|
// // }
|
||||||
|
}
|
||||||
|
|
||||||
|
// void HostClass::_AttachDxgiSwapChainToXaml(HANDLE swapChainHandle)
|
||||||
|
// {
|
||||||
|
// // NOPE DONT DO THIS
|
||||||
|
// // auto nativePanel = _panel.as<ISwapChainPanelNative2>();
|
||||||
|
// // nativePanel->SetSwapChainHandle(swapChainHandle);
|
||||||
|
// }
|
||||||
|
|
||||||
|
void HostClass::ThisIsInsane(uint64_t swapchainHandle)
|
||||||
|
{
|
||||||
|
HANDLE foo = (HANDLE)swapchainHandle;
|
||||||
|
_hSwapchain.reset(foo);
|
||||||
|
// _hSwapchain.put((HANDLE)swapchainHandle);
|
||||||
|
// _hSwapchain = (HANDLE)swapchainHandle;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HostClass::_InitializeTerminal()
|
||||||
|
{
|
||||||
|
{ // scope for terminalLock
|
||||||
|
auto terminalLock = _terminal->LockForWriting();
|
||||||
|
|
||||||
|
if (_initializedTerminal)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// const auto actualWidth = _panel.ActualWidth();
|
||||||
|
// const auto actualHeight = _panel.ActualHeight();
|
||||||
|
// const auto windowWidth = actualWidth * _panel.CompositionScaleX(); // Width() and Height() are NaN?
|
||||||
|
// const auto windowHeight = actualHeight * _panel.CompositionScaleY();
|
||||||
|
|
||||||
|
const auto actualWidth = 400; //_panel.ActualWidth();
|
||||||
|
const auto actualHeight = 150; //_panel.ActualHeight();
|
||||||
|
const auto windowWidth = 400.0; // actualWidth * _panel.CompositionScaleX(); // Width() and Height() are NaN?
|
||||||
|
const auto windowHeight = 150.0; // actualHeight * _panel.CompositionScaleY();
|
||||||
|
|
||||||
|
if (windowWidth == 0 || windowHeight == 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// First create the render thread.
|
||||||
|
// Then stash a local pointer to the render thread so we can initialize it and enable it
|
||||||
|
// to paint itself *after* we hand off its ownership to the renderer.
|
||||||
|
// We split up construction and initialization of the render thread object this way
|
||||||
|
// because the renderer and render thread have circular references to each other.
|
||||||
|
auto renderThread = std::make_unique<::Microsoft::Console::Render::RenderThread>();
|
||||||
|
auto* const localPointerToThread = renderThread.get();
|
||||||
|
|
||||||
|
// Now create the renderer and initialize the render thread.
|
||||||
|
_renderer = std::make_unique<::Microsoft::Console::Render::Renderer>(_terminal.get(), nullptr, 0, std::move(renderThread));
|
||||||
|
// ::Microsoft::Console::Render::IRenderTarget& renderTarget = *_renderer;
|
||||||
|
|
||||||
|
// _renderer->SetRendererEnteredErrorStateCallback([weakThis = get_weak()]() {
|
||||||
|
// if (auto strongThis{ weakThis.get() })
|
||||||
|
// {
|
||||||
|
// strongThis->_RendererEnteredErrorState();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
THROW_IF_FAILED(localPointerToThread->Initialize(_renderer.get()));
|
||||||
|
|
||||||
|
// Set up the DX Engine
|
||||||
|
auto dxEngine = std::make_unique<::Microsoft::Console::Render::DxEngine>();
|
||||||
|
dxEngine->_swapChainHandle.swap(_hSwapchain);
|
||||||
|
_renderer->AddRenderEngine(dxEngine.get());
|
||||||
|
|
||||||
|
// Initialize our font with the renderer
|
||||||
|
// We don't have to care about DPI. We'll get a change message immediately if it's not 96
|
||||||
|
// and react accordingly.
|
||||||
|
// _UpdateFont(true); // <-- TODO
|
||||||
|
_renderer->TriggerFontChange(96, _desiredFont, _actualFont); // "UpdateFont"
|
||||||
|
|
||||||
|
const COORD windowSize{ static_cast<short>(windowWidth), static_cast<short>(windowHeight) };
|
||||||
|
|
||||||
|
// Fist set up the dx engine with the window size in pixels.
|
||||||
|
// Then, using the font, get the number of characters that can fit.
|
||||||
|
// Resize our terminal connection to match that size, and initialize the terminal with that size.
|
||||||
|
const auto viewInPixels = Viewport::FromDimensions({ 0, 0 }, windowSize);
|
||||||
|
THROW_IF_FAILED(dxEngine->SetWindowSize({ viewInPixels.Width(), viewInPixels.Height() }));
|
||||||
|
|
||||||
|
// Update DxEngine's SelectionBackground
|
||||||
|
// dxEngine->SetSelectionBackground(_settings.SelectionBackground());
|
||||||
|
|
||||||
|
const auto vp = dxEngine->GetViewportInCharacters(viewInPixels);
|
||||||
|
const auto width = vp.Width();
|
||||||
|
const auto height = vp.Height();
|
||||||
|
// _connection.Resize(height, width); // <-- TODO
|
||||||
|
|
||||||
|
// Override the default width and height to match the size of the swapChainPanel
|
||||||
|
// _settings.InitialCols(width); // <-- TODO
|
||||||
|
// _settings.InitialRows(height); // <-- TODO
|
||||||
|
// _settings.DefaultBackground(til::color{ 255, 0, 255, 255 }); //rgba
|
||||||
|
// _settings.DefaultForeground(til::color{ 0, 0, 0, 255 }); //rgba
|
||||||
|
// _terminal->CreateFromSettings(_settings, renderTarget); // <-- TODO
|
||||||
|
|
||||||
|
dxEngine->SetRetroTerminalEffects(false);
|
||||||
|
dxEngine->SetForceFullRepaintRendering(false);
|
||||||
|
dxEngine->SetSoftwareRendering(false);
|
||||||
|
|
||||||
|
// // Update DxEngine's AntialiasingMode
|
||||||
|
// switch (_settings.AntialiasingMode())
|
||||||
|
// {
|
||||||
|
// case TextAntialiasingMode::Cleartype:
|
||||||
|
// dxEngine->SetAntialiasingMode(D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE);
|
||||||
|
// break;
|
||||||
|
// case TextAntialiasingMode::Aliased:
|
||||||
|
// dxEngine->SetAntialiasingMode(D2D1_TEXT_ANTIALIAS_MODE_ALIASED);
|
||||||
|
// break;
|
||||||
|
// case TextAntialiasingMode::Grayscale:
|
||||||
|
// default:
|
||||||
|
// dxEngine->SetAntialiasingMode(D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE);
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // GH#5098: Inform the engine of the opacity of the default text background.
|
||||||
|
// if (_settings.UseAcrylic())
|
||||||
|
// {
|
||||||
|
// dxEngine->SetDefaultTextBackgroundOpacity(::base::saturated_cast<float>(_settings.TintOpacity()));
|
||||||
|
// }
|
||||||
|
|
||||||
|
THROW_IF_FAILED(dxEngine->Enable());
|
||||||
|
_renderEngine = std::move(dxEngine);
|
||||||
|
|
||||||
|
// _AttachDxgiSwapChainToXaml(_renderEngine->GetSwapChainHandle());
|
||||||
|
|
||||||
|
// Tell the DX Engine to notify us when the swap chain changes.
|
||||||
|
// We do this after we initially set the swapchain so as to avoid unnecessary callbacks (and locking problems)
|
||||||
|
_renderEngine->SetCallback(std::bind(&HostClass::RenderEngineSwapChainChanged, this));
|
||||||
|
|
||||||
|
// auto bottom = _terminal->GetViewport().BottomExclusive();
|
||||||
|
// auto bufferHeight = bottom;
|
||||||
|
|
||||||
|
// ScrollBar().Maximum(bufferHeight - bufferHeight);
|
||||||
|
// ScrollBar().Minimum(0);
|
||||||
|
// ScrollBar().Value(0);
|
||||||
|
// ScrollBar().ViewportSize(bufferHeight);
|
||||||
|
|
||||||
|
localPointerToThread->EnablePainting();
|
||||||
|
|
||||||
|
// // Set up blinking cursor
|
||||||
|
// int blinkTime = GetCaretBlinkTime();
|
||||||
|
// if (blinkTime != INFINITE)
|
||||||
|
// {
|
||||||
|
// // Create a timer
|
||||||
|
// DispatcherTimer cursorTimer;
|
||||||
|
// cursorTimer.Interval(std::chrono::milliseconds(blinkTime));
|
||||||
|
// cursorTimer.Tick({ get_weak(), &TermControl::_CursorTimerTick });
|
||||||
|
// cursorTimer.Start();
|
||||||
|
// _cursorTimer.emplace(std::move(cursorTimer));
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// // The user has disabled cursor blinking
|
||||||
|
// _cursorTimer = std::nullopt;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // import value from WinUser (convert from milli-seconds to micro-seconds)
|
||||||
|
// _multiClickTimer = GetDoubleClickTime() * 1000;
|
||||||
|
|
||||||
|
// // Focus the control here. If we do it during control initialization, then
|
||||||
|
// // focus won't actually get passed to us. I believe this is because
|
||||||
|
// // we're not technically a part of the UI tree yet, so focusing us
|
||||||
|
// // becomes a no-op.
|
||||||
|
// this->Focus(FocusState::Programmatic);
|
||||||
|
|
||||||
|
_initializedTerminal = true;
|
||||||
|
} // scope for TerminalLock
|
||||||
|
|
||||||
|
// Start the connection outside of lock, because it could
|
||||||
|
// start writing output immediately.
|
||||||
|
// _connection.Start(); // <-- TODO
|
||||||
|
|
||||||
|
// Likewise, run the event handlers outside of lock (they could
|
||||||
|
// be reentrant)
|
||||||
|
// _InitializedHandlers(*this, nullptr);
|
||||||
|
|
||||||
|
_terminal->Write(L"Hello world from another process");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
57
src/tools/ScratchWinRTServer/HostClass.h
Normal file
57
src/tools/ScratchWinRTServer/HostClass.h
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "HostClass.g.h"
|
||||||
|
// #include "IMyComInterface.h"
|
||||||
|
#include <winrt/Microsoft.Terminal.TerminalConnection.h>
|
||||||
|
#include "../../renderer/base/Renderer.hpp"
|
||||||
|
#include "../../renderer/dx/DxRenderer.hpp"
|
||||||
|
#include "../../renderer/uia/UiaRenderer.hpp"
|
||||||
|
#include "../../cascadia/TerminalCore/Terminal.hpp"
|
||||||
|
|
||||||
|
namespace winrt::ScratchWinRTServer::implementation
|
||||||
|
{
|
||||||
|
struct HostClass : HostClassT<HostClass /*, IMyComInterface*/>
|
||||||
|
{
|
||||||
|
HostClass(const winrt::guid& g);
|
||||||
|
~HostClass();
|
||||||
|
void DoTheThing();
|
||||||
|
|
||||||
|
int DoCount();
|
||||||
|
winrt::guid Id();
|
||||||
|
|
||||||
|
// HRESULT __stdcall Call() override;
|
||||||
|
|
||||||
|
void Attach(Windows::UI::Xaml::Controls::SwapChainPanel panel);
|
||||||
|
void BeginRendering();
|
||||||
|
|
||||||
|
void RenderEngineSwapChainChanged();
|
||||||
|
|
||||||
|
void ThisIsInsane(uint64_t swapchainHandle);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int _DoCount{ 0 };
|
||||||
|
winrt::guid _id;
|
||||||
|
wil::unique_handle _hSwapchain{ INVALID_HANDLE_VALUE };
|
||||||
|
Windows::UI::Xaml::Controls::SwapChainPanel _panel{ nullptr };
|
||||||
|
|
||||||
|
bool _initializedTerminal{ false };
|
||||||
|
winrt::Microsoft::Terminal::TerminalConnection::ITerminalConnection _connection;
|
||||||
|
std::unique_ptr<::Microsoft::Terminal::Core::Terminal> _terminal;
|
||||||
|
FontInfoDesired _desiredFont;
|
||||||
|
FontInfo _actualFont;
|
||||||
|
|
||||||
|
std::unique_ptr<::Microsoft::Console::Render::Renderer> _renderer;
|
||||||
|
std::unique_ptr<::Microsoft::Console::Render::DxEngine> _renderEngine;
|
||||||
|
// winrt::Microsoft::Terminal::Settings::IControlSettings _settings{ nullptr };
|
||||||
|
// void _AttachDxgiSwapChainToXaml(HANDLE swapChainHandle);
|
||||||
|
|
||||||
|
bool _InitializeTerminal();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace winrt::ScratchWinRTServer::factory_implementation
|
||||||
|
{
|
||||||
|
struct HostClass : HostClassT<HostClass, implementation::HostClass>
|
||||||
|
{
|
||||||
|
};
|
||||||
|
}
|
||||||
22
src/tools/ScratchWinRTServer/HostClass.idl
Normal file
22
src/tools/ScratchWinRTServer/HostClass.idl
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
|
||||||
|
namespace ScratchWinRTServer
|
||||||
|
{
|
||||||
|
[default_interface] runtimeclass HostClass // : IScratchInterface
|
||||||
|
{
|
||||||
|
HostClass(Guid g);
|
||||||
|
void DoTheThing();
|
||||||
|
Int32 DoCount { get; };
|
||||||
|
Guid Id { get; };
|
||||||
|
|
||||||
|
void Attach(Windows.UI.Xaml.Controls.SwapChainPanel panel);
|
||||||
|
void BeginRendering();
|
||||||
|
|
||||||
|
void ThisIsInsane(UInt64 swapchainHandle);
|
||||||
|
|
||||||
|
// Adding a Windows.UI.Xaml element will crash the server when the
|
||||||
|
// server tries to instantiate the element without a XAML host.
|
||||||
|
//
|
||||||
|
// Windows.UI.Xaml.Controls.Button MyButton { get; };
|
||||||
|
};
|
||||||
|
}
|
||||||
6
src/tools/ScratchWinRTServer/IMyComInterface.h
Normal file
6
src/tools/ScratchWinRTServer/IMyComInterface.h
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
struct __declspec(uuid("28578d33-c090-4279-9669-dbeea3f24bb0")) IMyComInterface : ::IUnknown
|
||||||
|
{
|
||||||
|
virtual HRESULT __stdcall Call() = 0;
|
||||||
|
};
|
||||||
9
src/tools/ScratchWinRTServer/IMyComInterface.idl
Normal file
9
src/tools/ScratchWinRTServer/IMyComInterface.idl
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
// [
|
||||||
|
// uuid("BB64926F-1A4D-470D-BB8A-3D2CC4B035E4"),
|
||||||
|
// object,
|
||||||
|
// local
|
||||||
|
// ] interface IMyComInterface : IUnknown
|
||||||
|
// {
|
||||||
|
// HRESULT MyMethod();
|
||||||
|
// };
|
||||||
11
src/tools/ScratchWinRTServer/IScratchInterface.idl
Normal file
11
src/tools/ScratchWinRTServer/IScratchInterface.idl
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
|
||||||
|
namespace ScratchWinRTServer
|
||||||
|
{
|
||||||
|
// [default_interface]
|
||||||
|
interface IScratchInterface
|
||||||
|
{
|
||||||
|
String DoTheThing();
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
16
src/tools/ScratchWinRTServer/PropertySheet.props
Normal file
16
src/tools/ScratchWinRTServer/PropertySheet.props
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<!--
|
||||||
|
To customize common C++/WinRT project properties:
|
||||||
|
* right-click the project node
|
||||||
|
* expand the Common Properties item
|
||||||
|
* select the C++/WinRT property page
|
||||||
|
|
||||||
|
For more advanced scenarios, and complete documentation, please see:
|
||||||
|
https://github.com/Microsoft/cppwinrt/tree/master/nuget
|
||||||
|
-->
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup />
|
||||||
|
</Project>
|
||||||
11
src/tools/ScratchWinRTServer/ScratchClass.cpp
Normal file
11
src/tools/ScratchWinRTServer/ScratchClass.cpp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#include "pch.h"
|
||||||
|
#include "ScratchClass.h"
|
||||||
|
|
||||||
|
#include "ScratchClass.g.cpp"
|
||||||
|
namespace winrt::ScratchWinRTServer::implementation
|
||||||
|
{
|
||||||
|
ScratchClass::ScratchClass()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
21
src/tools/ScratchWinRTServer/ScratchClass.h
Normal file
21
src/tools/ScratchWinRTServer/ScratchClass.h
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ScratchClass.g.h"
|
||||||
|
namespace winrt::ScratchWinRTServer::implementation
|
||||||
|
{
|
||||||
|
struct ScratchClass : public ScratchClassT<ScratchClass>
|
||||||
|
{
|
||||||
|
ScratchClass();
|
||||||
|
hstring DoTheThing()
|
||||||
|
{
|
||||||
|
return L"Hello there";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace winrt::ScratchWinRTServer::factory_implementation
|
||||||
|
{
|
||||||
|
struct ScratchClass : ScratchClassT<ScratchClass, implementation::ScratchClass>
|
||||||
|
{
|
||||||
|
};
|
||||||
|
}
|
||||||
15
src/tools/ScratchWinRTServer/ScratchClass.idl
Normal file
15
src/tools/ScratchWinRTServer/ScratchClass.idl
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
|
||||||
|
namespace ScratchWinRTServer
|
||||||
|
{
|
||||||
|
[default_interface] runtimeclass ScratchClass // : IScratchInterface
|
||||||
|
{
|
||||||
|
ScratchClass();
|
||||||
|
String DoTheThing();
|
||||||
|
|
||||||
|
// Adding a Windows.UI.Xaml element will crash the server when the
|
||||||
|
// server tries to instantiate the element without a XAML host.
|
||||||
|
//
|
||||||
|
// Windows.UI.Xaml.Controls.Button MyButton { get; };
|
||||||
|
};
|
||||||
|
}
|
||||||
24
src/tools/ScratchWinRTServer/ScratchWinRTServer.manifest
Normal file
24
src/tools/ScratchWinRTServer/ScratchWinRTServer.manifest
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||||
|
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||||
|
<application>
|
||||||
|
<!-- Windows 10 1903 -->
|
||||||
|
<!-- See https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/xaml-islands -->
|
||||||
|
<!-- "maxversiontested" is CASE SENSITIVE. Do not change this.-->
|
||||||
|
<maxversiontested Id="10.0.18362.0"/>
|
||||||
|
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
|
||||||
|
</application>
|
||||||
|
</compatibility>
|
||||||
|
|
||||||
|
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||||
|
<windowsSettings>
|
||||||
|
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
|
||||||
|
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
|
||||||
|
</windowsSettings>
|
||||||
|
</application>
|
||||||
|
|
||||||
|
<file name="ScratchWinRTServer.exe" hashalg="SHA1">
|
||||||
|
<activatableClass name="ScratchWinRTServer.ScratchClass" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1"></activatableClass>
|
||||||
|
</file>
|
||||||
|
|
||||||
|
</assembly>
|
||||||
103
src/tools/ScratchWinRTServer/ScratchWinRTServer.vcxproj
Normal file
103
src/tools/ScratchWinRTServer/ScratchWinRTServer.vcxproj
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{d46d9547-f085-4645-b8f7-e8cd21559ab4}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>ScratchWinRTServer</RootNamespace>
|
||||||
|
<ProjectName>ScratchWinRTServer</ProjectName>
|
||||||
|
<TargetName>ScratchWinRTServer</TargetName>
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<OpenConsoleUniversalApp>false</OpenConsoleUniversalApp>
|
||||||
|
<ApplicationType>Windows Store</ApplicationType>
|
||||||
|
<TargetPlatformIdentifier>Windows</TargetPlatformIdentifier>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<Import Project="..\..\..\common.openconsole.props" Condition="'$(OpenConsoleDir)'==''" />
|
||||||
|
<Import Project="$(OpenConsoleDir)src\cppwinrt.build.pre.props" />
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<GenerateManifest>true</GenerateManifest>
|
||||||
|
<EmbedManifest>true</EmbedManifest>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!-- Source Files -->
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="pch.h" />
|
||||||
|
<ClInclude Include="ScratchClass.h" />
|
||||||
|
<ClInclude Include="HostClass.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="ScratchClass.cpp">
|
||||||
|
<DependentUpon>ScratchClass.idl</DependentUpon>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="HostClass.cpp">
|
||||||
|
<DependentUpon>HostClass.idl</DependentUpon>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="main.cpp" />
|
||||||
|
<ClCompile Include="pch.cpp">
|
||||||
|
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Midl Include="IScratchInterface.idl" />
|
||||||
|
<Midl Include="ScratchClass.idl" />
|
||||||
|
<Midl Include="HostClass.idl" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!-- Dependencies -->
|
||||||
|
<ItemGroup>
|
||||||
|
<!-- <ProjectReference Include="..\ScratchWinRTServer\ScratchWinRTServer.vcxproj">
|
||||||
|
<Project>{d46d9547-f085-4645-b8f7-e8cd21559ab4}</Project>
|
||||||
|
</ProjectReference> -->
|
||||||
|
<ProjectReference Include="$(SolutionDir)src\types\lib\types.vcxproj" />
|
||||||
|
|
||||||
|
<ProjectReference Include="$(SolutionDir)src\buffer\out\lib\bufferout.vcxproj" />
|
||||||
|
<ProjectReference Include="$(SolutionDir)src\renderer\base\lib\base.vcxproj" />
|
||||||
|
<ProjectReference Include="$(SolutionDir)src\renderer\dx\lib\dx.vcxproj" />
|
||||||
|
<ProjectReference Include="$(SolutionDir)src\renderer\uia\lib\uia.vcxproj" />
|
||||||
|
<ProjectReference Include="$(SolutionDir)src\terminal\parser\lib\parser.vcxproj" />
|
||||||
|
<ProjectReference Include="$(SolutionDir)src\terminal\input\lib\terminalinput.vcxproj" />
|
||||||
|
<!-- <ProjectReference Include="$(SolutionDir)src\cascadia\TerminalSettings\TerminalSettings.vcxproj">
|
||||||
|
<Private>false</Private>
|
||||||
|
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
|
||||||
|
</ProjectReference> -->
|
||||||
|
<ProjectReference Include="$(SolutionDir)src\cascadia\TerminalCore\lib\TerminalCore-lib.vcxproj" />
|
||||||
|
<ProjectReference Include="$(SolutionDir)src\cascadia\TerminalConnection\TerminalConnection.vcxproj">
|
||||||
|
<Private>false</Private>
|
||||||
|
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This ItemGroup and the Globals PropertyGroup below it are required in order
|
||||||
|
to enable F5 debugging for the unpackaged application
|
||||||
|
-->
|
||||||
|
<ItemGroup>
|
||||||
|
<PropertyPageSchema Include="$(VCTargetsPath)$(LangID)\debugger_general.xml" />
|
||||||
|
<PropertyPageSchema Include="$(VCTargetsPath)$(LangID)\debugger_local_windows.xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<Import Project="$(OpenConsoleDir)src\cppwinrt.build.post.props" />
|
||||||
|
|
||||||
|
<!-- These have to come after post.props because the Cpp common targets will inexplicably overwrite them. -->
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
|
||||||
|
<Import Project="$(OpenConsoleDir)\build\rules\GenerateSxsManifestsFromWinmds.targets" />
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="pch.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="pch.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="main.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="PropertySheet.props" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Text Include="readme.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
207
src/tools/ScratchWinRTServer/main.cpp
Normal file
207
src/tools/ScratchWinRTServer/main.cpp
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
#include "pch.h"
|
||||||
|
#include <winrt/ScratchWinRTServer.h>
|
||||||
|
#include "ScratchClass.h"
|
||||||
|
#include "HostClass.h"
|
||||||
|
using namespace winrt;
|
||||||
|
// using namespace winrt::Windows::Foundation;
|
||||||
|
|
||||||
|
struct ScratchStringable : implements<ScratchStringable, winrt::Windows::Foundation::IStringable, winrt::Windows::Foundation::IClosable, winrt::ScratchWinRTServer::IScratchInterface>
|
||||||
|
{
|
||||||
|
hstring ToString()
|
||||||
|
{
|
||||||
|
return L"Hello from server, ScratchStringable";
|
||||||
|
}
|
||||||
|
hstring DoTheThing()
|
||||||
|
{
|
||||||
|
return L"Zhu Li! Do the thing!";
|
||||||
|
}
|
||||||
|
void Close() { printf("Closed ScratchStringable\n"); }
|
||||||
|
};
|
||||||
|
struct MyStringable : implements<MyStringable, winrt::Windows::Foundation::IStringable>
|
||||||
|
{
|
||||||
|
hstring ToString()
|
||||||
|
{
|
||||||
|
return L"Hello from server, MyStringable";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MyStringableFactory : implements<MyStringableFactory, IClassFactory>
|
||||||
|
{
|
||||||
|
HRESULT __stdcall CreateInstance(IUnknown* outer, GUID const& iid, void** result) noexcept final
|
||||||
|
{
|
||||||
|
*result = nullptr;
|
||||||
|
if (outer)
|
||||||
|
{
|
||||||
|
return CLASS_E_NOAGGREGATION;
|
||||||
|
}
|
||||||
|
printf("Created MyStringable\n");
|
||||||
|
return make<MyStringable>().as(iid, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT __stdcall LockServer(BOOL) noexcept final
|
||||||
|
{
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ScratchStringableFactory : implements<ScratchStringableFactory, IClassFactory>
|
||||||
|
{
|
||||||
|
HRESULT __stdcall CreateInstance(IUnknown* outer, GUID const& iid, void** result) noexcept final
|
||||||
|
{
|
||||||
|
*result = nullptr;
|
||||||
|
if (outer)
|
||||||
|
{
|
||||||
|
return CLASS_E_NOAGGREGATION;
|
||||||
|
}
|
||||||
|
printf("Created ScratchStringable\n");
|
||||||
|
return make<ScratchStringable>().as(iid, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT __stdcall LockServer(BOOL) noexcept final
|
||||||
|
{
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
struct ScratchClassFactory : implements<ScratchClassFactory, IClassFactory>
|
||||||
|
{
|
||||||
|
HRESULT __stdcall CreateInstance(IUnknown* outer, GUID const& iid, void** result) noexcept final
|
||||||
|
{
|
||||||
|
*result = nullptr;
|
||||||
|
if (outer)
|
||||||
|
{
|
||||||
|
return CLASS_E_NOAGGREGATION;
|
||||||
|
}
|
||||||
|
printf("\x1b[90mSERVER: Created ScratchClass\x1b[m\n");
|
||||||
|
return make<ScratchWinRTServer::implementation::ScratchClass>().as(iid, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT __stdcall LockServer(BOOL) noexcept final
|
||||||
|
{
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
std::mutex m;
|
||||||
|
std::condition_variable cv;
|
||||||
|
bool dtored = false;
|
||||||
|
winrt::weak_ref<ScratchWinRTServer::implementation::HostClass> g_weak{ nullptr };
|
||||||
|
|
||||||
|
struct HostClassFactory : implements<HostClassFactory, IClassFactory>
|
||||||
|
{
|
||||||
|
HostClassFactory(winrt::guid g) :
|
||||||
|
_guid{ g } {};
|
||||||
|
|
||||||
|
HRESULT __stdcall CreateInstance(IUnknown* outer, GUID const& iid, void** result) noexcept final
|
||||||
|
{
|
||||||
|
*result = nullptr;
|
||||||
|
if (outer)
|
||||||
|
{
|
||||||
|
return CLASS_E_NOAGGREGATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!g_weak)
|
||||||
|
{
|
||||||
|
auto strong = make_self<ScratchWinRTServer::implementation::HostClass>(_guid);
|
||||||
|
|
||||||
|
g_weak = (*strong).get_weak();
|
||||||
|
return strong.as(iid, result);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto strong = g_weak.get();
|
||||||
|
return strong.as(iid, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT __stdcall LockServer(BOOL) noexcept final
|
||||||
|
{
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
winrt::guid _guid;
|
||||||
|
};
|
||||||
|
|
||||||
|
// DAA16D7F-EF66-4FC9-B6F2-3E5B6D924576
|
||||||
|
static constexpr GUID MyStringable_clsid{
|
||||||
|
0xdaa16d7f,
|
||||||
|
0xef66,
|
||||||
|
0x4fc9,
|
||||||
|
{ 0xb6, 0xf2, 0x3e, 0x5b, 0x6d, 0x92, 0x45, 0x76 }
|
||||||
|
};
|
||||||
|
|
||||||
|
// EAA16D7F-EF66-4FC9-B6F2-3E5B6D924576
|
||||||
|
static constexpr GUID ScratchStringable_clsid{
|
||||||
|
0xeaa16d7f,
|
||||||
|
0xef66,
|
||||||
|
0x4fc9,
|
||||||
|
{ 0xb6, 0xf2, 0x3e, 0x5b, 0x6d, 0x92, 0x45, 0x76 }
|
||||||
|
};
|
||||||
|
// FAA16D7F-EF66-4FC9-B6F2-3E5B6D924576
|
||||||
|
static constexpr GUID ScratchClass_clsid{
|
||||||
|
0xfaa16d7f,
|
||||||
|
0xef66,
|
||||||
|
0x4fc9,
|
||||||
|
{ 0xb6, 0xf2, 0x3e, 0x5b, 0x6d, 0x92, 0x45, 0x76 }
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
auto hOut = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
|
DWORD dwMode = 0;
|
||||||
|
GetConsoleMode(hOut, &dwMode);
|
||||||
|
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
|
||||||
|
SetConsoleMode(hOut, dwMode);
|
||||||
|
|
||||||
|
printf("\x1b[90mSERVER: args:[");
|
||||||
|
if (argc > 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < argc; i++)
|
||||||
|
{
|
||||||
|
printf("%s,", argv[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("]\x1b[m\n");
|
||||||
|
|
||||||
|
winrt::guid guidFromCmdline{};
|
||||||
|
|
||||||
|
if (argc > 1)
|
||||||
|
{
|
||||||
|
std::string guidString{ argv[1] };
|
||||||
|
auto canConvert = guidString.length() == 38 && guidString.front() == '{' && guidString.back() == '}';
|
||||||
|
if (canConvert)
|
||||||
|
{
|
||||||
|
std::wstring wideGuidStr{ til::u8u16(guidString) };
|
||||||
|
printf("\x1b[90mSERVER: Found GUID:%ls\x1b[m\n", wideGuidStr.c_str());
|
||||||
|
GUID result{};
|
||||||
|
THROW_IF_FAILED(IIDFromString(wideGuidStr.c_str(), &result));
|
||||||
|
guidFromCmdline = result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (guidFromCmdline == winrt::guid{})
|
||||||
|
{
|
||||||
|
printf("did not recieve GUID, early returning.");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
init_apartment();
|
||||||
|
|
||||||
|
DWORD registrationHostClass{};
|
||||||
|
check_hresult(CoRegisterClassObject(guidFromCmdline,
|
||||||
|
make<HostClassFactory>(guidFromCmdline).get(),
|
||||||
|
CLSCTX_LOCAL_SERVER,
|
||||||
|
// CLSCTX_LOCAL_SERVER | CLSCTX_ENABLE_AAA,
|
||||||
|
// CLSCTX_LOCAL_SERVER | CLSCTX_ACTIVATE_AAA_AS_IU,
|
||||||
|
// CLSCTX_LOCAL_SERVER | CLSCTX_FROM_DEFAULT_CONTEXT,
|
||||||
|
// CLSCTX_LOCAL_SERVER | CLSCTX_ENABLE_CLOAKING,
|
||||||
|
REGCLS_MULTIPLEUSE,
|
||||||
|
®istrationHostClass));
|
||||||
|
printf("%d\n", registrationHostClass);
|
||||||
|
|
||||||
|
std::unique_lock<std::mutex> lk(m);
|
||||||
|
cv.wait(lk, [] { return dtored; });
|
||||||
|
|
||||||
|
// printf("\x1b[90mSERVER: Press Enter me when you're done serving.\x1b[m");
|
||||||
|
// getchar();
|
||||||
|
printf("\x1b[90mSERVER: exiting %s\n\x1b[m", argv[1]);
|
||||||
|
}
|
||||||
4
src/tools/ScratchWinRTServer/packages.config
Normal file
4
src/tools/ScratchWinRTServer/packages.config
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.200609.3" targetFramework="native" />
|
||||||
|
</packages>
|
||||||
1
src/tools/ScratchWinRTServer/pch.cpp
Normal file
1
src/tools/ScratchWinRTServer/pch.cpp
Normal file
@@ -0,0 +1 @@
|
|||||||
|
#include "pch.h"
|
||||||
43
src/tools/ScratchWinRTServer/pch.h
Normal file
43
src/tools/ScratchWinRTServer/pch.h
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
// Manually include til after we include Windows.Foundation to give it winrt superpowers
|
||||||
|
#define BLOCK_TIL
|
||||||
|
#include <wil/cppwinrt.h>
|
||||||
|
#undef max
|
||||||
|
#undef min
|
||||||
|
#include "LibraryIncludes.h"
|
||||||
|
|
||||||
|
// This is inexplicable, but for whatever reason, cppwinrt conflicts with the
|
||||||
|
// SDK definition of this function, so the only fix is to undef it.
|
||||||
|
// from WinBase.h
|
||||||
|
// Windows::UI::Xaml::Media::Animation::IStoryboard::GetCurrentTime
|
||||||
|
#ifdef GetCurrentTime
|
||||||
|
#undef GetCurrentTime
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <Unknwn.h>
|
||||||
|
#include <winrt/Windows.Foundation.h>
|
||||||
|
#include <winrt/Windows.Foundation.Collections.h>
|
||||||
|
|
||||||
|
#include <winrt/Windows.UI.Xaml.Controls.h>
|
||||||
|
#include <winrt/Windows.UI.Xaml.Media.h>
|
||||||
|
#include <windows.ui.xaml.media.dxinterop.h>
|
||||||
|
|
||||||
|
// Manually include til after we include Windows.Foundation to give it winrt superpowers
|
||||||
|
#include "til.h"
|
||||||
|
|
||||||
|
#include <dxgi.h>
|
||||||
|
#include <dxgi1_2.h>
|
||||||
|
#include <dxgi1_3.h>
|
||||||
|
|
||||||
|
#include <d3d11.h>
|
||||||
|
#include <d2d1.h>
|
||||||
|
#include <d2d1_1.h>
|
||||||
|
#include <d2d1_2.h>
|
||||||
|
#include <d2d1_3.h>
|
||||||
|
#include <d2d1helper.h>
|
||||||
|
#include <dwrite.h>
|
||||||
|
#include <dwrite_1.h>
|
||||||
|
#include <dwrite_2.h>
|
||||||
|
#include <dwrite_3.h>
|
||||||
30
src/tools/ScratchWinRTServer/readme.txt
Normal file
30
src/tools/ScratchWinRTServer/readme.txt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
========================================================================
|
||||||
|
C++/WinRT ScratchWinRTServer Project Overview
|
||||||
|
========================================================================
|
||||||
|
|
||||||
|
This project demonstrates how to get started consuming Windows Runtime
|
||||||
|
classes directly from standard C++, using platform projection headers
|
||||||
|
generated from Windows SDK metadata files.
|
||||||
|
|
||||||
|
Steps to generate and consume SDK platform projection:
|
||||||
|
1. Build project initally to generate platform projection headers into
|
||||||
|
your Generated Files folder.
|
||||||
|
2. Include a projection namespace header in your pch.h, such as
|
||||||
|
<winrt/Windows.Foundation.h>.
|
||||||
|
3. Consume winrt namespace and any Windows Runtime namespaces, such as
|
||||||
|
winrt::Windows::Foundation, from source code.
|
||||||
|
4. Initialize apartment via init_apartment() and consume winrt classes.
|
||||||
|
|
||||||
|
Steps to generate and consume a projection from third party metadata:
|
||||||
|
1. Add a WinMD reference by right-clicking the References project node
|
||||||
|
and selecting "Add Reference...". In the Add References dialog,
|
||||||
|
browse to the component WinMD you want to consume and add it.
|
||||||
|
2. Build the project once to generate projection headers for the
|
||||||
|
referenced WinMD file under the "Generated Files" subfolder.
|
||||||
|
3. As above, include projection headers in pch or source code
|
||||||
|
to consume projected Windows Runtime classes.
|
||||||
|
|
||||||
|
========================================================================
|
||||||
|
Learn more about C++/WinRT here:
|
||||||
|
http://aka.ms/cppwinrt/
|
||||||
|
========================================================================
|
||||||
Reference in New Issue
Block a user