aboutsummaryrefslogtreecommitdiff
path: root/vendor/libghostty-vt/src/os/windows.zig
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-04-04 19:22:04 +0300
committerCan Celik <ogulcancelik@gmail.com>2026-04-05 01:23:06 +0300
commit41dd733ca7123c9ac4bfc6c781697a660e95b052 (patch)
tree3fc91815ca139ef2e0b281bba0abda4ef15175f4 /vendor/libghostty-vt/src/os/windows.zig
parent55c138263e190a1e79d4b997bfb9397306c0ec1f (diff)
feat: finish ghostty pane backend integration
Diffstat (limited to 'vendor/libghostty-vt/src/os/windows.zig')
-rw-r--r--vendor/libghostty-vt/src/os/windows.zig133
1 files changed, 133 insertions, 0 deletions
diff --git a/vendor/libghostty-vt/src/os/windows.zig b/vendor/libghostty-vt/src/os/windows.zig
new file mode 100644
index 00000000..e92a5453
--- /dev/null
+++ b/vendor/libghostty-vt/src/os/windows.zig
@@ -0,0 +1,133 @@
+const std = @import("std");
+const windows = std.os.windows;
+
+// Export any constants or functions we need from the Windows API so
+// we can just import one file.
+pub const kernel32 = windows.kernel32;
+pub const unexpectedError = windows.unexpectedError;
+pub const OpenFile = windows.OpenFile;
+pub const CloseHandle = windows.CloseHandle;
+pub const GetCurrentProcessId = windows.GetCurrentProcessId;
+pub const SetHandleInformation = windows.SetHandleInformation;
+pub const DWORD = windows.DWORD;
+pub const FILE_ATTRIBUTE_NORMAL = windows.FILE_ATTRIBUTE_NORMAL;
+pub const FILE_FLAG_OVERLAPPED = windows.FILE_FLAG_OVERLAPPED;
+pub const FILE_SHARE_READ = windows.FILE_SHARE_READ;
+pub const GENERIC_READ = windows.GENERIC_READ;
+pub const HANDLE = windows.HANDLE;
+pub const HANDLE_FLAG_INHERIT = windows.HANDLE_FLAG_INHERIT;
+pub const INFINITE = windows.INFINITE;
+pub const INVALID_HANDLE_VALUE = windows.INVALID_HANDLE_VALUE;
+pub const OPEN_EXISTING = windows.OPEN_EXISTING;
+pub const PIPE_ACCESS_OUTBOUND = windows.PIPE_ACCESS_OUTBOUND;
+pub const PIPE_TYPE_BYTE = windows.PIPE_TYPE_BYTE;
+pub const PROCESS_INFORMATION = windows.PROCESS_INFORMATION;
+pub const S_OK = windows.S_OK;
+pub const SECURITY_ATTRIBUTES = windows.SECURITY_ATTRIBUTES;
+pub const STARTUPINFOW = windows.STARTUPINFOW;
+pub const STARTF_USESTDHANDLES = windows.STARTF_USESTDHANDLES;
+pub const SYNCHRONIZE = windows.SYNCHRONIZE;
+pub const WAIT_FAILED = windows.WAIT_FAILED;
+pub const FALSE = windows.FALSE;
+pub const TRUE = windows.TRUE;
+
+pub const exp = struct {
+ pub const HPCON = windows.LPVOID;
+
+ pub const CREATE_UNICODE_ENVIRONMENT = 0x00000400;
+ pub const EXTENDED_STARTUPINFO_PRESENT = 0x00080000;
+ pub const LPPROC_THREAD_ATTRIBUTE_LIST = ?*anyopaque;
+ pub const FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000;
+
+ pub const STATUS_PENDING = 0x00000103;
+ pub const STILL_ACTIVE = STATUS_PENDING;
+
+ pub const STARTUPINFOEX = extern struct {
+ StartupInfo: windows.STARTUPINFOW,
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+ };
+
+ pub const kernel32 = struct {
+ pub extern "kernel32" fn CreatePipe(
+ hReadPipe: *windows.HANDLE,
+ hWritePipe: *windows.HANDLE,
+ lpPipeAttributes: ?*const windows.SECURITY_ATTRIBUTES,
+ nSize: windows.DWORD,
+ ) callconv(.winapi) windows.BOOL;
+ pub extern "kernel32" fn CreatePseudoConsole(
+ size: windows.COORD,
+ hInput: windows.HANDLE,
+ hOutput: windows.HANDLE,
+ dwFlags: windows.DWORD,
+ phPC: *HPCON,
+ ) callconv(.winapi) windows.HRESULT;
+ pub extern "kernel32" fn ResizePseudoConsole(hPC: HPCON, size: windows.COORD) callconv(.winapi) windows.HRESULT;
+ pub extern "kernel32" fn ClosePseudoConsole(hPC: HPCON) callconv(.winapi) void;
+ pub extern "kernel32" fn InitializeProcThreadAttributeList(
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+ dwAttributeCount: windows.DWORD,
+ dwFlags: windows.DWORD,
+ lpSize: *windows.SIZE_T,
+ ) callconv(.winapi) windows.BOOL;
+ pub extern "kernel32" fn UpdateProcThreadAttribute(
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+ dwFlags: windows.DWORD,
+ Attribute: windows.DWORD_PTR,
+ lpValue: windows.PVOID,
+ cbSize: windows.SIZE_T,
+ lpPreviousValue: ?windows.PVOID,
+ lpReturnSize: ?*windows.SIZE_T,
+ ) callconv(.winapi) windows.BOOL;
+ pub extern "kernel32" fn PeekNamedPipe(
+ hNamedPipe: windows.HANDLE,
+ lpBuffer: ?windows.LPVOID,
+ nBufferSize: windows.DWORD,
+ lpBytesRead: ?*windows.DWORD,
+ lpTotalBytesAvail: ?*windows.DWORD,
+ lpBytesLeftThisMessage: ?*windows.DWORD,
+ ) callconv(.winapi) windows.BOOL;
+ // Duplicated here because lpCommandLine is not marked optional in zig std
+ pub extern "kernel32" fn CreateProcessW(
+ lpApplicationName: ?windows.LPWSTR,
+ lpCommandLine: ?windows.LPWSTR,
+ lpProcessAttributes: ?*windows.SECURITY_ATTRIBUTES,
+ lpThreadAttributes: ?*windows.SECURITY_ATTRIBUTES,
+ bInheritHandles: windows.BOOL,
+ dwCreationFlags: windows.DWORD,
+ lpEnvironment: ?*anyopaque,
+ lpCurrentDirectory: ?windows.LPWSTR,
+ lpStartupInfo: *windows.STARTUPINFOW,
+ lpProcessInformation: *windows.PROCESS_INFORMATION,
+ ) callconv(.winapi) windows.BOOL;
+ /// https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getcomputernamea
+ pub extern "kernel32" fn GetComputerNameA(
+ lpBuffer: windows.LPSTR,
+ nSize: *windows.DWORD,
+ ) callconv(.winapi) windows.BOOL;
+ };
+
+ pub const PROC_THREAD_ATTRIBUTE_NUMBER = 0x0000FFFF;
+ pub const PROC_THREAD_ATTRIBUTE_THREAD = 0x00010000;
+ pub const PROC_THREAD_ATTRIBUTE_INPUT = 0x00020000;
+ pub const PROC_THREAD_ATTRIBUTE_ADDITIVE = 0x00040000;
+
+ pub const ProcThreadAttributeNumber = enum(windows.DWORD) {
+ ProcThreadAttributePseudoConsole = 22,
+ _,
+ };
+
+ /// Corresponds to the ProcThreadAttributeValue define in WinBase.h
+ pub fn ProcThreadAttributeValue(
+ comptime attribute: ProcThreadAttributeNumber,
+ comptime thread: bool,
+ comptime input: bool,
+ comptime additive: bool,
+ ) windows.DWORD {
+ return (@intFromEnum(attribute) & PROC_THREAD_ATTRIBUTE_NUMBER) |
+ (if (thread) PROC_THREAD_ATTRIBUTE_THREAD else 0) |
+ (if (input) PROC_THREAD_ATTRIBUTE_INPUT else 0) |
+ (if (additive) PROC_THREAD_ATTRIBUTE_ADDITIVE else 0);
+ }
+
+ pub const PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE = ProcThreadAttributeValue(.ProcThreadAttributePseudoConsole, false, true, false);
+};