From 89516fdd7dee82d4a33988cc98eb8c729e2b9cf4 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Sun, 24 Dec 2023 16:33:31 +0100 Subject: [PATCH] Add exec command and store wlr socket --- .gitignore | 1 + flake.nix | 2 ++ src/commands.zig | 13 +++++++++++++ src/server.zig | 4 ++++ 4 files changed, 20 insertions(+) create mode 100644 src/commands.zig diff --git a/.gitignore b/.gitignore index ab961ba..205400a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ zig-out/ /build/ /build-*/ /docgen_tmp/ +vgcore* diff --git a/flake.nix b/flake.nix index 11d8277..93fff1c 100644 --- a/flake.nix +++ b/flake.nix @@ -81,6 +81,8 @@ if inShell then [ zls-overlay.packages.${system}.default + valgrind + gdb ] else [] ); diff --git a/src/commands.zig b/src/commands.zig new file mode 100644 index 0000000..20649da --- /dev/null +++ b/src/commands.zig @@ -0,0 +1,13 @@ +const std = @import("std"); +const gpa = std.heap.c_allocator; + +const serv = @import("server.zig"); + +pub fn exec(server: *serv.Server, cmd: [:0]const u8) !void { + var child = std.ChildProcess.init(&[_][]const u8{ "/bin/sh", "-c", cmd }, gpa); + var env_map = try std.process.getEnvMap(gpa); + defer env_map.deinit(); + try env_map.put("WAYLAND_DISPLAY", server.socket); + child.env_map = &env_map; + try child.spawn(); +} diff --git a/src/server.zig b/src/server.zig index a3cc8c8..8d177b8 100644 --- a/src/server.zig +++ b/src/server.zig @@ -20,6 +20,7 @@ pub const Server = struct { cursor: *wlr.Cursor, cursor_mgr: *wlr.XcursorManager, + socket: [:0]const u8, events: events.Events, pub fn init(self: *Server) !void { @@ -29,6 +30,8 @@ pub const Server = struct { const output_layout = try wlr.OutputLayout.create(); const scene = try wlr.Scene.create(); + var buf: [11]u8 = undefined; + self.* = Server{ .wl_server = wl_server, .backend = backend, @@ -42,6 +45,7 @@ pub const Server = struct { .cursor = try wlr.Cursor.create(), .cursor_mgr = try wlr.XcursorManager.create(null, 24), .events = undefined, + .socket = try wl_server.addSocketAuto(&buf), }; errdefer self.destroy();