From 3332e0ab2b39c24acf713d7a19af46addc165519 Mon Sep 17 00:00:00 2001 From: Isaac Freund Date: Wed, 8 Apr 2020 21:31:07 +0200 Subject: Fix environment of spawned processes std.ChildProcess isn't handling environment variables set at runtime properly, so just use libc directly. --- src/command.zig | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src/command.zig') diff --git a/src/command.zig b/src/command.zig index 7aac7f6..6b4ec07 100644 --- a/src/command.zig +++ b/src/command.zig @@ -1,6 +1,7 @@ const std = @import("std"); const c = @import("c.zig"); +const Log = @import("log.zig").Log; const Server = @import("server.zig").Server; const ViewStack = @import("view_stack.zig").ViewStack; @@ -8,6 +9,7 @@ pub const Arg = union { int: i32, uint: u32, float: f64, + cstr: [*:0]const u8, none: void, }; @@ -107,9 +109,13 @@ pub fn toggleFocusedViewTags(server: *Server, arg: Arg) void { /// Spawn a program. /// TODO: make this take a program as a paramter and spawn that pub fn spawn(server: *Server, arg: Arg) void { - const argv = [_][]const u8{ "/bin/sh", "-c", "alacritty" }; - const child = std.ChildProcess.init(&argv, std.heap.c_allocator) catch unreachable; - std.ChildProcess.spawn(child) catch unreachable; + const cmd = arg.cstr; + if (c.fork() == 0) { + const terminator: ?*u8 = null; + if (c.execl("/bin/sh", "/bin/sh", "-c", cmd, terminator) == -1) { + Log.Error.log("Failed to execute command {}", .{cmd}); + } + } } /// Close the focused view, if any. -- cgit v1.2.3