this repo has no description
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

lua: set package.path

Set package.path to look for lua in the config directory:

CONFIG/?.lua, CONFIG/lua/?.lua, and CONFIG/lua/?/init.lua

Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>

+42 -6
+42 -6
src/lua.zig
··· 26 26 // load standard libraries 27 27 lua.openLibs(); 28 28 29 - // preload our library 30 29 _ = try lua.getGlobal("package"); // [package] 31 - _ = lua.getField(-1, "preload"); // [package, preload] 30 + _ = lua.getField(1, "preload"); // [package, preload] 32 31 lua.pushFunction(ziglua.wrap(Comlink.preloader)); // [package, preload, function] 33 - lua.setField(-2, "comlink"); // [package, preload] 32 + lua.setField(2, "comlink"); // [package, preload] 33 + lua.pop(1); // [package] 34 + _ = lua.getField(1, "path"); // [package, string] 35 + const package_path = try lua.toString(2); 36 + lua.pop(1); // [package] 37 + 38 + // set package.path 39 + { 40 + var buf: [std.posix.PATH_MAX]u8 = undefined; 41 + var fba = std.heap.FixedBufferAllocator.init(&buf); 42 + const alloc = fba.allocator(); 43 + const prefix = blk: { 44 + if (app.env.get("XDG_CONFIG_HOME")) |cfg| 45 + break :blk try std.fs.path.join(alloc, &.{ cfg, "comlink" }); 46 + if (app.env.get("HOME")) |home| 47 + break :blk try std.fs.path.join(alloc, &.{ home, ".config/comlink" }); 48 + return error.NoConfigFile; 49 + }; 50 + const base = try std.fs.path.join(app.alloc, &.{ prefix, "?.lua" }); 51 + defer app.alloc.free(base); 52 + const one = try std.fs.path.join(app.alloc, &.{ prefix, "lua/?.lua" }); 53 + defer app.alloc.free(one); 54 + const two = try std.fs.path.join(app.alloc, &.{ prefix, "lua/?/init.lua" }); 55 + defer app.alloc.free(two); 56 + const new_pkg_path = try std.mem.join(app.alloc, ";", &.{ package_path, base, one, two }); 57 + _ = lua.pushString(new_pkg_path); // [package, string] 58 + lua.setField(1, "path"); // [package]; 59 + defer app.alloc.free(new_pkg_path); 60 + } 61 + 34 62 // empty the stack 35 - lua.pop(2); // [] 63 + lua.pop(1); // [] 36 64 37 65 // keep a reference to our app in the lua state 38 66 lua.pushLightUserdata(app); // [userdata] ··· 42 70 lua.setField(registry_index, loop_key); // [] 43 71 44 72 // load config 45 - const home = app.env.get("HOME") orelse return error.EnvironmentVariableNotFound; 46 73 var buf: [std.posix.PATH_MAX]u8 = undefined; 47 - const path = try std.fmt.bufPrintZ(&buf, "{s}/.config/comlink/init.lua", .{home}); 74 + var fba = std.heap.FixedBufferAllocator.init(&buf); 75 + const alloc = fba.allocator(); 76 + const path = blk: { 77 + if (app.env.get("XDG_CONFIG_HOME")) |cfg| 78 + break :blk try std.fs.path.joinZ(alloc, &.{ cfg, "comlink/init.lua" }); 79 + if (app.env.get("HOME")) |home| 80 + break :blk try std.fs.path.joinZ(alloc, &.{ home, ".config/comlink/init.lua" }); 81 + unreachable; 82 + }; 83 + 48 84 switch (ziglua.lang) { 49 85 .luajit, .lua51 => lua.loadFile(path) catch return error.LuaError, 50 86 else => lua.loadFile(path, .binary_text) catch return error.LuaError,