From 1ba831270327ec76df654bd8afd51cf35e678aef Mon Sep 17 00:00:00 2001 From: Robby Zambito Date: Sun, 30 Mar 2025 09:10:18 -0400 Subject: [PATCH] --- src/get_prompt.bash | 4 +-- src/main.zig | 62 +++++---------------------------------------- 2 files changed, 9 insertions(+), 57 deletions(-) diff --git a/src/get_prompt.bash b/src/get_prompt.bash index 64f2147..e504ddd 100644 --- a/src/get_prompt.bash +++ b/src/get_prompt.bash @@ -1,7 +1,7 @@ ver=$(bash --version | head -n 1 | awk '{print $4}' | grep -o "\.\..") check_ver=$(echo -e "${ver}\n4.3" | sort -V | head -n 1) if [[ "${ver}" == "${check_ver}" ]]; then - echo "[${USER}@${HOSTNAME} ${PWD##*/}]$ " + echo -n "[${USER}@${HOSTNAME} ${PWD##*/}]$ " else - echo "${PS1@P}" + echo -n "${PS1@P}" fi diff --git a/src/main.zig b/src/main.zig index 19e8060..3fc4eef 100644 --- a/src/main.zig +++ b/src/main.zig @@ -5,48 +5,14 @@ fn clear() !void { const stdout = std.io.getStdOut().writer(); try stdout.print("\u{001b}[H\u{001b}[J", .{}); } -const Pipe = packed struct { - const fd_t = std.posix.fd_t; - read: fd_t, - write: fd_t, -}; - -fn pipe() !Pipe { - return @bitCast(try std.posix.pipe()); -} fn getPrompt() ![]const u8 { - const p = try pipe(); - - const close = std.posix.close; - const dup2 = std.posix.dup2; - const STDIN_FILENO = std.posix.STDIN_FILENO; - const STDOUT_FILENO = std.posix.STDOUT_FILENO; - const STDERR_FILENO = std.posix.STDERR_FILENO; const script = @embedFile("./get_prompt.bash"); - - if (std.posix.fork()) |pid| { - if (pid == 0) { - close(p.read); - - try dup2(p.write, STDOUT_FILENO); - close(STDIN_FILENO); - close(STDERR_FILENO); // Do not print errors to the screen - - // Command-line arguments (must include program name as first argument) - // const args = [_:null]?[*:0]const u8{ "bash", "-i", "-c", script, null }; - var args = [_:null]?[*:0]const u8{ "bash", "-i", "-c", script, null }; - try std.posix.execvpeZ("bash", &args, std.c.environ); - - // std.posix.execvpeZ("bash", @as([*:null]const ?[*:0]const u8, &args[0]), std.os.environ); - _ = std.posix.execvpeZ("bash", @as([*:null]const ?[*:0]const u8, &args[0]), std.os.environ); - // kill the child - std.process.exit(0); - } else {} - return ""; - } else |err| { - return err; - } + const result = try std.process.Child.run(.{ + .allocator = std.heap.page_allocator, + .argv = &[_][]const u8{ "bash", "-i", "-c", script }, + }); + return result.stdout; } pub fn main() !void { @@ -56,27 +22,13 @@ pub fn main() !void { var ln = Linenoise.init(allocator); defer ln.deinit(); - _ = try getPrompt(); + const p = try getPrompt(); - while (try ln.linenoise("hello> ")) |input| { + while (try ln.linenoise(p)) |input| { defer allocator.free(input); std.debug.print("input: {s}\n", .{input}); try ln.history.add(input); } - - // // Prints to stderr (it's a shortcut based on `std.io.getStdErr()`) - // std.debug.print("All your {s} are belong to us.\n", .{"codebase"}); - - // // stdout is for the actual output of your application, for example if you - // // are implementing gzip, then only the compressed bytes should be sent to - // // stdout, not any debugging messages. - // const stdout_file = std.io.getStdOut().writer(); - // var bw = std.io.bufferedWriter(stdout_file); - // const stdout = bw.writer(); - - // try stdout.print("Run `zig build test` to run the tests.\n", .{}); - - // try bw.flush(); // Don't forget to flush! } test "simple test" {