diff options
Diffstat (limited to 'src/prompt.zig')
| -rw-r--r-- | src/prompt.zig | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/prompt.zig b/src/prompt.zig new file mode 100644 index 0000000..9fa9a9a --- /dev/null +++ b/src/prompt.zig @@ -0,0 +1,44 @@ +const std = @import("std"); +const ansi = @import("ansi.zig"); + +var output_buffer: [1024]u8 = undefined; +var writer_stderr = std.fs.File.stderr().writer(&output_buffer); +const stderr = &writer_stderr.interface; + +var input_buffer: [1024]u8 = undefined; +var reader_stdin = std.fs.File.stdin().reader(&input_buffer); +const stdin = &reader_stdin.interface; + +pub fn read( + prompt: []const u8, + allocator: std.mem.Allocator, +) ![]u8 { + try stderr.print( + "{f}{f}{f} ", + .{ + ansi.Styled { + .text = " ", + .bg = .blue, + .bold = true, + }, + ansi.Styled { + .text = prompt, + .bg = .blue, + .bold = true, + }, + ansi.Styled { + .text = ": ", + .bg = .blue, + .bold = true, + }, + }, + ); + + try stderr.flush(); + + var output = std.Io.Writer.Allocating.init(allocator); + errdefer output.deinit(); + _ = try stdin.streamDelimiter(&output.writer, '\n'); + stdin.toss(1); + return output.toOwnedSlice(); +} |