diff --git a/.github/actions/spelling/allow/allow.txt b/.github/actions/spelling/allow/allow.txt
index 0fddd6495a..57925b284c 100644
--- a/.github/actions/spelling/allow/allow.txt
+++ b/.github/actions/spelling/allow/allow.txt
@@ -1,5 +1,6 @@
AABBGGRR
BBX
+CLSCTX
COLRv
DWIDTH
ENDCHAR
@@ -7,18 +8,30 @@ ENDFONT
ENDPROPERTIES
FONTBOUNDINGBOX
FreeBSD
+HKCR
+IClass
+ITerminal
LASTEXITCODE
+MULTIPLEUSE
+NOAGGREGATION
+NOINTERFACE
OPENCONSOLE
OpenBSD
+REFIID
+REGCLS
SEMA
STARTCHAR
STARTFONT
STARTPROPERTIES
+STDMETHODCALLTYPE
SWIDTH
+Unknwn
Unpremultiply
UpperCamelCase
XBase
+XCount
YBase
+YCount
aea
appleclang
bdf
@@ -38,6 +51,9 @@ nupkg
nushell
openxr
ppem
+ppv
+psz
+riid
tablegen
vswhere
zypper
diff --git a/cmake/presets/os-windows.json b/cmake/presets/os-windows.json
index c4a3d4ad14..1174e4ca25 100644
--- a/cmake/presets/os-windows.json
+++ b/cmake/presets/os-windows.json
@@ -83,6 +83,42 @@
"value": "x64",
"strategy": "external"
}
+ },
+ {
+ "name": "windows-msvc-ninja-debug",
+ "inherits": [
+ "windows-common",
+ "debug"
+ ],
+ "displayName": "Windows (MSVC+Ninja) Debug",
+ "description": "Using MSVC compiler with Ninja generator",
+ "generator": "Ninja",
+ "architecture": {
+ "value": "x64",
+ "strategy": "external"
+ },
+ "toolset": {
+ "value": "host=x64",
+ "strategy": "external"
+ }
+ },
+ {
+ "name": "windows-msvc-ninja-release",
+ "inherits": [
+ "windows-common",
+ "release"
+ ],
+ "displayName": "Windows (MSVC+Ninja) Release",
+ "description": "Using MSVC compiler with Ninja generator",
+ "generator": "Ninja",
+ "architecture": {
+ "value": "x64",
+ "strategy": "external"
+ },
+ "toolset": {
+ "value": "host=x64",
+ "strategy": "external"
+ }
}
],
"buildPresets": [
@@ -109,6 +145,18 @@
"displayName": "x64 (ClangCL) RelWithDebInfo",
"configurePreset": "clangcl-release",
"configuration": "RelWithDebInfo"
+ },
+ {
+ "name": "windows-msvc-ninja-debug",
+ "displayName": "x64 (MSVC+Ninja) Debug",
+ "configurePreset": "windows-msvc-ninja-debug",
+ "configuration": "Debug"
+ },
+ {
+ "name": "windows-msvc-ninja-release",
+ "displayName": "x64 (MSVC+Ninja) RelWithDebInfo",
+ "configurePreset": "windows-msvc-ninja-release",
+ "configuration": "RelWithDebInfo"
}
],
"testPresets": [
@@ -149,6 +197,20 @@
"Debug"
],
"configurePreset": "msvc-debug"
+ },
+ {
+ "name": "windows-msvc-ninja-debug",
+ "configurations": [
+ "Debug"
+ ],
+ "configurePreset": "windows-msvc-ninja-debug"
+ },
+ {
+ "name": "windows-msvc-ninja-release",
+ "configurations": [
+ "RelWithDebInfo"
+ ],
+ "configurePreset": "windows-msvc-ninja-release"
}
]
}
diff --git a/metainfo.xml b/metainfo.xml
index 21249b71ee..beff0be973 100644
--- a/metainfo.xml
+++ b/metainfo.xml
@@ -163,6 +163,7 @@
Adds VT sequences for double width / double height lines, `DECDHL`, `DECDWL`, `DECSWL` (#137)
Adds VT sequence extension OSC 133 shell integration (#793)
Adds support for rendering COLRv1 fonts (e.g. new Google Noto Color Emoji)
+ Adds Contour Terminal to the list of possible default terminals on Windows 11 (#605)
Drop Qt5 support
diff --git a/patch_openconsole.py b/patch_openconsole.py
new file mode 100644
index 0000000000..bc7453cd91
--- /dev/null
+++ b/patch_openconsole.py
@@ -0,0 +1,94 @@
+
+import sys
+import struct
+
+def guid_to_bytes(guid_str):
+ # UUID format: 2EACA947-7F5F-4CFA-BA87-8F7FBEEFBE69
+ parts = guid_str.replace('-', '').replace('{', '').replace('}', '')
+ d1 = int(parts[0:8], 16)
+ d2 = int(parts[8:12], 16)
+ d3 = int(parts[12:16], 16)
+ d4s = parts[16:]
+ d4 = [int(d4s[i:i+2], 16) for i in range(0, 16, 2)]
+
+ # Struct: DWORD, WORD, WORD, BYTE[8]
+ # Little endian for first 3
+ return struct.pack(' 0:
+ data = data.replace(org_bytes, new_bytes)
+ print("Replaced raw GUID bytes.")
+
+ # 2. Patch UTF-16LE String "{GUID}"
+ org_wstr = f"{{{org_clsid_str}}}".encode('utf-16le')
+ new_wstr = f"{{{new_clsid_str}}}".encode('utf-16le')
+
+ count_w = data.count(org_wstr)
+ print(f"Found {count_w} instances of UTF-16LE string.")
+ if count_w > 0:
+ data = data.replace(org_wstr, new_wstr)
+ print("Replaced UTF-16LE strings.")
+
+ # 2b. Patch UTF-16LE String "GUID" (no braces) - Just in case
+ org_wstr_nb = f"{org_clsid_str}".encode('utf-16le')
+ new_wstr_nb = f"{new_clsid_str}".encode('utf-16le')
+
+ count_w_nb = data.count(org_wstr_nb)
+ print(f"Found {count_w_nb} instances of UTF-16LE string (no braces).")
+ if count_w_nb > 0:
+ # Avoid double replacing if brace version covered it?
+ # replace() handles it, but safer to do brace version first (more specific).
+ # Check if any left
+ if data.count(org_wstr_nb) > 0:
+ data = data.replace(org_wstr_nb, new_wstr_nb)
+ print("Replaced UTF-16LE strings (no braces).")
+
+ # 3. Patch ASCII String "{GUID}"
+ org_astr = f"{{{org_clsid_str}}}".encode('ascii')
+ new_astr = f"{{{new_clsid_str}}}".encode('ascii')
+
+ count_a = data.count(org_astr)
+ print(f"Found {count_a} instances of ASCII string.")
+ if count_a > 0:
+ data = data.replace(org_astr, new_astr)
+ print("Replaced ASCII strings.")
+
+ # 3b. Patch ASCII String "GUID" (no braces)
+ org_astr_nb = f"{org_clsid_str}".encode('ascii')
+ new_astr_nb = f"{new_clsid_str}".encode('ascii')
+
+ count_a_nb = data.count(org_astr_nb)
+ print(f"Found {count_a_nb} instances of ASCII string (no braces).")
+ if count_a_nb > 0:
+ data = data.replace(org_astr_nb, new_astr_nb)
+ print("Replaced ASCII strings (no braces).")
+
+ print(f"Writing {output_path}...")
+ with open(output_path, 'wb') as f:
+ f.write(data)
+ print("Done.")
+
+if __name__ == "__main__":
+ if len(sys.argv) < 3:
+ print("Usage: patch_openconsole.py