diff --git a/build.zig.zon b/build.zig.zon index 275921a..d5fbda4 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -30,7 +30,7 @@ .hash = "fuzzig-0.1.1-Ji0xivxIAQBD0g8O_NV_0foqoPf3elsg9Sc3pNfdVH4D", }, .vaxis = .{ - .url = "git+https://github.com/neurocyte/libvaxis?ref=main#e9c1111efd98aeb7c2db45d3e31987429fb5f26d", + .url = "git+https://github.com/neurocyte/libvaxis?ref=main#78aff0865f0f6206ece9263dcd9b051352da1e82", .hash = "vaxis-0.5.1-BWNV_BkyCQAo2UBeY_gbzP09d4pHDaqtg44snF5k3mh2", }, .zeit = .{ diff --git a/src/main.zig b/src/main.zig index 7a73f41..4df0d49 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1119,6 +1119,7 @@ fn resolve_executable(executable: [:0]const u8) [:0]const u8 { } fn restart() noreturn { + if (builtin.os.tag == .windows) return restart_win32(); const executable = resolve_executable(std.mem.span(std.os.argv[0])); const argv = [_]?[*:0]const u8{ executable, @@ -1143,6 +1144,40 @@ fn restart_with_sudo() noreturn { restart_failed(ret); } +fn restart_win32() noreturn { + if (!build_options.gui) return restart_manual(); + const executable = resolve_executable(std.mem.span(std.os.argv[0])); + const argv = [_][]const u8{ + executable, + "--restore-session", + }; + const a = std.heap.c_allocator; + var child = std.process.Child.init(&argv, a); + child.stdin_behavior = .Inherit; + child.stdout_behavior = .Inherit; + child.stderr_behavior = .Inherit; + child.spawn() catch { + std.os.windows.kernel32.ExitProcess(1); + }; + std.os.windows.kernel32.ExitProcess(0); +} + +fn restart_manual() noreturn { + const executable = resolve_executable(std.mem.span(std.os.argv[0])); + var stderr_buffer: [1024]u8 = undefined; + var stderr_writer = std.fs.File.stderr().writer(&stderr_buffer); + stderr_writer.interface.print( + \\ + \\ Manual restart required. Run: + \\ > {s} --restore-session + \\ to restart now. + \\ + \\ + , .{executable}) catch {}; + stderr_writer.interface.flush() catch {}; + exit(234); +} + fn restart_failed(ret: c_int) noreturn { var stderr_buffer: [1024]u8 = undefined; var stderr_writer = std.fs.File.stderr().writer(&stderr_buffer); diff --git a/src/renderer/vaxis/renderer.zig b/src/renderer/vaxis/renderer.zig index 30a9252..b114b29 100644 --- a/src/renderer/vaxis/renderer.zig +++ b/src/renderer/vaxis/renderer.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const root = @import("root"); const cbor = @import("cbor"); const log = @import("log"); const Style = @import("theme").Style; @@ -80,7 +81,13 @@ pub fn init(allocator: std.mem.Allocator, handler_ctx: *anyopaque, no_alternate: const tty_buffer = try allocator.alloc(u8, 4096); return .{ .allocator = allocator, - .tty = vaxis.Tty.init(tty_buffer) catch return error.TtyInitError, + .tty = vaxis.Tty.init(tty_buffer) catch |e| { + var stderr_buffer: [1024]u8 = undefined; + var stderr_writer = std.fs.File.stderr().writer(&stderr_buffer); + stderr_writer.interface.print("\n" ++ root.application_name ++ " ERROR: {s}\n", .{@errorName(e)}) catch {}; + stderr_writer.interface.flush() catch {}; + return error.TtyInitError; + }, .tty_buffer = tty_buffer, .vx = try vaxis.init(allocator, opts), .no_alternate = no_alternate,