diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-04-04 19:22:04 +0300 |
|---|---|---|
| committer | Can Celik <ogulcancelik@gmail.com> | 2026-04-05 01:23:06 +0300 |
| commit | 41dd733ca7123c9ac4bfc6c781697a660e95b052 (patch) | |
| tree | 3fc91815ca139ef2e0b281bba0abda4ef15175f4 /vendor/libghostty-vt/src/os/windows.zig | |
| parent | 55c138263e190a1e79d4b997bfb9397306c0ec1f (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.zig | 133 |
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); +}; |
